【发布时间】:2019-01-24 20:15:51
【问题描述】:
我刚刚更新了一个 node+socket 应用程序以使用 https。花了一些时间,但我现在在这里有一个工作的 nginx、node.js、socket.io 配置。它工作得很好,但我的问题是,是否可以配置服务器端,以便客户端不需要提交 path 参数,或者至少将其作为 url 的一部分包含在内?我希望能够只为用户提供一个可使用的 url,例如,https://mywebsite.com/apiPath/myNamespace。
目前:
NGINX 配置:
upstream websocket1 {
server 127.0.0.1:3000;
}
server {
listen 80;
listen [::]:80;
server_name mywebsite.com;
return 301 https://mywebsite.com$request_uri;
}
server {
listen 443 ssl;
server_name mywebsite.com;
ssl_certificate this.crt;
ssl_certificate_key this.pem;
location /apiPath/ {
proxy_pass http://websocket1/socket.io/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
服务器:
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var port = process.env.PORT || 3000;
http.listen(port);
var nsp = io.of('/myNamespace');
nsp.on('connection', function(socket) {
console.log('connected!');
});
客户:
var socket = require('socket.io-client')(https://mywebsite.com/myNamespace, {path: '/apiPath'});
提前致谢!
【问题讨论】:
标签: node.js sockets express nginx socket.io