Назад | Перейти на главную страницу

Проблемы с конфигурацией httpd для прокси-сервера большинства запросов к tomcat

У меня возникли трудности с тем, чтобы в 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>