rav*_*ven 6 nginx reverse-proxy wss docker mqtt
在我的生产服务器中,我们有几个上游,它们是在带有 nginx 的反向代理后面运行的 docker 容器。其中一个容器是 mqtt 代理(mosquitto),我们用来通过 websockets 进行连接。这是我们的 nginx.conf 文件:
worker_processes 1;
events {
worker_connections 1024;
}
http {
upstream br-frontend {
server br-frontend:3000;
}
upstream br-backend {
server br-backend:5000;
}
upstream mosquitto {
server mosquitto:9001;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;
server {
listen 443 ssl default_server;
server_name _;
location / {
proxy_pass http://br-frontend/;
}
location /api {
proxy_pass http://br-backend;
}
location /swagger.json {
proxy_pass http://br-backend/swagger.json;
}
location /swaggerui {
proxy_pass http://br-backend/swaggerui;
}
location /mosquitto-ws {
proxy_pass http://mosquitto;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
}
Run Code Online (Sandbox Code Playgroud)
昨天,我们的生产服务器因为以下错误而崩溃。我读过我可以增加 worker_connections 的数量,但我认为这不是最好的解决方案。我还在其他问题中读到我的 nginx.conf 文件中可能有一个无限循环,但我看不到它。
2018/12/14 00:23:12 [alert] 6#6: 1024 worker_connections are not enough
2018/12/14 00:23:13 [alert] 6#6: *14666 1024 worker_connections are not enough while connecting to upstream, client: *.*.*.*, server: _, request: "GET /mosquitto-ws HTTP/1.1", upstream: "http://172.21.0.5:9001/mosquitto-ws", host: "****"
Run Code Online (Sandbox Code Playgroud)
更新: docker-compose.yml
version: '3'
services:
mongodb:
image: mongo:latest
volumes:
- './data/db:/data/db'
- './data/configdb:/data/configdb'
ports:
- 27017:27017
br-backend-express:
working_dir: /app
command: npm run execute-prod
image: ${ACR}/br-backend-express:${tag}
ports:
- "5000:5000"
depends_on:
- mongodb
mosquitto:
image: ${ACR}/mosquitto:${tag}
depends_on:
- br-backend-express
br-bridge:
working_dir: /app
image: ${ACR}/br-bridge:${tag}
command: npm run execute-prod
depends_on:
- mosquitto
- mongodb
br-frontend:
image: ${ACR}/br-frontend:${tag}
nginx:
image: ${ACR}/nginx:${tag}
ports:
- 443:443
- 80:80
depends_on:
- br-frontend
- br-backend-express
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激。谢谢。
根据Nginx 文档worker_connections“\xe2\x80\xa6 设置工作进程可以打开的最大并发连接数。应记住,该数字包括所有连接(例如与代理服务器的连接等) ,不仅仅是与客户端的连接。\xe2\x80\xa6"
鉴于您的配置使用代理连接,在足够密集的流量下,Nginx 会开始缺乏可用连接,这并不奇怪。
\n\n里面也提到了worker_rlimit_nofile要调整的地方,所以大家也要注意这一点。
最后,虽然它与问题没有直接关系,但我还是建议使用它worker_processes auto来在可用核心之间更好地分配 Nginx 负载。
| 归档时间: |
|
| 查看次数: |
5304 次 |
| 最近记录: |