nginx varnish nginx php-fpm:php 的 _SERVER['REMOTE_ADDR'] 的真实 ip

nginx varnish nginx php-fpm:php 的 _SERVER['REMOTE_ADDR'] 的真实 ip

这是具体问题。

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;

相关内容