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设置?
答案 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。