Jetty

Apache ProxyPass 忽略靜態文件

  • April 5, 2016

Apache 前端伺服器連接到 Jetty 應用程序伺服器時出現問題。

我認為ProxyPass !在一個位置塊中應該不將處理傳遞給應用程序伺服器,但由於某種原因在我的情況下沒有發生,Jetty 在缺少的靜態(js、css 等)上顯示 404

這是我的 Apache (v 2.4, BTW) 虛擬主機塊:

DocumentRoot /path/to/foo
 ServerName foo.com
 ServerAdmin webmaster@foo.com

 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>

您需要使用 ProxyPass !帶路徑的參數,而不是在<Location>塊中,例如:

ProxyPass /static !
ProxyPass / http://localhost:8081/
ProxyPassReverse / http://localhost:8081/

我相信這些規則是按照它們在配置中出現的順序處理的,所以一定要先指定排除規則。

讓它在塊內工作的方法是顛倒順序,即最後Location有最具體的Location語句:

DocumentRoot /path/to/foo
 ServerName foo.com
 ServerAdmin webmaster@foo.com

 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 - 它包含一個與上面幾乎完全相同的範例。

引用自:https://serverfault.com/questions/379667