这几天我一直在思考这个问题。
我有一个服务器,执行一个操作,需要超过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,它就可以工作。
我试过其他设置来避免缓存,保持活着,但没有什么工作到目前为止。
我愿意接受新的建议。-)
谢谢
斯特凡诺
2条答案
按热度按时间oxosxuxt1#
我的错...
我发现了问题所在。
在我的Mac上运行Surfshark VPN,至少我猜,截断60s后的答案.
当我停止VPN一切工作如预期.
q43xntqr2#