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

前端之家收集整理的这篇文章主要介绍了通过nginx和varnish获得正确的SERVER_PORT到php-fpm前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

目标是让PHP了解正确的面向web的server_port.

设置是:

端口443上的Nginx反向代理端口80上的varnish反向代理端口8008上的Nginx并运行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的面向外部的服务器端口?

最佳答案
找到了我自己的答案

在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;

猜你在找的Nginx相关文章