web-dev-qa-db-ja.com

nginxとワニスを介してphp-fpmに正しいSERVER_PORTを取得する

目標は、PHP正しいWeb向けserver_portを認識させることです。

セットアップは次のとおりです。

ポート443のnginxをポート80のワニスにリバースプロキシし、ポート8008のnginxにリバースプロキシし、php-fpmをfastcgiとして実行します。

phpの$ _SERVER ['SERVER_PORT']がデフォルトで常に8008を表示していることを除いて、80または443を押しても問題なく動作します。 fastcgi_param server_portをハードコーディングできますが、80または443に対してのみ正しく、両方に対しては正しくありません。

# default
fastcgi_param  SERVER_PORT        $server_port;
# harcode to 80
fastcgi_param  SERVER_PORT        80;

Phpで利用できる適切な外部サーバーポートを取得するにはどうすればよいですか?

5
MDrollette

私自身の答えを見つけました

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;
15
MDrollette