node.js - 多次请求时出现内部服务器错误,nginx + node.js + pm2
问题描述
我已经使用 nginx + node.js + pm2 运行服务器,但是当许多请求来自用户时。带有内部服务器错误的 nginx 响应,不是来自 Express,而是来自 nginx。也许我的设置不好。因为我是服务器设置的新手。
upstream socket_nodes {
ip_hash;
server 127.0.0.1:3000;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name suntuk.online;
#root /usr/share/nginx/html;
ssl_certificate /etc/letsencrypt/live/suntuk.online/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/suntuk.online/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
# modern configuration. tweak to your needs.
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:DES-CBC3-SHA:HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP';
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security max-age=15768000;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location /socket.io/ {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://socket_nodes;
}
location / {
proxy_pass "http://localhost:3000/";
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
更新 nginx 日志
2019/06/08 03:56:38 [alert] 3104#0: *3934813 socket() failed (24: Too many open files) while connecting to upstream, client: 114.5.209.180, server: suntuk.online, request: "GET /post/list/normal HTTP/1.1", upstream: "http://127.0.0.1:3000/post/list/normal", host: "suntuk.online"
2019/06/08 03:56:38 [crit] 3104#0: *3934813 open() "/usr/share/nginx/html/50x.html" failed (24: Too many open files), client: 114.5.209.180, server: suntuk.online, request: "GET /post/list/normal HTTP/1.1", upstream: "http://127.0.0.1:3000/post/list/normal", host: "suntuk.online"
2019/06/08 03:56:38 [crit] 3104#0: accept4() failed (24: Too many open files)
2019/06/08 03:56:38 [alert] 3104#0: *3932615 socket() failed (24: Too many open files) while connecting to upstream, client: 182.0.173.54, server: suntuk.online, request: "POST /comment/insert HTTP/1.1", upstream: "http://127.0.0.1:3000/comment/insert", host: "suntuk.online"
2019/06/08 03:56:38 [crit] 3104#0: *3932615 open() "/usr/share/nginx/html/50x.html" failed (24: Too many open files), client: 182.0.173.54, server: suntuk.online, request: "POST /comment/insert HTTP/1.1", upstream: "http://127.0.0.1:3000/comment/insert", host: "suntuk.online"
2019/06/08 03:56:38 [alert] 3104#0: *3934816 socket() failed (24: Too many open files) while connecting to upstream, client: 182.1.119.227, server: suntuk.online, request: "GET /socket.io/?EIO=3&transport=websocket&sid=x6-AO0fyWJ1KhrLxABVo HTTP/1.1", upstream: "http://127.0.0.1:3000/socket.io/?EIO=3&transport=websocket&sid=x6-AO0fyWJ1KhrLxABVo", host: "suntuk.online"
解决方案
推荐阅读
- java - ASM如何检查方法是否被特定类覆盖
- python - 如果 csv 文件具有相同的列标题,则合并它们,如果不拆分
- git - 为什么没有上游的 git push 的建议修复包括确切的命令,但 git pull 不包括相同的命令?
- javascript - compose 函数如何处理多个参数?
- python - 从 Python 中的 SQL 数据库绘图
- google-bigquery - BigQuery:创建具有指定范围日期的数组
- c++ - 在不使用类名和范围解析运算符的情况下调用方法
- flutter - 编译 arm64 颤振引擎时出错
- r - 在 R 中对数据框进行排序
- reactjs - 字符串的 prop-types 数组与 TypeScript 类型不兼容