Tomcat에 대한 대부분의 요청을 프록시하기 위한 httpd 구성 관련 문제

Tomcat에 대한 대부분의 요청을 프록시하기 위한 httpd 구성 관련 문제

Apache에서 다음 작업을 수행하는 데 약간의 어려움이 있었습니다.

AWS ELB 뒤에 apache/tomcat 인스턴스가 있습니다. ELB는 SSL 종료를 수행하므로 이를 처리하기 위해 서버에 리디렉션이 있습니다.

/healthELB 상태 확인이 작동하려면 http에 연결할 수 있어야 합니다 .

/또는 themetomcat, 즉 /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은 일반 http를 사용하여 포트 8080을 수신하고 있습니다.

답변1

포트 8009에서 ajp를 수신하는 Tomcat이 있습니다. 다른 이점 외에도 이를 통해 두 서버의 구성에 동일한 가상 호스트를 정의할 수 있으므로 요청(기본값은 포트 80)이 Apache에 먼저 도달합니다. 호스트가 정의되었습니다. 그런 다음 역방향 프록시 규칙은 다양한 다른 호스트(원격 또는 다른 로컬 가상 호스트)로 전달할 요청, DocumentRoot의 콘텐츠 제공 또는 ajp를 통해 Tomcat으로 전달할 요청을 결정합니다. 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>

관련 정보