代码之家  ›  专栏  ›  技术社区  ›  adhg veen

带SSL(https)的webservices的Nginx设置

  •  0
  • adhg veen  · 技术社区  · 6 年前

    Nginx新手来了!我有以下伪代码:

    <button onclick="myFunction()">Click me</button>
    <p id="demo_id"></p>
    
    <script>
    
    function myFunction() 
    {
        var loc = window.location;
        var wsStart = 'ws://';
        if (loc.protocol == 'https:') 
        {
            wsStart = 'wss://'
        }      
    
        var port =":8080" <!-- 
        var endpoint = wsStart + loc.host + port+'/personal/my_random_number/';
    
    socket = new WebSocket(endpoint);
    
    socket.onmessage = function(e) 
    {
        document.getElementById("demo_id").innerHTML = e.data;
    }
    
    socket.onopen = function() 
    {
        socket.send("hello world #");
    } 
    
    </script>
    

    以及类似这样的nginx设置(ssl注释掉了):

    server {
    listen 80;
    #listen 443 ssl;
    server_name 157.200.0.100;
    
     #ssl_certificate /etc/letsencrypt/live/mydomain.com-0002/fullchain.pem;
     #ssl_certificate_key /etc/letsencrypt/live/mydomain.com-0002/privkey.pem;
    
    
    # serve static files
    location /static/ {
    alias /www/static_3/;
    }
    
    # serve media files
    location /media/ {
    alias /www/media_3/;
    }
    
    location / {
    proxy_pass http://$server_name:8080;
    proxy_set_header X-Forwarded-Host $server_name;
    }
    }
    
    #server {
    #        listen 80;
    #        server_name 157.200.0.100;
    #        return 301 https://$host$request_uri;
    #}
    

    虽然web服务在http上工作得很好(不安全),但我不知道如何允许wss使用ssl(我注释掉了ssl设置,当我使用ssl设置时,站点工作正常,但wss不工作)。

    问题: 如何“升级”我的nginx设置,让WS可以使用SSL?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Steffen Ullrich    6 年前
    var port =":8080" <!-- 
    var endpoint = wsStart + loc.host + port+'/personal/my_random_number/';
    

    你的 ws://... 使用端口8080,它似乎根本不由nginx处理-至少您提供的nginx配置只显示端口80和(注释掉)443。这意味着可能有一些(未知的)独立服务器(可能是nodejs?)它只支持 ws:// .

    因此为了提供 wss:// 支持您必须将此支持添加到未知的websocket服务器。如果你想两者都支持 工作场所:// 无线传感器:// 它们可能位于不同的端口上-只有少数服务器允许纯HTTP(或 工作场所:// )和HTTPS(或 无线传感器:// )共享同一端口。

    另一个常用的选项是使用nginx作为websockets的反向代理。在这种情况下,使用标准端口(即不再是8080),nginx将请求路由到内部 工作场所:// 服务器。这种方式 无线传感器:// 将自动转换为本地 工作场所:// 请求并且不需要对本地websocket服务器进行任何更改。见 NGINX as a WebSocket Proxy 更多细节。