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

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

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

相关内容