У меня есть 2 веб-приложения, работающих на Azure (серверы Linux).
В одном веб-приложении работает NodeBB (v1.12.1) - https://my -forum.azurewebsites.net
К этому приложению нельзя обращаться напрямую, вместо этого оно проксируется во второе веб-приложение, работающее в Azure.
Конфигурация NodeBB настроена так, чтобы 'url' был 'https://my -website.azurewebsites.net / forums / '
Я добавил URL-адреса в socket.io:origins
nconf, чтобы можно было отправлять запросы WebSocket с других URL-адресов. Значения выглядят так:
http://my-website.azurewebsites.net:* https://my-website.azurewebsites.net:* https://my-forum.azurewebsites.net:* https://localhost:*
Основной веб-сайт (https://my -website.azurewebsites.net ) представляет собой приложение Node.js & Express с некоторыми внешними маршрутами, маршрутами API и использует модуль http-proxy-middleware
для прокси-запросов к Форум. Настройка и конфигурация выглядит следующим образом:
...
const proxy = require('http-proxy-middleware');
const forumProxy = proxy({
target: process.env.FORUM_URL,
changeOrigin: true,
ws: true,
secure: true,
xfwd: true,
logLevel: 'debug'
});
app.use('/forums', forumProxy);
const mainserver = http.createServer(app);
... other config
mainserver.on('upgrade', forumProxy.upgrade);
Когда я запускаю основной веб-сайт локально (https://localhost:3000) и Proxy на форуме NodeBB, я вижу, что WebSockets установлены правильно и обмен сообщениями происходит между локальной версией веб-сайта и форумом NodeBB, размещенным в Azure.
Тем не менее, когда веб-сайт находится на Azure, он использует URL-адреса прокси-сервера и веб-сайт прекрасно, но соединение WebSocket не работает. Сообщение «2probe» отправляется главным веб-сайтом, но соединение никогда не устанавливается и сообщения не обмениваются.
Доступ к URL форума напрямую работает, как и ожидалось, включая обмен сообщениями WebSocket.
На основном сайте и форуме есть файл web.config, который содержит:
<system.webServer>
<webSocket enabled="false"/>
</system.webServer>
Оба приложения также имеют на сервере значение --web-sockets-enabled = true (которое было установлено с помощью PowerShell).
Насколько я понимаю, это делает WebSocket включенным на сервере, и значение 'false' в файле web.config отключает iis WebSockets и позволяет Node.js обрабатывать его.
Кажется, проблема в том, что 2 сервера Azure общаются друг с другом через WebSockets. Локально в Azure работает нормально.
Почему «https://my -website.azurewebsites.net » не может установить WebSocket на «https://my -forum.azurewebsites.net »? а Local to Azure может?