这是具体问题。
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;