Я хотел попробовать Node-Red и установил его на своем сервере Ubuntu. Этот сервер запускает обратный прокси Apache, но я не могу заставить его работать правильно. Если я создаю виртуальный хост для HTTP-соединения, я могу получить доступ к своему интерфейсу Node-Red, но он не показывает мне никакой активности, такой как онлайн-серверы MQTT или отладочные сообщения. После некоторого гугления я выяснил, что это потому, что он также использует веб-сокеты, и их тоже нужно пропускать.
И вот головоломка, которую мне не удалось решить: я могу пройти через HTTP или веб-сокеты, но не одновременно. Если я пройду через HTTP, загружу веб-интерфейс Node-Red, а затем изменю настройки обратного прокси на WS passthrough, я получу полную функциональность. Однако я не могу перезагрузить или переподключиться к странице Node-Red, потому что HTTP passthrough был удален.
Как мне добавить оба на одном домене и порту? или это вообще невозможно? Вот часть моей конфигурации apache2:
<VirtualHost *:80>
ServerName nr.domain.com
Redirect permanent / https://nr.domain.com/
RewriteEngine on
RewriteCond %{SERVER_NAME} =nr.domain.com
RewriteRule ^https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<VirtualHost *:443>
ServerName nr.domain.com
SSLEngine On
<Location />
ProxyPass http://localhost:1880/
ProxyPassReverse http://localhost:1880/
</Location>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/nr.domain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/nr.domain.com/privkey.pem
</VirtualHost>
Если я добавлю местоположение с ProxyPass ws:// и т. д., то живая информация и отладчик будут работать, но веб-интерфейс больше не будет доступен. Как мне изменить мой файл конфигурации apache таким образом, чтобы оба работали?
решение1
Похоже, вам также необходимо проксировать соединения через веб-сокеты, основываясь наэтот предыдущий ответ.
Попробуйте что-то подобное для своей конфигурации.
<VirtualHost *:80>
ServerName nr.domain.com
Redirect permanent / https://nr.domain.com/
RewriteEngine on
RewriteCond %{SERVER_NAME} =nr.domain.com
RewriteRule ^https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<VirtualHost *:443>
ServerName nr.domain.com
SSLEngine On
<Location />
ProxyPass http://localhost:1880/
ProxyPassReverse http://localhost:1880/
</Location>
# New web socket proxy
<Location /comms>
ProxyPass ws://localhost:1880/comms
ProxyPassReverse ws://localhost:1880/comms
</Location>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/nr.domain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/nr.domain.com/privkey.pem
</VirtualHost>
решение2
Чтобы включить трафик HTTP и WebSocket для Node-Red через ваш обратный прокси Apache, вам нужно внести некоторые изменения в конфигурацию Apache. Вот что вы можете попробовать:
- Включите проксирование WebSocket, добавив следующие строки в раздел VirtualHost для Node-Red:
<Location /ws>
ProxyPass ws://localhost:1880/ws
ProxyPassReverse ws://localhost:1880/ws
</Location>
Это указывает Apache на необходимость проксирования всего трафика WebSocket на Node-Red.
- Измените существующие директивы ProxyPass и ProxyPassReverse, чтобы исключить конечную точку WebSocket. Добавьте следующую строку после тега из предыдущего шага:
ProxyPassMatch "^/(?!ws)(.*)" "http://localhost:1880/$1"
Это указывает Apache на необходимость проксирования всего HTTP-трафика в Node-Red, за исключением конечной точки WebSocket.
Измененный раздел VirtualHost должен выглядеть следующим образом:
<VirtualHost *:443>
ServerName nr.domain.com
SSLEngine On
<Location /ws>
ProxyPass ws://localhost:1880/ws
ProxyPassReverse ws://localhost:1880/ws
</Location>
<Location />
ProxyPassMatch "^/(?!ws)(.*)" "http://localhost:1880/$1"
ProxyPassReverse http://localhost:1880/
</Location>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/nr.domain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/nr.domain.com/privkey.pem
</VirtualHost>
Перезапустите Apache, чтобы изменения вступили в силу:
sudo systemctl restart apache2
Благодаря этим изменениям трафик HTTP и WebSocket должен корректно передаваться в Node-Red через обратный прокси-сервер Apache.