Meu nginx.conf tem várias seções de "servidor" e uma seção de servidor pega-tudo. Aqui está um exemplo nginx.conf para dar uma ideia:
user www-data;
worker_processes auto;
worker_cpu_affinity auto;
pid /run/nginx.pid;
events {
worker_connections 4000;
use epoll;
accept_mutex off;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
error_log /var/log/nginx/error.log;
server {
listen 80;
server_name foo.com;
location / {
default_type text/plain;
return 200 "hello from foo.com";
}
error_page 500 502 503 504 /500.html;
}
server {
listen 80 default_server;
server_name _;
location / {
return 403 "sorry";
}
}
}
Estou esperando que o servidor retorne 403 se o cabeçalho "Host" for qualquer coisa menos "foo.com".
Aparentemente, alguém está executando o Burp Suite no meu servidor, e notei um comportamento interessante quando eles enviam um cabeçalho "Host: foo.com:more-stuff-here": NGINX roteia a solicitação para a primeira seção "servidor". Parece que ele ignora os dois pontos e tudo depois dele no valor do cabeçalho.
Eu posso reproduzi-lo localmente com o nginx.conf acima:
$ curl -H "Host: foo.com" http://127.0.0.1
hello from foo.com
$ curl -H "Host: foo.com:unexpected-content" http://127.0.0.1
hello from foo.com
$ curl -H "Host: bar.com" http://127.0.0.1
sorry
Por que o NGINX faz isso? Esse é um comportamento esperado? O que devo mudar no nginx.conf para garantir que as solicitações com o cabeçalho "Host: foo.com:more-stuff-here" vão para o bloco padrão?
Atualização: para quem está pesquisando o mesmo problema, também criei um ticket no rastreador de problemas NGINX .