Nginx.conf của tôi có một số phần "máy chủ" và phần máy chủ tổng hợp. Đây là một ví dụ nginx.conf để cung cấp cho bạn một ý tưởng:
dữ liệu www của người dùng;
worker_processes tự động;
worker_cpu_affinity tự động;
pid /run/nginx.pid;
sự kiện {
worker_connections 4000;
sử dụng epoll;
chấp nhận tắt;
}
http {
bao gồm /etc/nginx/mime.types;
ứng dụng default_type/octet-stream;
error_log /var/log/nginx/error.log;
người phục vụ {
nghe 80;
server_name foo.com;
địa điểm / {
default_type văn bản/đơn giản;
trả lại 200 "xin chào từ foo.com";
}
error_page 500 502 503 504 /500.html;
}
người phục vụ {
nghe 80 default_server;
tên máy chủ _;
địa điểm / {
trả lại 403 "xin lỗi";
}
}
}
Tôi hy vọng máy chủ sẽ trả về 403 nếu tiêu đề "Máy chủ" không phải là "foo.com".
Ai đó rõ ràng đang chạy Burp Suite trên máy chủ của tôi và tôi nhận thấy hành vi thú vị khi họ gửi tiêu đề "Host: foo.com:more-stuff-here": NGINX định tuyến yêu cầu đến phần "máy chủ" đầu tiên. Có vẻ như nó bỏ qua dấu hai chấm và mọi thứ sau nó trong giá trị tiêu đề.
Tôi có thể sao chép nó cục bộ với nginx.conf ở trên:
$ curl -H "Máy chủ: foo.com" http://127.0.0.1
xin chào từ foo.com
$ curl -H "Máy chủ: foo.com:unexpected-content" http://127.0.0.1
xin chào từ foo.com
$ curl -H "Máy chủ: bar.com" http://127.0.0.1
lấy làm tiếc
Tại sao NGINX làm điều này? Đây có phải là một hành vi dự kiến? Tôi nên thay đổi điều gì trong nginx.conf để đảm bảo các yêu cầu có tiêu đề "Host: foo.com:more-stuff-here" đi đến khối mặc định?
Cập nhật: Đối với bất kỳ ai nghiên cứu cùng một vấn đề, tôi cũng đã tạo một vé trong trình theo dõi vấn đề NGINX.