Target:Làm thế nào để kiểm tra ủy quyền nginx timeouts
Tôi muốn kiểm tra tất cả các thông số thời gian chờ Proxy Nginx trong kịch bản rất đơn giản. Cách tiếp cận đầu tiên của tôi là tạo ra máy chủ HTTP thực sự đơn giản và đặt một số timeout:
- giữa lắng nghe và chấp nhận để kiểm tra proxy_connect_timeout
- giữa chấp nhận và đọc để kiểm tra proxy_send_timeout
- giữa đọc và gửi cho kiểm tra proxy_read_timeout
test:
1) mã Server (python): cấu hình
import socket
import os
import time
import threading
def http_resp(conn):
conn.send("HTTP/1.1 200 OK\r\n")
conn.send("Content-Length: 0\r\n")
conn.send("Content-Type: text/xml\r\n\r\n\r\n")
def do(conn, addr):
print 'Connected by', addr
print 'Sleeping before reading data...'
time.sleep(0) # Set to test proxy_send_timeout
data = conn.recv(1024)
print 'Sleeping before sending data...'
time.sleep(0) # Set to test proxy_read_timeout
http_resp(conn)
print 'End of data stream, closing connection'
conn.close()
def main():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('', int(os.environ['PORT'])))
s.listen(1)
print 'Sleeping before accept...'
time.sleep(130) # Set to test proxy_connect_timeout
while 1:
conn, addr = s.accept()
t = threading.Thread(target=do, args=(conn, addr))
t.start()
if __name__ == "__main__":
main()
2) Nginx:
tôi đã mở rộng cấu hình mặc định Nginx bằng cách thiết lập một cách rõ ràng proxy_connect_timeout và thêm proxy_pass trỏ đến địa phương của tôi Máy chủ HTTP:
location/{
proxy_pass http://localhost:8888;
proxy_connect_timeout 200;
}
3) Obse rvation:
proxy_connect_timeout - Mặc dù cài đặt nó vào 200s và ngủ chỉ 130 giữa lắng nghe và chấp nhận Nginx trả 504 sau ~ 60 mà có thể là do mặc định proxy_read_timeout giá trị. Tôi không hiểu cách proxy_read_timeout có thể ảnh hưởng đến kết nối ở giai đoạn sớm như vậy (trước khi chấp nhận). Tôi mong đợi 200 ở đây. Vui lòng giải thích!
proxy_send_timeout - Tôi không chắc chắn nếu cách tiếp cận của tôi để kiểm tra proxy_send_timeout là đúng - tôi nghĩ rằng tôi vẫn không hiểu thông số này một cách chính xác. Sau khi tất cả, sự chậm trễ giữa chấp nhận và đọc không bắt buộc proxy_send_timeout.
proxy_read_timeout - có vẻ như khá đơn giản. Cài đặt độ trễ giữa đọc và ghi thực hiện công việc.
Vì vậy, tôi đoán giả định của mình sai và có lẽ tôi không hiểu đúng thời gian chờ proxy_connect và proxy_send. Một số có thể giải thích cho họ bằng cách sử dụng thử nghiệm trên nếu có thể (hoặc sửa đổi nếu được yêu cầu).
Có, bạn đúng về giới hạn proxy_connect_timeout 75 giây. Dù sao, tôi cũng đã cố gắng thiết lập proxy_connect_timeout đến 30s và lắng nghe/chấp nhận chậm trễ đến 50 - tôi nhận được 200, đó là một chút bất ngờ !!! Khi tôi tăng độ trễ lên 65 và đặt proxy_read_timeout thành 75 giây, tôi nhận được 504 sau 60 giây. – mkorszun