Websocket HTTPS到HTTP降级

时间:2018-10-25 22:05:43

标签: javascript html websocket

我有一个非常简单的问题! 我想在HTTPS连接上加载WS://服务器。我有什么办法可以在没有用户输入的情况下通过WSS强制WS?

1 个答案:

答案 0 :(得分:0)

您可以使用Nginx服务器代理它。

这意味着您将连接到nginx服务器,而不是最终目的地。

首先,您需要设置LetsEncrypt(或其他证书)。

从技术上讲,您可以生成自己的证书,但是如果您这样做,则浏览器将不信任此连接-您可以通过直接访问此网站并接受它,然后再加载其他网站来解决此问题。不过这很痛苦。相信我。设置好之后,LetsEncrypt就能很好地工作。但是,如果您没有域名,则可能必须采取另一种方式。

这样的nginx规则将是一个很好的起点;

server {
  listen 443 ssl;
  server_name  _;

  location / {
    auth_basic            "Restricted";
    proxy_pass http://your.destination.com;  # Note the http rather than ws.

    # WebSocket support
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 86400;

    # SSL
    ssl_certificate /etc/nginx/ssl/yoursite.net.cert;
    ssl_certificate_key /etc/nginx/ssl/yoursite.net.key;
    ssl_trusted_certificate /etc/nginx/ssl/yoursite.net.fullchain;
  }
}

设置完成后,您将连接到该服务器,该服务器将Websocket连接包装在证书中并进行转发。