Назад | Перейти на главную страницу

Получение правильного SERVER_PORT на php-fpm через nginx и varnish

Цель состоит в том, чтобы сообщить 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;