我有一個 web 應用程序,它透過連接埠 80 與最終用戶通信,並透過連接埠 3001 與 Express 伺服器通信。反向代理但該程式碼似乎將我的伺服器回應直接返回給我的最終用戶,而不是 Web 應用程式 html 程式碼。我需要 Web 應用程式繼續發送其典型的 html 回應,同時將其伺服器 api 請求發送到連接埠 3001。
這裡棘手的事情是我的網路應用程式既充當伺服器(對於最終用戶)又充當客戶端(對於 Express 伺服器)。
這是我的虛擬主機配置:
<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 允許我仍然從根網域存取我的 HTML 頁面,同時將任何其他 api 呼叫傳遞給我的伺服器偵聽。
<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>