nginx: Thứ tự độ phân giải của server serverameame?


8

Tôi có nhiều khối "máy chủ" trong nginx.conf của mình. Tài liệu có vẻ sai về thứ tự kết hợp server_name diễn ra.

Conf của tôi trông giống như:

server {
  listen 80
  server_name domain.com *.domain.com

  # do stuff
}

server {
  listen 80
  server_name sub.domain.com *.sub.domain.com

  # do something else
}

Tôi đang cố gắng tìm hiểu tại sao các yêu cầu với máy chủ = www.sub.domain.com sẽ đến đúng nơi (máy chủ thứ hai), khi tài liệu cho biết nó sẽ đến máy chủ đầu tiên.

Tài liệu Nginx chỉ ra rằng các khối máy chủ được kiểm tra "theo thứ tự" cho phù hợp, nghĩa là mọi yêu cầu với máy chủ * .sub.domain.com nên được máy chủ thứ nhất bắt giữ, không phải máy chủ thứ hai. ( http://wiki.nginx.org/HttpCoreModule#server_name )

Ngoài ra, ký tự đại diện * khớp với bất kỳ số phần tên miền phụ nào, vì vậy * .domain.com khớp với www.sub.domain.com. ( http://nginx.org/en/docs/http/server_names.html#wildcard_names )

Nếu tài liệu này sai, thứ tự khớp thực tế là gì?

Câu trả lời:


18

Từ tài liệu nginx ( http://nginx.org/en/docs/http/server_names.html ):

Khi tìm kiếm máy chủ ảo theo tên, nếu tên khớp với nhiều hơn một trong các biến thể được chỉ định, ví dụ: cả tên ký tự đại diện và kết hợp biểu thức chính quy, biến thể khớp đầu tiên sẽ được chọn, theo thứ tự ưu tiên sau:

  1. Tên chính xác
  2. Tên ký tự đại diện dài nhất bắt đầu bằng dấu hoa thị, ví dụ: * * .example.org
  3. Tên ký tự đại diện dài nhất kết thúc bằng dấu hoa thị, ví dụ: mail mail.
  4. đầu tiên khớp với biểu thức chính quy (theo thứ tự xuất hiện trong tệp cấu hình)

2

Các tài liệu nói:

So sánh tiêu đề Máy chủ của yêu cầu HTTP đến với các khối máy chủ {...} trong tệp cấu hình Nginx và chọn cái đầu tiên phù hợp.

Điều dường như xảy ra là nó chọn kết quả phù hợp nhất từ ​​tất cả các serverkhối, do đó www.sub.domain.com, khớp với cấu hình thứ hai. Tôi không có tài liệu để sao lưu điều đó, vì vậy bạn có thể chạy một số thử nghiệm để xác nhận hành vi đó. Ngoài ra còn có tài liệu này nói về độ phân giải tên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.