В моем nginx.conf есть несколько разделов «сервер» и общий раздел сервера. Вот пример nginx.conf, чтобы дать вам представление:
www-данные пользователя;
рабочие_процессы авто;
worker_cpu_affinity авто;
pid /run/nginx.pid;
События {
worker_connections 4000;
использовать эполл;
accept_mutex выключен;
}
http {
включить /etc/nginx/mime.types;
default_type application/octet-stream;
журнал_ошибок /var/log/nginx/error.log;
сервер {
слушать 80;
имя_сервера foo.com;
место расположения / {
default_type текстовый/обычный;
вернуть 200 "привет от foo.com";
}
error_page 500 502 503 504 /500.html;
}
сервер {
слушать 80 default_server;
имя сервера _;
место расположения / {
вернуть 403 "извините";
}
}
}
Я ожидаю, что сервер вернет 403, если заголовок «Host» не является «foo.com».
Кто-то явно запускает Burp Suite на моем сервере, и я заметил интересное поведение, когда они отправляют заголовок «Host: foo.com:more-stuff-here»: NGINX направляет запрос в первый раздел «сервер». Похоже, что он игнорирует двоеточие и все после него в значении заголовка.
Я могу воспроизвести его локально с помощью приведенного выше nginx.conf:
$ curl -H "Хост: foo.com" http://127.0.0.1
привет с foo.com
$ curl -H "Хост: foo.com:unexpected-content" http://127.0.0.1
привет с foo.com
$ curl -H "Хост: bar.com" http://127.0.0.1
Извините
Почему NGINX это делает? Это ожидаемое поведение? Что нужно изменить в nginx.conf, чтобы запросы с заголовком «Host: foo.com:more-stuff-here» попадали в блок по умолчанию?
Обновлять: Для тех, кто исследует ту же проблему, я также создал тикет в системе отслеживания проблем NGINX.