php中獲取nginx代理後的,客戶端真實IP
一般來說,PHP獲取IP用的是$_SERVER[‘REMOTE_ADDR’],但是經過代理後,這個方式獲取到的是代理伺服器的ip,不符合要求!如果需要獲取真實IP該做什麼呢?
1.修改nginx配置:proxy_set_header,一部分程式碼如下
server { listen 80 default_server; server_name _; index index.html index.htm index.php; location ~ (/.*|$) { proxy_pass_request_headers on; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:6000; } 省略....
其中proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
這個設定就是真實IP相關的,還有一種配置是proxy_set_header X-Forwarded-For $remote_addr;
但是這種會丟失真實IP
2.配置好以後重啟nginx
3.通過$_SERVER['HTTP_X_FORWARDED_FOR']
或者getenv('HTTP_X_FORWARDED_FOR')
就可以拿到真實IP
但是注意!這種方式獲取到的IP是可以修改請求頭偽造的!