热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

nodejshttpssocket.io连接失败

nginx改用https之后原有express中的socket.io请求被拒绝

nginx 改用 https 之后原有 express 中的 socket.io 请求被拒绝



https 是在 nginx 一层做的, nodejs 还是 http

代码大致是这个样子的:




1
www

1
2
var server = http.createServer(app).listen(3000);

var io = require('../tool/SocketBiz')(server);


1
SocketBiz

1
2
3
4
5
6
7
8
9
10
11
function Socket(Server) {

  var io = require('socket.io')(Server)

  io.sockets.on('connection', function (socket) {

    socket.on('join', function(room) {

      console.log('加入', room)

      socket.join(room)

    })

  })  

}



module.exports = Socket;


1
html

1
2
3
4


...



var socket = io('xxx.xxx.xxx.xxx:3000')


1
nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
upstream nodejs__upstream {

    server 127.0.0.1:3000;

    keepalive 64;

}

server {

    listen 443 ssl;

    ssl_certificate "/etc/nginx/cert/ca.pem";

    ssl_certificate_key "/etc/nginx/cert/ca.key";

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    ssl_session_timeout 5m;

    ssl_prefer_server_ciphers on;

    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

    server_name www.xxxx.com xxxx.com;

    access_log /root/nginx.log;

    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_http_version 1.1;

        proxy_pass         http://nodejs__upstream;

    }

}

server {

   listen 80;

   server_name www.xxxx.com xxxx.com;

   return 301 https://$server_name$request_uri;

}

其他部分都访问正常, 只有 socket 部分是连接失败, 错误是:

(failed) net::ERR_INSECURE_RESPONSE

是因为 server 那边是 http 的 server, 请求连接的是 https 的 server.

该如何处理呢


最终处理:

1
html

1
var socket = io()


1
nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
upstream nodejs__upstream {

    server 127.0.0.1:3000;

    keepalive 64;

}

server {

    listen 443 ssl;

    ssl_certificate "/etc/nginx/cert/ca.pem";

    ssl_certificate_key "/etc/nginx/cert/ca.key";

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    ssl_session_timeout 5m;

    ssl_prefer_server_ciphers on;

    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

    server_name www.xxxx.com xxxx.com;

    access_log /root/nginx.log;

    location / {

        proxy_pass http://nodejs__upstream;

        proxy_set_header   X-Real-IP            $remote_addr;

        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

        proxy_set_header   X-NginX-Proxy    true;

        proxy_http_version 1.1;

        proxy_set_header Upgrade $http_upgrade;

        proxy_set_header Connection "upgrade";

        proxy_set_header Host $host;

    }

}

server {

   listen 80;

   server_name www.xxxx.com xxxx.com;

   return 301 https://$server_name$request_uri;

}

确实 nginx 处理 websocket 需要特殊的配置,传送门

其实本来就调通了,中间做了一些实验,自己又把自己绊倒了。

完结,谢谢热心人们。


   



推荐阅读
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • express工程中的json调用方法
    本文介绍了在express工程中如何调用json数据,包括建立app.js文件、创建数据接口以及获取全部数据和typeid为1的数据的方法。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 本文讨论了在使用PHP cURL发送POST请求时,请求体在node.js中没有定义的问题。作者尝试了多种解决方案,但仍然无法解决该问题。同时提供了当前PHP代码示例。 ... [详细]
  • nginx+多个tomcat
    学习nginx的时候遇到的问题:nginx怎么部署两台tomcat?upstream在网上找的资源,我在nginx配置文件(nginx.conf)中添加了两个server。结果只显 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • Nginx Buffer 机制引发的下载故障
    Nginx ... [详细]
author-avatar
码天下
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有