通过nginx和varnish获取正确的SERVER_PORT到php-fpm

目标是让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;