Node-Red を試したかったので、Ubuntu サーバーにインストールしました。このサーバーは Apache リバース プロキシを実行していますが、正常に動作しません。HTTP 接続用の仮想ホストを作成すると、Node-Red インターフェイスに問題なくアクセスできますが、オンライン MQTT サーバーやデバッグ メッセージなどのアクティビティは表示されません。グーグルで調べたところ、これは Websocket も使用しているため、それらも通過させる必要があることが分かりました。
そして、私が解決できなかったパズルがこれです。HTTP または Websocket のいずれかをパススルーできますが、同時にはパススルーできません。HTTP をパススルーし、Node-Red Web インターフェイスをロードしてから、リバース プロキシ設定を WS パススルーに変更すると、完全な機能を利用できます。ただし、HTTP パススルーが削除されたため、Node-Red ページを再ロードしたり再接続したりすることはできません。
両方を同じドメインとポートに追加するにはどうすればよいですか? それとも、これはまったく不可能ですか? 以下は私の 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:// などで場所を追加すると、ライブ情報とデバッガーは機能しますが、Web インターフェイスにはアクセスできなくなります。両方が機能するように 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
Apache リバース プロキシを介して Node-Red の HTTP トラフィックと WebSocket トラフィックの両方を有効にするには、Apache 構成にいくつかの変更を加える必要があります。次の操作を試してみてください。
- Node-Red の VirtualHost セクションに次の行を追加して、WebSocket プロキシを有効にします。
<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"
これは、WebSocket エンドポイントを除くすべての HTTP トラフィックを Node-Red にプロキシするように Apache に指示します。
変更された 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 トラフィックの両方が Apache リバース プロキシを介して Node-Red に正しくプロキシされるようになります。