目标是让PHP知道正确的面向web的server_port。
设置是:
在端口443上的nginx反向代理到在端口80上的清漆反向代理到在端口8008上的nginx并运行php-fpm作为fastcgi。
击中80或443都工作正常,除了$ _SERVER ['SERVER_PORT']在PHP总是显示8008默认情况下。 我可以硬编码一个fastcgi_param server_port,但它只会是正确的80或443,但不是两个。
# default fastcgi_param SERVER_PORT $server_port; # harcode to 80 fastcgi_param SERVER_PORT 80;
我怎样才能得到正确的面向外部的服务器端口可用于PHP?
find我自己的答案
在SSL nginx中,这个…
proxy_set_header X-Forwarded-Proto https;
然后在清漆,这…
sub vcl_recv { if (req.http.X-Forwarded-Proto == "https" ) { set req.http.X-Forwarded-Port = "443"; } else { set req.http.X-Forwarded-Port = "80"; set req.http.X-Forwarded-Proto = "http"; } }
然后在最后的nginx中,这个…
fastcgi_param SERVER_PORT $http_x_forwarded_port;