当前位置: 首页 > 知识库问答 >
问题:

与Nginx和Express的socket.io SSL连接

孟栋
2023-03-14

我试图在我的应用程序上使用SSL,使用express和nginx运行socket.io,但我无法使其工作。我已经做了我的研究,但我发现的都不起作用。

我一直有错误:ERR_CONNECTION_CLOSED在客户端没有http状态代码。

GET https://subdomain.mywebsite.com:1339/socket.io/?EIO=3&transport=polling&t=LIgxHmz net::ERR_CONNECTION_CLOSED
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);

...
var socket = io.connect("https://subdomain.mywebsite.com:1339");

我做错了什么?

共有1个答案

孙修贤
2023-03-14

试试这个配置。请确保有正确的SSL证书和密钥。如果您在本地进行测试,您可以轻松地使用mkcert工具生成SSL证书以进行本地测试。

server {
   listen 80;
   server_name <your server_name>;
   return 301 https://<your server_name>$request_uri;
}

server {
   listen 443 ssl;


   ssl_certificate <your certificate path>;  # better if you put them at /etc/nginx/ssl/
   ssl_certificate_key <your certificate_key path >;

   server_name <your server_name>;

   location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_set_header X-Client-Verify SUCCESS;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_pass http://localhost:3000;
      proxy_redirect off;
      proxy_buffering off;
   }
}
 类似资料:
  • 问题内容: 我正在尝试为https连接配置ExpressJS应用。Express服务器在localhost:8080和安全的一个localhost:8443上运行。 这是与https相关的server.js代码: 这是我的Nginx配置: 我做了什么 : 使用Letsencrypt certonly工具为域fire.mydomain.me生成SSL证书。 配置nginx。 配置server.js节

  • 我正在努力正确配置nginx,以确保它可以处理Express(端口8081)和Socket的代理。io(端口3000)。下面是我的配置,它当前为整个请求(不仅仅是Socket.io)产生了502错误: 据我所知,我需要确保Socket使用的Websocket。io已升级到HTTP,但这正是我努力掌握自己需要做什么的地方。可能是两个插座。io和Express需要在不同的端口上运行,然后需要根据我上面

  • 我的设置是cloudflare- 这是nginx为websocket连接记录的内容:162.158。75.125--[29/Oct/2016:00:01:47 0000]“GET/HTTP/1.1”101 1047-“Mozilla/5.0(X11;Linux x86_64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/53.0.2785.143 Safari/53

  • 我想连接Oracle 10g Express Edition和Java,我遵循的步骤是: 使用以下文件配置我的类路径: C: \oraclexe\app\oracle\product\10.2.0\server\jdbc\lib\ojdbc14。罐子 C:\Program Files\Java\jdk1.7.0_01\bin C:\oraclexe\app\oracle\产品\10.2.0\服务器

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

  • 我试图使用这个库(express-openid-connect)为身份验证后端提供“简单的设置”,但在从调用对象时,我遇到了一个简单的错误: 当然,我得到了这个错误: 没有重载匹配此调用。 重载4中的1“(Path:PathParams,...Handlers:RequestHandler []):Express”,出现以下错误。 类型“(req:OIDRequest,res:express.re