У меня возникли трудности с тем, чтобы в Apache работало следующее:
У нас есть экземпляр apache / tomcat, расположенный за AWS ELB. ELB выполняет завершение SSL, поэтому для этого у нас есть перенаправление на сервере.
я нуждаюсь /health
быть доступным по http для работы проверки работоспособности ELB.
Мне нужно отправить все, что не /
или theme
коту т.е. /foo
прокси для localhost:8080/foo
.
Я пробовал несколько вариантов приведенной ниже конфигурации с использованием mod_proxy и / или mod_rewrite, но я не могу заставить это работать должным образом, поэтому был бы признателен за любые указатели.
<Location /health>
ProxyPass http://localhost:8080/health ttl=1
ProxyPassReverse http://localhost:8080/health
</Location>
<Location ~ "^/(.+)">
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =https
RewriteCond %{REQUEST_URI} !^/(health|theme)/
RewriteRule . http://localhost:8080/$1 [P]
ProxyPassReverse http://localhost:8080/$1
</Location>
<Location />
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/health
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule . https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
</Location>
Tomcat прослушивает порт 8080, используя простой http.
У меня Tomcat прослушивает ajp на порту 8009. Помимо других преимуществ, это позволяет определять одни и те же виртуальные хосты в конфигурациях обоих серверов, поэтому запросы (по умолчанию на порт 80) сначала достигают Apache, где у меня есть несколько виртуальных хосты определены. Затем правила обратного прокси решают, какие запросы пересылать на различные другие хосты (удаленные или другие локальные виртуальные хосты), обслуживать контент из DocumentRoot или пересылать Tomcat через ajp. Когда mod_proxy_ajp перенаправляет запросы в Tomcat, по умолчанию они сохраняют свои имена хостов, что позволяет Tomcat направлять их в разные веб-приложения с соответствующими именами виртуальных хостов, которые я определил в server.xml.
Следующие ниже примеры не делают именно то, что вы описали, но я надеюсь, что они демонстрируют гибкость, доступную с виртуальными хостами в обеих конфигурациях серверов, и позволяют вам создавать конфигурации, отвечающие вашим потребностям.
/etc/apache2/extra/vhosts.conf
<VirtualHost *:80>
ServerName my.local.website.com
<Proxy *>
Require all granted
</Proxy>
# proxy specific paths to other virtual hosts
ProxyPass /articles http://a.local.website.com/articles
ProxyPassReverse /articles http://a.local.website.com/articles
ProxyPass /entertainment http://b.local.website.com/entertainment
ProxyPassReverse /entertainment http://b.local.website.com/entertainment
# send everything else to tomcat via ajp on port 8009
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
</VirtualHost>
$ CATALINA_HOME / server.xml
<Host name="my.local.website.com" appBase="temp" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve"
prefix="website_access." suffix=".log" pattern="common"/>
</Host>