目標は、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で利用できる適切な外部サーバーポートを取得するにはどうすればよいですか?
私自身の答えを見つけました
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;