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

$ _SERVER ['SERVER_NAME'] возвращает порт / имя обратного прокси nginx

Я использую WordPress в следующей конфигурации:

Varnish (порт 80) -> nginx (порт 8080)

Все это отлично работает, за исключением случаев, когда какой-либо плагин или другой пытается получить имя моего сервера, используя $_SERVER['SERVER_NAME']. Когда это происходит, он возвращается _:8080 как имя моего сервера и порт. Вот что есть в конфиге nginx:

server {
listen 8080;
server_name _;

Что мне нужно вернуть, так это domain.com но если я изменю конфигурацию nginx, очевидно, он перестанет прослушивать порт, который должен быть (8080) (но изменение имени сервера работает нормально).

Как я могу заставить nginx слушать на 8080, но $_SERVER['SERVER_NAME'] вернуть правильный порт (точнее, не добавить неправильный порт)?

_:8080 является правильное значение для $_SERVER['SERVER_NAME'] в этой конфигурации. Он явно определен для возврата значения server_name. Из документация:

Имя хоста сервера, под которым выполняется текущий сценарий. Если сценарий выполняется на виртуальном хосте, это будет значение, определенное для этого виртуального хоста.

Похоже, вы ищете $_SERVER['HTTP_HOST']. Обратите внимание, что вам также не нужно настраивать Varnish для изменения Host: заголовок запроса.

Вы можете изменить значение по умолчанию $_SERVER['SERVER_NAME'] добавив fastcgi_param директива после то include fastcgi_params; заявление.

Например:

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_param  SERVER_NAME  $http_host;
    ...
}

Значение, определенное во включаемом файле, будет автоматически перезаписано значением $http_host.