【发布时间】:2016-09-09 23:01:06
【问题描述】:
我试图在我的运行 socket.io 的应用程序上使用 SSL,但我无法让它工作。我已经完成了我的研究,但我发现没有一个有效。
我一直有错误:ERR_CONNECTION_CLOSED,客户端没有 http 状态代码。
GET https://subdomain.mywebsite.com:1339/socket.io/?EIO=3&transport=polling&t=LIgxHmz net::ERR_CONNECTION_CLOSED
这是我的 nginx 配置:
server {
listen 443;
server_name subdomain.mywebsite.com;
root /usr/share/nginx/html;
index index.html index.htm;
ssl on;
# Use certificate and key provided by Let's Encrypt:
ssl_certificate /etc/letsencrypt/live/subdomain.mywebsite.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/subdomain.mywebsite.com/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://localhost:1339/;
proxy_redirect off;
# Socket.IO Support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
这里是服务器端:
var express = require('express'),
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
server.listen(1339);
...
这是客户端: subdomain.mywebsite.com
var socket = io.connect("https://subdomain.mywebsite.com:1339");
页面加载良好,服务器端没有错误,但没有连接到 socket.io。 在我尝试切换到 SSL 之前,一切都完美无缺。
我做错了什么?
【问题讨论】:
-
根据您使用的 nginx 版本,它可能就像移动 ssl 标志一样简单。 stackoverflow.com/questions/30317831/socket-io-nodejs-nginx-ssl
-
我试过了,但没有任何改变。 Express 可以很好地在 https 中提供我的 html 页面。只有 socket.io 失败了。
-
您不应该使用
wss协议从客户端连接吗? -
也试过了,还是一样。
-
我过去也有同样的要求,我设法找到了可行的解决方案。请在此处参考我的问答,了解我的 nginx+express+client 配置,这可能对您有所帮助:stackoverflow.com/q/30673664/1874155
标签: node.js ssl express nginx socket.io