如何测试nginx代理超时

2024-04-18 21:37:16 发布

您现在位置:Python中文网/ 问答频道 /正文

目标:

我想在非常简单的场景中测试所有Nginx代理超时参数。我的第一个方法是创建真正简单的HTTP服务器并设置一些超时:

  1. 在侦听和接受测试之间代理连接超时
  2. 在接受和读取到测试之间代理发送超时
  3. 在读取和发送到测试之间代理读取超时

测试:

1)服务器代码(python):

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配置:

我已经扩展了Nginx默认配置,显式设置了proxy_connect_timeout并添加了指向本地HTTP服务器的proxy_pass:

    location / {
        proxy_pass http://localhost:8888;
        proxy_connect_timeout 200;
    }

3)观察:

proxy_connect_timeout-即使将其设置为200s,并且在listen和accept Nginx之间仅休眠130s,在大约60s后返回504,这可能是由于默认的proxy_read_timeout值。我不明白代理读取超时是如何影响连接的。我希望这里有200个。请解释一下!

代理发送超时-我不确定我测试代理发送超时的方法是否正确-我认为我仍然不能正确理解此参数。毕竟,接受和读取之间的延迟不会强制代理发送超时。

代理读取超时-这似乎非常简单。设置读写之间的延迟可以完成这项工作。

所以我想我的假设是错误的,可能我不理解代理连接和代理发送超时。如果可能的话可以用上面的测试向我解释一下吗(如果需要的话可以修改一下)。


Tags: import服务器sendhttp代理datatimeconnect
1条回答
网友
1楼 · 发布于 2024-04-18 21:37:16

根据the docs的说法,连接超时不能超过75秒,这可能解释了为什么超时比您预期的要快。不过,并不乐观。我从未真正使用过低级python sockets库,因此在实际调用程序中的s.accept()之前,它可能在低级接受到池中的连接。

发送超时通过测量流向上游服务器的两个数据块之间的时间来工作。因为您将整个响应发送到一个块中,我猜在您的实现中,您再次达到读取超时,而不是发送超时。如果发送一个数据块,然后等待超过发送超时以发送其余响应并关闭连接,则应单击发送超时。

相关问题 更多 >