自签名证书需要手动确认风险导致nginx转发无效问题

众所周知,采用https的站点中,页面不能有指向http的链接,因为这些链接根本无效。那如果真的需要连接http怎么办,我通常是用nginx做转发,将http转发为https地址。这些都是老套路了,所以我前一阵子,因为业主要求加强安全性,将一个http站点改造成https,轻车熟路,三下五除二,很快搞定。

但问题就来了。改造后的https站点,其他功能都正常,就是视频播放不了。视频播放地址原本是一个ws(部署在同一台服务器上的websocket,服务器的IP是10.0.1.26),支持http;做转发后变成wss,支持https。具体转发的配置如下

1)nginx下的转发配置:

 # 转发WebSocket请求
 location /optc/ {
     # 后端WebSocket服务地址
     proxy_pass http://10.0.1.26:8888;
     
     # WebSocket必备配置
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection "Upgrade";
     proxy_set_header Host $host;
     proxy_cache_bypass $http_upgrade;
     
     # 增加超时设置(根据需要调整)
     proxy_connect_timeout 60s;
     proxy_read_timeout 300s;
     proxy_send_timeout 60s;
 }

2)页面中使用该转发(最后一句)

const player = mpegts.createPlayer({
  enableWorker: true,
  type: "flv",
  isLive: true,
  liveBufferLatencyChasing: true,
  hasAudio: false,
  hasVideo: true,
  // 使用Nginx配置的域名和WSS协议
  url: `wss://10.0.1.26/optc/?url=rtsp://admin:123456@10.0.1.87554/mpeg4`,
});

后来发现,问题出在自签名证书。https需要证书,但我这个证书是自己签发的,浏览器根本不认,所以第一次打开时,浏览器会提示风险,问你是否需要继续?如下图。此时需要点击确定,继续下一步才能打开
在这里插入图片描述

我在服务器上测试的时候,使用的地址是https://localhost,首次使用时浏览器会弹出警告,确认后进入下一步。但是,nginx配置中,我用的是服务器的IP(10.0.1.26),这个地址并没有经过警告确认,所以就打不开了。

解决办法也简单,在服务器上用https://10.0.1.26访问,经过一次警告确认就可以了。

posted on 2025-11-13 22:41  左直拳  阅读(1)  评论(0)    收藏  举报  来源

导航