我有一个 Web 应用程序,它通过端口 80 与最终用户通信,通过端口 3001 与 Express 服务器通信。我设置了一个反向代理但代码似乎直接将我的服务器响应返回给我的最终用户,而不是 Web 应用程序 html 代码。我需要 Web 应用程序继续发送其典型的 html 响应,同时将其服务器 api 请求发送到端口 3001。我的代理设置是否不正确?
这里的棘手之处在于我的 Web 应用程序既充当服务器(对于最终用户),又充当客户端(对于 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>