Nginx.conf meu are mai multe secțiuni „server” și o secțiune de server catch-all. Iată un exemplu de nginx.conf pentru a vă face o idee:
utilizator www-date;
worker_proceses auto;
worker_cpu_affinity auto;
pid /run/nginx.pid;
evenimente {
muncitor_conexiuni 4000;
utilizați epoll;
accept_mutex dezactivat;
}
http {
includ /etc/nginx/mime.types;
aplicație de tip_default/octet-stream;
error_log /var/log/nginx/error.log;
Server {
asculta 80;
nume_server foo.com;
Locație / {
default_type text/plain;
returnează 200 „bună ziua de la foo.com”;
}
pagina_eroare 500 502 503 504 /500.html;
}
Server {
asculta 80 default_server;
numele serverului _;
Locație / {
returnează 403 „scuze”;
}
}
}
Mă aștept ca serverul să returneze 403 dacă antetul „Gazdă” este altceva decât „foo.com”.
Se pare că cineva rulează Burp Suite pe serverul meu și am observat un comportament interesant când trimit un antet „Gazdă: foo.com:more-stuff-here”: NGINX direcționează cererea către prima secțiune „server”. Se pare că ignoră două puncte și tot ce se află după el în valoarea antetului.
Îl pot reproduce local cu nginx.conf de mai sus:
$ curl -H „Gazdă: foo.com” http://127.0.0.1
salutare de la foo.com
$ curl -H „Gazdă: foo.com:unexpected-content” http://127.0.0.1
salutare de la foo.com
$ curl -H „Gazdă: bar.com” http://127.0.0.1
scuze
De ce face NGINX asta? Este acesta un comportament așteptat? Ce ar trebui să schimb în nginx.conf pentru a mă asigura că solicitările cu antetul „Host: foo.com:more-stuff-here” ajung la blocul implicit?
Actualizați: Pentru oricine care cercetează aceeași problemă, am creat și eu un bilet în trackerul problemelor NGINX.