当前位置: 首页 > 面试题库 >

Socket.io + NodeJS + Nginx + SSL

邵展
2023-03-14
问题内容

使用Nginx时,我的套接字无法连接。我的配置文件是:

server {
    listen 80;
    return 301 https://$host$request_uri;
}

server {
    listen 443;
    server_name mysite.com

    ssl     on;
    ssl_certificate      /etc/nginx/ssl/server.crt;
    ssl_certificate_key  /etc/nginx/ssl/server.key;

    ssl_protocols        TLSv1.2 TLSv1.1 TLSv1;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CBC3-SHA +SHA !aNULL !eNULL !LOW !MD5 !EXP !DSS !PSK !SRP !kECDH !CAMELLIA !RC4 !SEED';

    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 10m;

    keepalive_timeout   70;

    access_log /var/log/nginx/dash.log;

    # pass the request to the node.js server
    location / {
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header X-NginX-Proxy true;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        add_header  Front-End-Https   on;

        proxy_pass         https://127.0.0.1:8081;
        proxy_redirect     off;

    }
}

我的NodeJS是:

// Setup servers
var app = express();
var HTTPSOptions = {
    cert: fs.readFileSync(config.ssl.server_cert),
    key: fs.readFileSync(config.ssl.server_key),
    requestCert: false,
    rejectUnauthorized: false,
    passphrase: config.ssl.server_password
};
HTTPSOptions.agent = new https.Agent(HTTPSOptions);

io = io.listen(server, {
    log: false
});

io.sockets.on('connection', function (sock) {
    console.log("CONNECTED");
});

var httpsServer = https.createServer(HTTPSOptions, app);

我的客户是

var socket = io.connect('https://localhost',  {secure: true});
socket.on('connect', function () {
    console.log("CONNECTED HERE TOO");
});

不用说,两者都不console.log显示任何东西。我担心Nginx阻止了该请求,而节点却实际上从未收到它?


问题答案:

好像缺少了 listen 443 **ssl** ;



 类似资料:
  • 问题内容: 我尝试使用nginx设置nodejs。但是当客户端尝试连接时,它将失败并显示… 那么如何启用websocket通信呢? 我目前的Nginx配置 问题答案: 首先,将您的nginx服务器升级到1.3或更高版本。 其次,我的nginx conf有效。您可以关注我的conf。

  • 据我所知,问题必须与Ngnix反向代理和websockets如何路由有关。服务器对ping请求的答复似乎没有发送到客户端。但我似乎无法确定原因。任何帮助都是非常感谢的。

  • 然后,可以通过domain.com/socket/访问socket.io(获得消息Welcome to socket.io)。另外,静态内容也被交付,但是我无法找到通过端口80加载“socket.io/socket.io.js”文件的任何方法。 在干净的方式上这可能吗?

  • 我试图提供静态文件的ngin x 1.6和代理套接字流量来自Node.js网络服务器与socket.io。 这是nginx.conf的相关部分: 它直接在浏览器和 Node.js 之间完美运行,但使用 nginx 1.6 代理时 socket.io 时间太长。握手协议需要太多时间,但如果不间断,它最终会在几分钟后开始工作。 nginx的静态文件交付工作得很好。 会有什么问题呢? 更新: 我分析了一

  • 我有一个带有Express和Socket.io(Ubuntu18.04)的Nodejs服务器应用程序。在nGinx(1.14)反向代理进入场景之前,它总是工作得很好。nginx服务器运行在Node.js应用程序的不同机器上,每个应用程序都在同一网络中的自己的虚拟机上。 2.1.1版本上的服务器和客户端。 我还尝试删除path选项,并为socket.io东西配置了一个特定的/位置(出于测试目的):

  • 我试图用和构建一个简单的应用程序。 Ive用express Generator生成我的应用程序的skel: 然后我编辑了package.json文件以包含socket.io: 在运行时,so socket.io正在初始化,但似乎没有io.sockets模块。 我运行查看该对象,我得到: 那么sockets方法在哪里呢?无处可去。但是你看,有一个套接字功能: 以防万一,我将发布我的,但我的代码似乎没