nginx响应504/502网关超时错误

tpxzln5u  于 2023-08-03  发布在  Nginx
关注(0)|答案(2)|浏览(143)

我遇到了一个问题。
我在Node上运行了6个Express应用程序,并使用Nginx作为反向代理,所有这些应用程序都运行了几个月没有问题。但最近,当我试图导航到任何网站的内页时,它返回给我502或504 nginx错误。
当我尝试在ngrok或本地运行应用程序时,它们可以正常工作,但在生产服务器上,我得到了504/502错误。
Nginx日志显示2019/04/10 16:38:12 [error] 1362#1362: *245 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 37.9.113.120, server: my.server, request: "GET /videos/videoId HTTP/1.1", upstream: "http://127.0.0.1:3000/videos/videoId", host: "www.my.host"
我尝试增加超时次数

proxy_connect_timeout       600;
proxy_send_timeout          600;
proxy_read_timeout          600;
send_timeout                600;

字符串
但它没有帮助(
这是我的服务器配置。

server {
    listen x.x.x.x:443 http2;
    ssl on;

    server_name www.myservername.com;

...(ssl conf here)

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}


我在StackOverflow上挖掘了类似的主题,但没有找到解决方案。最奇怪的事情,在这种情况下,是,一段时间后,内页是可用的,但在我做加载测试,并发送约100个请求的生产服务器上,它停止工作约半小时
提前感谢你的帮助。

mwkjh3gx

mwkjh3gx1#

您正在使用ssl侦听443,您必须指定您的证书/密钥:

server {
    listen 443 ssl;
    server_name www.example.com;

    ssl_certificate     /var/lib/nginx/ssl/serverssl.crt;
    ssl_certificate_key /var/lib/nginx/ssl/serverssl.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        proxy_set_header Host example.com;
        proxy_pass http://localhost:8192/;
    }
 }

字符串

2lpgd968

2lpgd9682#

与原文没有直接关系,我遇到了类似的问题。在我的情况下,问题出在我的Express应用程序的控制器上。我的原始代码看起来像这样:

export async function someFunction (req: Request, res: Response) {
 // other codes here
   return res.status(202);
}

字符串
此函数不发送任何响应体。它在本地工作得很好,因为没有涉及Nginx,而且这个端点只用于从前端接收数据进行分析。
然而,当我试图从我的前端应用程序向托管具有Nginx代理的控制器的VM发出真实的的请求时,我会得到502或504错误。
我通过在发送响应时添加响应体来解决这个问题:

export async function someFunction (req: Request, res: Response) {
 // other codes here
   return res.status(202).end();
}

相关问题