Apache 前端服务器连接到 Jetty 应用程序服务器时出现问题。
我认为ProxyPass !
位置块不应该将处理传递给应用程序服务器,但由于某种原因,在我的情况下没有发生这种情况,Jetty 在缺少静态(js,css等)时显示 404。
这是我的 Apache(v 2.4,BTW)虚拟主机块:
DocumentRoot /path/to/foo
ServerName foo.com
ServerAdmin [email protected]
RewriteEngine On
<Directory /path/to/foo>
AllowOverride None
Require all granted
</Directory>
ProxyRequests Off
ProxyVia Off
ProxyPreserveHost On
<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
</Proxy>
# don't pass through requests for statics (image,js,css, etc.)
<Location /static/>
ProxyPass !
</Location>
<Location />
ProxyPass http://localhost:8081/
ProxyPassReverse http://localhost:8081/
SetEnv proxy-sendchunks 1
</Location>
答案1
您需要使用带有路径的 ProxyPass ! 参数,而不是<Location>
块中的参数,例如:
ProxyPass /static !
ProxyPass / http://localhost:8081/
ProxyPassReverse / http://localhost:8081/
我相信这些规则是按照它们在配置中出现的顺序进行的,因此请务必首先指定排除规则。
答案2
使其在块内工作的方法Location
是反转顺序,即使用最具体的Location
语句最后的:
DocumentRoot /path/to/foo
ServerName foo.com
ServerAdmin [email protected]
RewriteEngine On
<Directory /path/to/foo>
AllowOverride None
Require all granted
</Directory>
ProxyRequests Off
ProxyVia Off
ProxyPreserveHost On
<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
</Proxy>
<Location />
ProxyPass http://localhost:8081/
ProxyPassReverse http://localhost:8081/
SetEnv proxy-sendchunks 1
</Location>
# don't pass through requests for statics (image,js,css, etc.)
<Location /static/>
ProxyPass !
</Location>
这有效。请参阅https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxypass有关详细信息 - 它包含一个与上面几乎完全相同的示例。