Цель состоит в том, чтобы сообщить PHP о правильном веб-порту server_port.
Настройка такова:
nginx на порту 443 обратное проксирование для лака на порту 80, обратное проксирование на nginx на порт 8008 и запуск php-fpm как fastcgi.
нажатие 80 или 443 работает нормально, за исключением того, что $ _SERVER ['SERVER_PORT'] в php всегда по умолчанию показывает 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;