Nginx 上的 502 错误网关

Ser*_*eur 2 nginx

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

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
Run Code Online (Sandbox Code Playgroud)

我的 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/*;
}
Run Code Online (Sandbox Code Playgroud)

我的默认.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; 
      }
}
Run Code Online (Sandbox Code Playgroud)

我的根目录的文件结构就是这样的。
破折号表示级别。
-root
--app
---controllers 模型服务样式视图
--bower_components
--config
--data
--data.xlsx
--file.jpg
--index.html
--node_modules
--package.json
--Procfile
-- public
---app.js img
--server.js

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

Mic*_*ton 5

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

     location / {
            proxy_pass http://mysite;
Run Code Online (Sandbox Code Playgroud)

Wheremysite解析为同一主机。

在这种情况下,nginx 反复连接回自身以尝试为请求提供服务,这样做了 1000 次,然后耗尽了工作人员。

你有两种可能来解决这个问题:

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

    upstream mysite {
        server [::1]:3000;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 直接在 中指定上游 URL proxy_pass

            proxy_pass http://[::1]:3000;
    
    Run Code Online (Sandbox Code Playgroud)