当前位置: 首页 > 知识库问答 >
问题:

如何测试nginx代理超时

寿子默
2023-03-14

目标:

我想在非常简单的场景中测试所有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\u connect\u超时并添加指向本地HTTP服务器的proxy\u pass,我扩展了Nginx默认配置:

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

3)观察:

proxy_connect_timeout-即使将其设置为200s,并且在listen和accept之间仅Hibernate130s,Nginx在~60s后返回504,这可能是因为默认的proxy_read_超时值。我不明白代理读取超时在这么早的阶段(在接受之前)是如何影响连接的。我估计这里会有200人。请解释!

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

代理读取超时-这似乎非常简单。设置读取和写入之间的延迟即可完成此任务。

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

共有1个答案

郎正初
2023-03-14

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

发送超时的工作原理是测量流向上游服务器的两个数据块之间的时间。由于您将在一个块中发送整个响应,我猜在您的实现中,您将再次点击读取超时,而不是发送超时。如果您发送了一个块,然后等待发送超时后发送其余的响应并关闭连接,您应该点击发送超时。

 类似资料:
  • map $sent_http_content_type $expires { "text/html" epoch; "text/html; charset=utf-8" epoch; default off; } server { listen 80;

  • 我使用Nginx作为反向代理,它接收请求,然后执行proxy_pass以从运行在8001端口上的上游服务器获得实际的web应用程序。 如果我转到mywebsite.com或执行wget,我会在60秒后获得504网关超时...但是,如果我加载mywebsite.com:8001,应用程序将按预期加载! 和Nginx错误日志的输出:

  • 在本教程中,我们将演示如何在TestNG中执行超时测试。 “超时”表示如果单元测试花费的时间超过指定的毫秒数,那么TestNG将会中止它并将其标记为失败。 “超时”也可用于性能测试,以确保方法在合理的时间内返回。 创建一个名称为:TimeoutTest 的 Maven 项目,其结构如下所示 - 创建一个测试类:TestTimeout.java,其代码如下 - 执行上面代码,得到以下结果 -

  • 主要内容:1 概述,2 @Test注释上的超时参数(适用于测试方法),3 超时规则(适用于测试类中的所有测试用例),4 使用JUnit Foundation进行全局超时管理1 概述 在此示例中,我们将了解测试完成所花费的时间是否超过定义的“timeout”,将抛出TestTimedOutException并将测试标记为失败。 “runaway”或花费太长时间的测试可能会自动失败。有两种方法可以实现此行为: @Test注释上的超时参数(适用于测试方法) 使用JUnit Foundation进行全局

  • 主要内容:1. 代理服务器介绍,2. 将请求传递给代理的服务器,3. 传递请求标头,4. 配置缓冲区,5. 选择传出IP地址本文介绍代理服务器的基本配置。 您将学习如何通过不同协议将NGINX请求传递给代理的服务器,修改发送到代理服务器的客户端请求标头,以及配置来自代理服务器的响应缓冲。 代理服务器的基本配置目录 代理服务器介绍 将请求传递给代理的服务器 传递请求标头 配置缓冲区 选择传出IP地址 1. 代理服务器介绍 代理通常用于在多个服务器之间分配负载,无缝地显示来自不同网站的内容,或者通过

  • 我正在尝试使用Node.js来读取凤凰频道使用npm包凤凰频道。凤凰频道是在websockets之上复用的。我在我的phoenix服务器前面使用的是NGINX代理,所以对于NGINX来说,它只是一个websocket。 凤凰频道在网页上运行良好,正如您在此处看到的(您将在网页中看到数据)。 它也可以从我的内部网络上的nodejs正常工作: 但是,如果我用域名替换显式IP: PORT地址,并从外部运