我有一个在端口 5000 上运行的 .NET 应用程序和一个在端口 8080 上运行的 node.js 应用程序。我想将对 /app 目录的请求转发到节点应用程序。我有以下配置。
<VirtualHost *:443>
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5000/
ProxyPass /app/ http://127.0.0.1:8080/
ProxyPassReverse /app/ http://127.0.0.1:8080/
ErrorLog /var/log/httpd/amnathrig-error.log
CustomLog /var/log/httpd/amnathrig-access.log common
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/amnathrig.app/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/amnathrig.app/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/amnathrig.app/chain.pem
SSLCACertificateFile /etc/letsencrypt/live/amnathrig.app/chain.pem
</VirtualHost>
但是,对 /app 的请求仍被转发到根应用程序。我对此还不太熟悉,所以这可能是显而易见的。
答案1
根据mod_proxy 文档:
按照配置的顺序检查已配置的 ProxyPass 和 ProxyPassMatch 规则。第一个匹配的规则获胜。
因此,由于配置中的第一个指令是代理/
,它将匹配每个 URI,因此第二个指令ProxyPass
是无操作。您应该对ProxyPass
规则进行排序,以便最具体的规则位于配置文件中的第一个。