私はポート80経由でエンドユーザーと通信し、ポート3001経由でExpressサーバーと通信するWebアプリケーションを持っています。リバースプロキシしかし、コードは Web アプリの HTML コードではなく、サーバーの応答をエンド ユーザーに直接返しているようです。Web アプリがサーバーの API 要求をポート 3001 に送信している間、通常の HTML 応答を送信し続ける必要があります。プロキシの設定が間違っていますか?
ここで注意しなければならないのは、私の Web アプリがサーバー (エンド ユーザーに対して) とクライアント (Express サーバーに対して) の両方の役割を果たしていることです。
私の vhost 設定は次のとおりです:
<VirtualHost *:443>
SSLEngine on
SSLProxyEngine on
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
ServerName 192.168.253.101
ServerAlias example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog /var/www/example.com/error.log
CustomLog /var/www/example.com/request.log combined
SSLCertificateFile "/etc/ssl/certs/Client_Cert.crt"
SSLCertificateKeyFile "/etc/ssl/certs/Client_Key.key"
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / https://localhost:3001/
ProxyPassReverse / https://localhost:443/
</VirtualHost>
答え1
ProxyPass の行を ProxyPassMatch に変更すると、追加の API 呼び出しをサーバー リッスンに渡しながら、ルート ドメインから HTML ページにアクセスできるようになりました。
<VirtualHost *:443>
SSLEngine on
SSLProxyEngine on
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
ServerName 192.168.253.101
ServerAlias example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog /var/www/example.com/error.log
CustomLog /var/www/example.com/request.log combined
SSLCertificateFile "/etc/ssl/certs/Client_Cert.crt"
SSLCertificateKeyFile "/etc/ssl/certs/Client_Key.key"
ProxyRequests Off
<Proxy "*">
Require host yournetwork.example.com
</Proxy>
ProxyPassMatch ^/([a-z]+)$ https://localhost:3001/$1
</VirtualHost>