Наше приложение работает на сервере NGiNX и логика определяет базу данных в соответствии с хостом.
С последних нескольких дней один из наших клиентов, переопределяющий заголовок host, user-agent и другой, и NGiNX не может получить точные данные заголовка, и наше приложение сбивается.
GET /api/http.php” _ 200 24 “-” “-” “-” “_” “-” to: 10.0.0.48:8080: 0.014 request_time 0.153
Обычно мы получаем
/index.php HTTP/1.1” vtermination.com 302 5 “-” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36” “-” “_” “-” to: 10.0.0.27:8080: 0.004 request_time 0.347
Возможно ли, что NGiNX не заменит заголовок, такой как хост и пользовательский агент?
Переменные заголовка устанавливаются HTTP-клиентом, подключающимся к вашему серверу.
nginx никоим образом не отменяет эти заголовки, поэтому ваше приложение должно быть готово получить произвольные значения из этих заголовков.
Однако, если вас беспокоит только HTTP Host
заголовок, то вы можете ограничить, какие запросы nginx будет передавать вашему приложению.
Конфигурация должна выглядеть примерно так:
server {
listen 443 ssl;
listen 80;
server_name example.com;
... rest of application and SSL configuration ...
}
server {
listen 443 ssl default_server;
listen 80 default_server;
... SSL configuration with self-signed keys ...
return 404;
}
В server_name
в первом блоке конфигурации заставляет nginx отправлять запросы только этому блоку, когда Host
заголовок example.com
. Вам нужно изменить свой собственный домен (-а) на эту строку.
Второй server
блок используется для всех остальных значений Host
заголовок или все запросы без Host
заголовок. В этом случае мы просто отвечаем на каждый запрос с кодом состояния HTTP 404.