gpt4 book ai didi

python - 如何测试 nginx 代理超时

转载 作者:太空狗 更新时间:2023-10-29 21:53:15 25 4
gpt4 key购买 nike

目标:

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

  1. 在监听和接受之间测试proxy_connect_timeout
  2. 在接受和阅读之间测试 proxy_send_timeout
  3. 在读取和发送之间测试 proxy_read_timeout

测试:

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

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

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

3)观察:

proxy_connect_timeout - 即使将其设置为 200 秒并且在监听和接受之间仅休眠 130 秒 Nginx 在约 60 秒后返回 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 超时。如果可能的话,有人可以使用上面的测试向我解释它们吗(或者如果需要的话进行修改)。

最佳答案

根据 the docs连接超时不能超过 75 秒,这可以解释为什么超时比您预期的要早。然而,并不积极。我从未真正使用过低级 python 套接字库,因此在您实际调用程序中的 s.accept() 之前,它可能会在低级接受连接到池中。

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

关于python - 如何测试 nginx 代理超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17279867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com