![nginx varnish nginx php-fpm:php 的 _SERVER['REMOTE_ADDR'] 的真实 ip](https://linux22.com/image/622017/nginx%20varnish%20nginx%20php-fpm%EF%BC%9Aphp%20%E7%9A%84%20_SERVER%5B'REMOTE_ADDR'%5D%20%E7%9A%84%E7%9C%9F%E5%AE%9E%20ip.png)
这是具体问题。
Nginx 服务器(称之为 N1)在 :80 上监听,然后使用 proxy_pass 转发到 varnish。Varnish 在 127.0.0.1:6081 上监听,然后转发到 8080 上的 Nginx(N2)。N2 与 php-fpm 套接字对话。
N1<>V<>N2<>P
N1:
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://varnish/;
proxy_redirect off;
}
现在
$_SERVER['REMOTE_ADDR'] == '127.0.0.1'
期望
$_SERVER['REMOTE_ADDR'] == '真实远程地址'
答案1
这是一个具体的答案。;)
您可以在 N1 中添加 x-forwarded-for,让它通过 varnish 和 N2 到达 fastcgi:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
然后在 fastcgi 参数中:
fastcgi_param REMOTE_ADDR $http_x_forwarded_for;