Jetty
Apache ProxyPass 忽略靜態文件
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 - 它包含一個與上面幾乎完全相同的範例。