Py学习  »  NGINX

带SSL(https)的webservices的Nginx设置

adhg • 4 年前 • 831 次点击  

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?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/52173
 
831 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Steffen Ullrich
Reply   •   1 楼
Steffen Ullrich    5 年前
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 更多细节。