我们目前有一个在 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 次后,就会耗尽工作线程。
有两种方法可以解决该问题:
定义一个引用正在运行的 Node.js 服务器的
upstream
名称mysite
。例如:upstream mysite { server [::1]:3000; }
直接在中指定上游 URL
proxy_pass
:proxy_pass http://[::1]:3000;
答案2
此配置要求您拥有上游为了mysite
。例如:
upstream mysite {
server 127.0.0.1:8080;
}
看起来那是一个 Node.js 服务器?它需要运行并监听(在上面的示例中为端口)8080
。