Điểm:0

nginx không tôn trọng giá trị server_name

lá cờ in
người phục vụ{
    ..
    server_name some_other_domain_name.com;
    ..
}

Tôi đã ánh xạ tên miền của mình tới IP công khai của máy ảo qua godaddy.

Khi tôi nhập tên miền vào trình duyệt, thì nó có thể truy cập trang web được lưu trữ trên VM (thông qua nginx). Tuy nhiên, tôi đã mong đợi rằng yêu cầu sẽ không được nginx cho phép vì thuộc tính server_name được đặt thành some_other_domain_name.com

Có phải nginx không kiểm tra thuộc tính server_name?

Richard Smith avatar
lá cờ jp
Xem [cách Nginx xử lý yêu cầu](http://nginx.org/en/docs/http/request_processing.html).
lá cờ in
Vì vậy, server_name chỉ được sử dụng khi có xung đột với tổ hợp IP:port?
lá cờ us
`server_name` luôn được sử dụng. Sự cố có thể xảy ra với khối máy chủ mặc định của bạn như được giải thích bên dưới.
Điểm:1
lá cờ br

Có một lời giải thích tốt về cách nginx chọn khối máy chủ và vị trí để tiến hành yêu cầu trên Digital Ocean Hiểu các thuật toán lựa chọn khối vị trí và máy chủ Nginx.

Nói tóm lại, trước tiên nginx chọn (các) kết quả phù hợp nhất dựa trên nghe chỉ thị. Và kiểm tra tên máy chủ chỉ khi có nhiều hơn một trận đấu. Trong trường hợp đó, nếu không có tên máy chủ phù hợp, sau đó nó sẽ chọn mặc định chặn. Khối mặc định được khai báo là default_server Trong nghe chỉ thị, hoặc cái đầu tiên.

lá cờ in
Nếu khối máy chủ chỉ lắng nghe 443 (ví dụ) và đây là khối máy chủ duy nhất, thì điều này có nghĩa là mọi yêu cầu trên cổng 80 sẽ không được phục vụ? Hay khối này cũng sẽ là mặc định cho cổng 80?
lá cờ br
Nếu khối máy chủ chỉ lắng nghe cổng 443 thì nó sẽ không khớp ở bước đầu tiên và sẽ không bao giờ được coi là ứng cử viên để phục vụ yêu cầu tới cổng 80.
lá cờ in
Nhưng khi không tìm thấy khối máy chủ phù hợp, thì nó không sử dụng khối máy chủ thứ nhất bất kể khối máy chủ thứ nhất lắng nghe điều gì?
lá cờ br
@biến, không. Một lần nữa, nginx chỉ chọn khối mặc định trong những khối có chỉ thị `listen` phù hợp *tốt nhất*. Bạn đã xem qua bài viết chưa?
lá cờ in
Vâng, bạn đời, nhưng tôi đã không nhận được điểm đó trong đầu của tôi.
Điểm:0
lá cờ us

Bạn chưa chia sẻ cấu hình nginx đầy đủ của mình, vì vậy đây là dự đoán về những gì còn thiếu trong cấu hình.

nginx luôn phục vụ một cái gì đó cho mọi yêu cầu. Nếu không có người phục vụ khối có khớp tên máy chủ đối với yêu cầu, nginx sử dụng mặc định người phục vụ chặn.

một mặc định người phục vụ khối có thể là khối nơi nghe chỉ thị có default_server bổ nghĩa.

Nếu không có khối như vậy tồn tại, khối đầu tiên người phục vụ khối là mặc định.

Trong trường hợp của bạn, tôi nghĩ bạn cần thiết lập khối máy chủ mặc định như thế này:

người phục vụ {
    nghe 80 default_server;
    trả lại 444; # ngắt kết nối. Có thể là 404 nếu bạn muốn trả về HTTP 404 not found
}
lá cờ in
`Nếu không có khối nào như vậy tồn tại, thì khối máy chủ đầu tiên là mặc định.` - nhưng nếu khối máy chủ đầu tiên chỉ lắng nghe 443 (ví dụ), thì điều này có nghĩa là bất kỳ yêu cầu nào trên cổng 80 sẽ không được đáp ứng?
lá cờ us
Tôi không biết vì tất cả các trường hợp sử dụng của tôi đều yêu cầu nghe cả cổng 80 và 443.
lá cờ br
@variable, có một bài viết hay về DO https://www.digitalocean.com/community/tutorials/under Hiểu-nginx-server-and-location-block-selection-algorithms

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.