【问题标题】:Nginx settings for webservics with SSL (https)使用 SSL (https) 的网络服务的 Nginx 设置
【发布时间】:2019-05-31 07:37:01
【问题描述】:

这里是 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)。

问题:如何在 WS 可以使用 SSL 的情况下“升级”我的 nginx 设置?

【问题讨论】:

    标签: django web-services ssl nginx config


    【解决方案1】:
    var port =":8080" <!-- 
    var endpoint = wsStart + loc.host + port+'/personal/my_random_number/';
    

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

    因此,为了提供wss:// 支持,您必须将此支持添加到您未知的 websocket 服务器。如果您想同时支持ws:// 和wss://,它们可能必须在不同的端口上——只有少数服务器允许纯 HTTP(或 ws://)和 HTTPS(或 wss://)共享同一个端口。

    另一个经常使用的选项是使用 nginx 作为 websockets 的反向代理。在这种情况下,使用标准端口(即不再是 8080)并且 nginx 将请求路由到内部 ws:// 服务器。这样wss:// 将自动转换为本地ws:// 请求,无需对本地websocket 服务器进行任何更改。请参阅NGINX as a WebSocket Proxy 了解更多详情。

    【讨论】:

    • 感谢您的详细说明。我确实在 nginx 联合国位置(proxy_pass http://$server_name:8080;)中提到了端口 8080,除非我错过了什么。
    猜你喜欢
    • 1970-01-01
    • 2018-02-07
    • 2012-05-19
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    相关资源
    最近更新 更多