我之前有一个Socket.io脚本在http上运行正常,但升级到https已经打破了它.我在服务器上安装了证书,但没有运气.服务器设置的代码是:
var https = require('https'),
fs = require('fs');
var options = {
key: fs.readFileSync('/etc/Nginx/ssl/default/54082/server.key'),
cert: fs.readFileSync('/etc/Nginx/ssl/default/54082/server.crt')
};
var app = https.createServer(options);
var io = require('socket.io').listen(app);
但是,在Web浏览器中,页面无法连接到该页面,并且控制台显示服务器响应状态为502(Bad Gateway)响应.
关于脚本设置是否错误的任何想法?或者也许是Nginx设置中的某些东西?
非常感谢
编辑:我用来连接的前端代码:
<script type="text/javascript" src="https://socket.example.com/socket.io/socket.io.js"></script>
<script>
var io = io('https://socket.example.com', { secure: true });
</script>
编辑:: Nginx配置:
# FORGE CONfig (DOT NOT REMOVE!)
include forge-conf/socket.example.co.uk/before/*;
server {
listen 443 ssl;
server_name socket.example.co.uk;
root /home/forge/socket.example.co.uk;
# FORGE CONfig (DOT NOT REMOVE!)
include forge-conf/socket.example.co.uk/server/*;
location / {
proxy_pass https://socket.example.co.uk:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
# FORGE CONfig (DOT NOT REMOVE!)
include forge-conf/socket.example.co.uk/after/*;
解决方法:
>确保您的域指向您的服务器.
>确保在启用了ssl的域中运行Nginx服务器块.
>从Nginx配置中删除任何位置块,尝试代理到运行socket.io服务器的端口.
>确保您的ssl证书有效.
>用io.connect()连接而不是你正在做的方式.省略url的协议部分(https://).
>从命令行使用sudo killall -9节点来杀死可能会延迟并绑定到您的端口的任何僵尸进程.当socket.io无法正常关闭时,有时会发生这种情况.
我自己的代码示例:
var socket = io.connect('dev.somedomain.com:3000',{secure:true});
来自我自己域的服务器示例:
var fs = require('fs'),
https = require('https'),
config = JSON.parse(fs.readFileSync('./config.json','utf-8')),
serverOpts = {
key: fs.readFileSync(config.server.key),
cert: fs.readFileSync(config.server.cert)
},
server = https.createServer(serverOpts,function(req,res){}),
io = require('socket.io').listen(server);
io.on('connection', function(socket){
console.log('houston, we have lift off');
});
server.listen(config.port, function(){
log('listening on *:%d',config.port);
});
显然我正在从config.json文件中读取我的证书和密钥文件的路径,但你应该明白这个想法吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。