我在AWS EC2实例上为我的node.js应用程序运行nginx。我想使用websockets(socket.io)和普通的http请求/响应。我的问题是,每当我从移动设备到服务器有一个活动套接字连接并尝试发出一个普通的http请求时,就会通过消息“502 Bad Gateway”调用移动设备的socket.io错误函数。Socket.io断开http请求
只有插座有效。只有普通的http请求也适用。
我想通了,这个问题发生在我将nginx设置为仅使用https之后。
这里是我的nginx的配置在/启用站点-/站点可用:
server {
listen 80;
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
if ($scheme != "https") {
rewrite^https://$host$request_uri? permanent;
}
location/{
proxy_pass http://127.0.0.1:3000;
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;
}
}
Nginx的错误日志:
[error] 14117#14117: *50 upstream prematurely closed connection while reading response header from upstream, client: 78.94.9.226, server: example.com, request: "GET /socket.io/?transport=polling&b64=1&sid=rgXMQhL6mbSET8ktAAAA HTTP/1.1", upstream: "http://127.0.0.1:3000/socket.io/?transport=polling&b64=1&sid=rgXMQhL6mbSET8ktAAAA", host: "example.com"
iOS的错误日志:
LOG SocketIOClient: Handling event: error with data: ["Got unknown error from server <html>\r\n<head><title>502 Bad Gateway</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>502 Bad Gateway</h1></center>\r\n<hr><center>nginx/1.10.3 (Ubuntu)</center>\r\n</body>\r\n</html>\r\n"]
如果您需要更多的信息,让我知道!
感谢您分享解决方案。我想PM2会带参数来观察.js,.css等的变化。如果是这样,你应该使用 –
我注意到PM2自己记录http请求+ stdout/stderr,所以我禁用摩根写入文件。 PM2日志足以满足我的需求。 –