NGINX代理传递在60秒后截断连接,即使使用建议的配置

xxhby3vn  于 2023-03-01  发布在  Nginx
关注(0)|答案(2)|浏览(187)

这几天我一直在思考这个问题。
我有一个服务器,执行一个操作,需要超过60秒才能完成,一切正常,如果我直接连接到服务器,但如果我使用nginx(v 1.22.1)60秒后,我断开连接,服务器的答案没有到达客户端。
我用这个简单的python脚本重新创建了这个场景:

import time
    from http.server import BaseHTTPRequestHandler, HTTPServer

class MyHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/plain')
        self.end_headers()
        time.sleep(66)
        self.wfile.write(b'Hello, world!')

if __name__ == '__main__':
    server_address = ('', 3000)
    httpd = HTTPServer(server_address, MyHandler)
    print('Server listening on port 3000...')
    httpd.serve_forever()

以下是尝试增加等待时间但未成功的nginx配置:

server {
    listen 80;
    server_name xxx.my.domain;

    location / {
        proxy_pass http://192.168.4.150:3000;
        proxy_connect_timeout 120s;
        proxy_send_timeout 120s;
        proxy_read_timeout 120s;
        send_timeout 120s;
    }
}

现在,如果我通过浏览器、 Postman 或curl连接,请求将在60s后被截断。
Postman 说:无法获取响应-错误:套接字挂起
CURL说:

* Empty reply from server
 * Closing connection 0
 curl: (52) Empty reply from server

Chrome说:"错误_空_响应"
当然,如果我把python脚本中的等待时间减少到50s,它就可以工作。
我试过其他设置来避免缓存,保持活着,但没有什么工作到目前为止。
我愿意接受新的建议。-)
谢谢
斯特凡诺

oxosxuxt

oxosxuxt1#

我的错...
我发现了问题所在。
在我的Mac上运行Surfshark VPN,至少我猜,截断60s后的答案.
当我停止VPN一切工作如预期.

q43xntqr

q43xntqr2#

server {
    listen 80;
    server_name xxx.my.domain;

    # Add this line of configuration
    keepalive_timeout  65;
    location / {
        proxy_pass http://192.168.4.150:3000;
        proxy_connect_timeout 120s;
        proxy_send_timeout 120s;
        proxy_read_timeout 120s;
        send_timeout 120s;
    }
}

相关问题