使用SSL(https)的Webservics的Nginx设置

时间:2019-01-04 17:56:12

标签: django web-services ssl nginx config

Nginx新手在这里!我有以下伪代码:

{'house': [2, 0], 'computer': [0, 1], 'table': [1, 1], 'desk': [0, 1]}

和类似这样的nginx设置(将ssl注释掉):

<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>

虽然Web服务可以在http上完美运行(不安全),但我无法弄清楚如何允许wss与ssl一起使用(我注释掉了SSL设置,当我使用SSL设置时,该站点可以正常运行,但不能WSS)。

问题:如何在WS可以使用SSL的地方“升级”我的Nginx设置?

1 个答案:

答案 0 :(得分:0)

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用作websocket的反向代理。在这种情况下,使用标准端口(即不再使用8080),并且nginx将请求路由到内部ws://服务器。这样wss://将自动转换为本地ws://请求,并且无需在本地websocket服务器上进行任何更改。有关更多详细信息,请参见NGINX as a WebSocket Proxy