Возникла проблема с подключением переднего сервера Apache к серверу приложений Jetty.
я думал что ProxyPass !
в блоке местоположения предполагалось НЕ передавать обработку серверу приложений, но по какой-то причине в моем случае этого не происходит, Jetty показывает 404 на отсутствующей статике (js, css и т. д.)
Вот мой блок виртуального хоста 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 для более подробной информации - он содержит пример почти такой же, как указано выше.