Nginx 上的 502 错误网关

Nginx 上的 502 错误网关

我们目前有一个在 Ubuntu 1.10.3 上运行的 Nginx 上的 angular 框架上运行的 Web 应用程序。尝试访问该网站的错误日志为:

30364#30364: 1000 worker_connections are not enough
30364#30364: *5179370 recv() failed (104: Connection reset by peer) while 
reading response header from upstream server:mysite request: "GET / 
HTTP/1.1" upstream: myip:80 host:mysite
30364#30364: 1000 worker_connections are not enough
30364#30364: *5179454 no live upstreams while connecting to upstream

我的Nginx.conf:

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
        worker_connections 1000;
}

http{
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;ssl_protocols TLSv1 TLSv1.1 
    TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    gzip on;
    gzip_disable "msie6";

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

我的默认.conf:

server {
       listen 80 default_server;
       listen [::]:80 default_server;

       listen 443 ssl; 
       ssl_certificate /etc/letsencrypt/live/mysite/fullchain.pem; 
       ssl_certificate_key /etc/letsencrypt/live/mysite/privkey.pem; 

       root /home/admin_user/myroot;

       large_client_header_buffers 4 32k;
       index index.html index.htm index.nginx-debian.html;

       server_name myserver;

       add_header Strict-Transport-Security max-age=500;

     location / {
            proxy_pass http://mysite;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; 
            proxy_set_header X-Forwarded-Proto https; 
      }
}

我的根目录的文件结构如下。
破折号表示级别。
-root
--app
---controllers models services style views
--bower_components
--config
--data
--data.xlsx
--file.jpg
--index.html
--node_modules
--package.json
--Procfile
--public
---app.js img
--server.js

这绝不是文件结构的完整视图,但我认为它可能会有所帮助。

答案1

您已将 nginx 配置为尝试将其自身作为上游进行连接,而不是作为 Node.js 进行连接。

     location / {
            proxy_pass http://mysite;

解析mysite到同一主机。

在这种情况下,nginx 会反复连接自身以尝试满足请求,这样做 1000 次后,就会耗尽工作线程。

有两种方法可以解决该问题:

  1. 定义一个引用正在运行的 Node.js 服务器的upstream名称mysite。例如:

    upstream mysite {
        server [::1]:3000;
    }
    
  2. 直接在中指定上游 URL proxy_pass

            proxy_pass http://[::1]:3000;
    

答案2

此配置要求您拥有上游为了mysite。例如:

upstream mysite {
    server 127.0.0.1:8080;
}

看起来那是一个 Node.js 服务器?它需要运行并监听(在上面的示例中为端口)8080

相关内容