目标是让 PHP 知道正确的面向 Web 的 server_port。
设置如下:
nginx 在端口 443 上反向代理到 varnish 在端口 80 上反向代理到 nginx 在端口 8008 上并将 php-fpm 作为 fastcgi 运行。
达到 80 或 443 都可以正常工作,但 php 中的 $_SERVER['SERVER_PORT'] 默认始终显示 8008。我可以硬编码 fastcgi_param server_port,但这样它只对 80 或 443 正确,而对两者则不正确。
# default
fastcgi_param SERVER_PORT $server_port;
# harcode to 80
fastcgi_param SERVER_PORT 80;
如何获取 php 可用的正确的外部服务器端口?
答案1
找到了自己的答案
在 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;