我在 httpd.conf 中有一个全局 proxypass 规则
全球层面的规则
ProxyPass /test/css http://myserver:7788/test/css
ProxyPassReverse /test/css http://myserver:7788/test/css
我有一个虚拟主机
Listen localhost:7788
NameVirtualHost localhost:7788
<VirtualHost localhost:7788>
Alias /test/css/ "C:/jboss/server/default/deploy/test.ear/test-web-app.war/css/"
</VirtualHost>
我想禁用此虚拟主机中应用的所有全局 proxypass 规则?NoProxy 似乎不起作用。
(我想要这样做的原因是我有以下全局规则,如果应用于此虚拟主机,则会创建 502 代理循环
#pass all requests to application server
ProxyPass /test http://localhost:8080/test
ProxyPassReverse /test http://localhost:8080/test
)
我想要做的是,使用 apache 提供所有静态内容(如 css),同时仍然将所有其余请求代理到应用程序服务器。
答案1
在虚拟主机中,尝试这样的操作
<VirtualHost localhost:7788>
ProxyPass /test/css !
Alias /test/css/ "C:/jboss/server/default/deploy/test.ear/test-web-app.war/css/"
</VirtualHost>
说不!
代理此路径。试试看……?
您也可以尝试ProxyRequests 关闭在您的 vhost 配置中。
答案2
假设我理解了您要做什么,我会摆脱代理,并使用 location 或 locationmatch 块来捕获 css 请求。我会将其放在 apache 的主站点配置中。
我猜你要么正在使用代理,要么正在使用 AJP 连接器连接到 Jboss。将其放在位置块后面。你可以在此处放置到 jboss 的代理传递。然后,你将 Apache 的文档根目录设置为 war 目录的顶部。你可能还想保留虚拟主机的别名。
经过进一步思考,这可能更简单
将其放在任何虚拟主机之外的主 http.conf 中
别名 /test/css/ "C:/jboss/server/default/deploy/test.ear/test-web-app.war/css/" 命令允许、拒绝 允许所有
我假设您在同一台服务器上运行所有这些(Jboss、apache)。请注意,如果您还有其他希望 Apache 提供服务的东西,您可以将目录块中的路径更改为 test-web-app.war 目录并添加更多别名。
您可能还希望将 Proxypass 调整到 Jboss,以便您可以为希望 JBoss 处理的任何目录设置一个。将其放在上述目录块之后可能会有效