如何测试nginx代理超时
目标:
我想在非常简单的情况下测试所有的Nginx代理超时参数。 我的第一个方法是创建一个非常简单的HTTP服务器并放置一些超时:
测试:
1)服务器代码(python):
import socket
import os
import time
import threading
def http_resp(conn):
conn.send("HTTP/1.1 200 OKrn")
conn.send("Content-Length: 0rn")
conn.send("Content-Type: text/xmlrnrnrn")
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的默认配置:
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超时。 如果可能的话,是否可以使用上述测试向我解释它们(或者如果需要修改)。
根据文档,连接超时不能超过75秒,这可以解释为什么它比您预期的更早超时。 然而,不是积极的。 我从来没有真正完成低级别的python套接字库的工作,所以在实际调用程序中的s.accept()之前,它可能会在较低级别上接受连接池。
通过测量朝向上游服务器的两个数据块之间的时间来发送超时。 由于您将整个响应发送到一个块中,我猜测在您的实现中,您再次发生读取超时,而不是发送超时。 如果您发送一个块,然后等待发送超时发送剩余的响应并关闭连接,则应该触发发送超时。
链接地址: http://www.djcxy.com/p/72229.html