CloudFlareやAWSのELB等間に挟むときのメモ。
クライアント
↓ X-Forwarded-For: “”
Proxy1
↓ X-Forwarded-For: “Client”
Proxy2
↓ X-Forwarded-For: “Client, Proxy1”
ELBやCloudFlare
↓ X-Forwarded-For: “Client, Proxy1, Proxy2”
Nginx
この場合にClientのIPアドレス、つまりX-Forwarded-Forのリストで1番手前のIPアドレスが欲しい場合。
$remote_addr | アクセス元IP。プロキシが間にある場合は直前のIP |
set_real_ip_from xxx.xxx.xxx.xxx/xx; | X-Forwarded-Forを偽装しないための設定。このIPからのアクセスのみ書き換える |
real_ip_header X-Forwarded-For; | $remote_addrをアクセス元(X-Forwarded-Forの一番最後のIPアドレス)に書き換える。 |
real_ip_recursive on; | real_ip_headerによって書き換えられた$remote_addrをX-Forwarded-Forの一番最初のIPアドレスに書き換える。デフォルトはoff |
include /etc/nginx/IP_CloudFlare; real_ip_header X-Forwarded-For; #real_ip_recursive on;
#!/bin/bash ngx=/etc/nginx conf=IP_CloudFlare prefix=set_real_ip_from array=(ips-v4 ips-v6) echo -n > $confname for i in "${array[@]}" do wget -O - https://www.cloudflare.com/${i} | while read line do echo "$prefix $line;" >> $ngx/$conf done done
コメント