Tôi có một số máy chủ đang chạy trên cùng một máy, một số chỉ có http, một số có cả http và https. Có một số khối máy chủ được xác định trong các tệp riêng biệt được bao gồm từ tệp cấu hình chính.
Tôi đã thiết lập một máy chủ "mặc định" cho http, nó sẽ phục vụ một "trang bảo trì" chung cho các yêu cầu không khớp với bất kỳ máy chủ nào khác trong các tệp cấu hình khác. Máy chủ mặc định http hoạt động như mong đợi, nó sử dụng server_name "_" và nó xuất hiện đầu tiên trong danh sách bao gồm (vì tôi đã quan sát thấy rằng trong trường hợp trùng lặp server_names trên các máy chủ, lần đầu tiên xuất hiện sẽ được sử dụng). Điều này làm việc tuyệt vời.
Tôi sẽ mong đợi khối máy chủ chính xác tương tự (chỉ chuyển "nghe 80 default_server" sang "nghe 443 default_server" và thay vì phục vụ trang "return 444") tuy nhiên không được. Thay vào đó, có vẻ như máy chủ https mặc định mới thực sự lấy tất cả các kết nối https đến và khiến chúng bị lỗi, mặc dù các khối máy chủ khác có tên máy chủ phù hợp hơn cho các yêu cầu đến. Xóa máy chủ https mặc định mới sẽ khiến hành vi bán đúng trở lại: tất cả các trang web có https sẽ tải chính xác; nhưng tất cả các trang web không có https sẽ được chuyển đến máy chủ https đầu tiên trong các tệp bao gồm (theo tài liệu, nếu không có "default_server" xuất hiện, thì khối máy chủ đầu tiên xuất hiện sẽ là "mặc định").
Vì vậy, câu hỏi của tôi là, cách chính xác để xác định một "máy chủ mặc định" trong nginx cho các kết nối ssl là gì? Tại sao khi tôi đặt "default_server" một cách rõ ràng thì nó lại tham lam và lấy tất cả các kết nối trong khi tôi ngầm để nginx quyết định "máy chủ mặc định" thì nó hoạt động như tôi mong đợi (với máy chủ không chính xác được đặt làm mặc định và các máy chủ thực khác cư xử đúng)?
Đây là "máy chủ mặc định" của tôi. Http hoạt động mà không phá vỡ các máy chủ khác. Https phá vỡ các máy chủ khác và tiêu thụ tất cả.
server {
listen 443 ssl default_server;
server_name _;
access_log /var/log/nginx/maintenance.access.log;
error_log /var/log/nginx/maintenance.error.log error;
return 444;
}
server {
listen *:80 default_server;
server_name _;
charset utf-8;
access_log /var/log/nginx/maintenance.access.log;
error_log /var/log/nginx/maintenance.error.log error;
root /home/path/to/templates;
location / {
return 503;
}
error_page 503 @maintenance;
location @maintenance {
rewrite ^(.*)$ /maintenance.html break;
}
}
Bất cứ ai trong số các bạn thấy những gì có thể sai ở đây?