目标:
我想在非常简单的场景中测试所有Nginx代理超时参数.我的第一个方法是创建非常简单的HTTP服务器并添加一些超时:
>在listen和accept之间测试proxy_connect_timeout
>在accept和read之间测试proxy_send_timeout
>读取和发送之间测试proxy_read_timeout
测试:
@H_404_16@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配置:
我通过显式设置proxy_connect_timeout并添加指向本地HTTP服务器的proxy_pass来扩展Nginx默认配置:
@H_404_16@ location / { proxy_pass http://localhost:8888; proxy_connect_timeout 200; }
3)观察:
proxy_connect_timeout – 即使将其设置为200s并且在listen和accept之间仅休眠130s,Nginx在~60s之后返回504,这可能是由于默认的proxy_read_timeout值.我不明白proxy_read_timeout如何在早期阶段(接受之前)影响连接.我希望在这里200.请解释!
proxy_send_timeout – 我不确定我的测试proxy_send_timeout的方法是否正确 – 我想我仍然无法正确理解这个参数.毕竟,accept和read之间的延迟不会强制执行proxy_send_timeout.
proxy_read_timeout – 看起来非常简单.设置读取和写入之间的延迟可以完成工作.
所以我猜我的假设是错误的,可能我不理解proxy_connect和proxy_send超时.有些人可以使用上述测试向我解释它们(如果需要可以修改).
最佳答案
原文链接:https://www.f2er.com/nginx/434732.html