Nginx配置HTTPS访问socket.io server

本文介绍了如何在升级到HTTPS后,通过Nginx配置来解决客户端访问Socket.IO服务器时的错误。通过特定的Nginx配置,实现了https://xxx.yyy.com可以顺利访问到Socket.IO服务器,确保了聊天功能在HTTPS环境下的正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过使用ngx_http_sub_module,我们可以方便地对Nginx的响应内容进行过滤和替换

1、

服务器域名: xxx.yyy.com

IM服务器端口:pppp

项目中有个聊天功能,之前一直请求的 http://xxx.yyy.com:pppp  的格式,但是升级https之后,就报错了(https请求http服务器路径报错)

nginx的ssl配置略过,可查看之前的博客

下面是 socket.io server 的访问配置

    location ^~/socket.io/ { 
            proxy_pass http://xxx.yyy.com:pppp;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;##此处Upgrade注意大小写
            proxy_set_header Connection "Upgrade";
            proxy_set_header Remote_addr $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_connect_timeout 15s;
            proxy_send_timeout 60s;
            proxy_read_timeout 60s;

        }

或者也可以尝试一下配置

    location /socket.io/ { 
            proxy_pass http://xxx.yyy.com:pppp;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;##此处Upgrade注意大小写
            proxy_set_header Connection "Upgrade";
            proxy_set_header Remote_addr $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_connect_timeout 15s;
            proxy_send_timeout 60s;
            proxy_read_timeout 60s;

        }

然后  访问    https://xxx.yyy.com  即可通过https访问socket.io server

客户端访问


                var url = 'https://xxx.yyy.com';
                 

		var socket =  io.connect(url,{ transports: ["websocket"],query: {userId: 42,clientType:"app"}});

代理wss 把wss://xy3jsdecoder.ys7.com:20006代理到服务器上对应

wss://xxx.xxx.com:20006 必须带端口

修改响应数据

 location /api/{
          	proxy_set_header Host $http_host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header REMOTE-HOST $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_pass https://open.ys7.com/api/;
			proxy_connect_timeout 10s;
            proxy_send_timeout 600s;
            proxy_read_timeout 600s;
           
            sub_filter_types *; 
            sub_filter_once off; # 是否只替换一次 默认on 这里改为off
            sub_filter 'wss://xy3jsdecoder.ys7.com:20006' 'wss://xxx.xxx.com:20006';
		}

代理wss

 server {
          listen 20006 ssl;
          server_name xxx.xxx.com;
          ssl_certificate /usr/local/ssl/xxx.xxx.cn.pem;
          ssl_certificate_key /usr/local/ssl/xx.xxx.cn.key;
          ssl_session_timeout 5m;
          ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
          ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
          ssl_prefer_server_ciphers on;
      
          location / { 
            proxy_pass https://xy3jsdecoder.ys7.com:20006;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;##此处Upgrade注意大小写
            proxy_set_header Connection "Upgrade";
            proxy_set_header Remote_addr $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_connect_timeout 15s;
            proxy_send_timeout 3600s;
            proxy_read_timeout 3600s;
        }
    }

要实现nginx配置node socket.io vue的负载均衡,需要先安装nginx和node.js以及socket.io。 以下是简单的步骤: 1. 安装nginx 使用以下命令安装nginx: ``` sudo apt-get update sudo apt-get install nginx ``` 2. 配置nginx 在 /etc/nginx/conf.d/ 目录下创建一个新的配置文件,例如 socketio.conf,将以下内容粘贴到文件中: ``` upstream socketio_backend { ip_hash; server node1:3000; server node2:3000; } server { listen 80; server_name yourdomain.com; location / { proxy_pass http://socketio_backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } ``` 这个配置文件设置了一个名为 socketio_backend 的负载均衡器,它将请求转发到两个不同的Node.js服务器,分别是 node1 和 node2,它们都运行在3000端口上。 3. 安装Node.js和socket.io 在 node1 和 node2 服务器上安装 Node.js 和 socket.io,使用以下命令: ``` sudo apt-get update sudo apt-get install nodejs sudo apt-get install npm sudo npm install socket.io ``` 4. 在Node.js中使用socket.io 在 Node.js 应用程序中使用以下代码启动 socket.io: ``` var io = require('socket.io')(3000); io.on('connection', function (socket) { console.log('a user connected'); }); ``` 这段代码启动了一个 socket.io 实例,并监听在3000端口上,当有一个新的客户端连接时,会在控制台输出“a user connected”。 在Vue.js中使用socket.io 在Vue.js应用程序中使用以下代码连接到socket.io: ``` import io from 'socket.io-client'; const socket = io('http://yourdomain.com'); ``` 这段代码连接到运行在yourdomain.com的socket.io服务器。 至此,你就可以在Vue.js应用程序中使用socket.io了,并且通过nginx实现了负载均衡。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非ban必选

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值