nginx gửi trống 200 phản hồi


19

Tôi đang cấu hình máy chủ chuyển đổi dự phòng được giao nhiệm vụ chấp nhận mọi yêu cầu đến và trả lời với 200 phản hồi trống. Ý tưởng là để giảm thiểu thời gian trả lời và để đảm bảo chúng tôi không gửi bất kỳ 40x hay 50x nào.

Tôi đã thử sử dụng return 200;cho các vị trí mong muốn trong Nginx, nhưng các hệ thống giám sát của tôi (Pingdom) không thích phản hồi và xem xét máy chủ không phản hồi.

Có cách nào tốt hơn để làm điều này, tất nhiên với chi phí tối thiểu trên máy chủ không?

Câu trả lời:


23

Mã trạng thái HTTP 204 No Contentcó nghĩa là "Tôi đã hoàn thành yêu cầu, nhưng không có cơ quan nào để trả lại":

10.2.5 204 Không có nội dung

Máy chủ đã hoàn thành yêu cầu nhưng không cần trả về một thực thể và có thể muốn trả về thông tin được cập nhật. Phản hồi CÓ THỂ bao gồm các thông số mới hoặc cập nhật dưới dạng các tiêu đề thực thể, nếu hiện tại NÊN được liên kết với biến thể được yêu cầu.

Nếu khách hàng là tác nhân người dùng, nó KHÔNG NÊN thay đổi chế độ xem tài liệu của mình từ đó gây ra yêu cầu được gửi. Phản hồi này chủ yếu nhằm cho phép đầu vào cho các hành động diễn ra mà không gây ra thay đổi đối với chế độ xem tài liệu đang hoạt động của tác nhân người dùng, mặc dù mọi thông số mới hoặc cập nhật NÊN được áp dụng cho tài liệu hiện tại trong chế độ xem hoạt động của tác nhân người dùng.

Phản hồi 204 PHẢI KHÔNG bao gồm phần thân thông điệp và do đó luôn bị chấm dứt bởi dòng trống đầu tiên sau các trường tiêu đề.


Xin chào Alex Cảm ơn bạn đã lưu ý. Chỉ cần tự hỏi nếu mã phản hồi 204 được công nhận bởi tất cả các trình duyệt chính những ngày này. tức là nếu máy chủ của tôi bắt đầu gửi 204 xung quanh, có khả năng nào một số khách truy cập (trên các trình duyệt, điện thoại di động, thiết bị đầu cuối) gặp lỗi không?
Sparsh Gupta

1
@SparshGupta Tôi không phải là một chuyên gia về khả năng tương thích trình duyệt, xin lỗi. Tôi đã thực hiện kiểm tra nhanh trong một vài trình duyệt (FF 7 và Safari trong Mac OSX) - chúng không làm gì cả. Ví dụ: nếu bạn đã mở một trang, thì bạn đặt URL trả lại 204 vào thanh địa chỉ và nhấn Enter, cả hai trình duyệt vẫn hiển thị trang trước đó.
Alexander Azarov

29

Bạn có thể yêu cầu nginx trả lại HTTP 200 trống bằng một khối cấu hình như:

location = /health {
  return 200;
  #access_log off;
}

Bạn có thể bỏ ghi chú access_logdòng nếu bạn không muốn tất cả các kiểm tra sức khỏe được ghi lại.


6
Cần lưu ý rằng dấu '=' sau vị trí rất quan trọng. Không có nó, tập tin đó phải tồn tại, nếu không nginx sẽ không trả lại 200. Với nó, bạn có thể tạo bất kỳ vị trí nào bạn muốn và không phải lo lắng về các tập tin và nginx sẽ vui vẻ trả lại 200.
Florin Andrei

Làm cách nào để kết hợp điều đó với auth cơ bản, như vậy yêu cầu được xác thực trả về 200 và không được xác thực 401?
Kiril
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.