场景是这样的,主站https PHP服务器,node.js 也在这个主机上,之前主站没有升级全站https的时候 是可以直接嵌入网页使用的,现在主站全部升级https之后,发现node无法通信了。希望大佬能给个思路如何搞
受信证书还是自签发?
@waitingsong node服务器没有证书,主站www证书是买的
@s7smile 证书不会是我痛签发的吧。。 可以试试把证书的 intermediate 中间证书和顶级ca的证书安装到node所在服务器中。
php 肯定会跑在 nginx 后面的吧,在 nginx 这边做个反向代理呢
@hsiaosiyuan0 这个操作起来简单,今天我试一下,结果告诉大家
@waitingsong 我曾试过把node也做成https 牵扯到证书比较繁琐,没有去尝试
@waitingsong @hsiaosiyuan0 感谢两位同行提供的思路方法,现在把解决后的代码贴出来供遇到同样问题的朋友参考。 在nginx 443下增加 location /socket{ # switch off logging access_log off;
# redirect all HTTP traffic to localhost:3000
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# WebSocket support (nginx 1.4)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Path rewriting
rewrite /socket/(.*) /$1 break;
proxy_redirect off;
}
客户端页面文件更改为 <script>
var socket = io("wss://www.domain.com",{path:'/socket/socket.io'});
$('form').submit(function(){
注意是 ws:// 改为 wss://
不过问题来了, 通过nginx后 外面还有CDN 请求走了GET POST 有点耗费系统资源