[Apache] 윈도우 클러스터(MSCS)에 Apache2.4와 tomcat8.5 연동 방법 ssl 추가

제이브로·2024년 10월 10일
0

Apache

목록 보기
6/7
post-thumbnail

1. Windows Failover Cluster

Apache2.4tomcat8.5Windows Failover Cluster에 역할 등록한 상황입니다.

  • 외부IP : 192.168.0.x
  • 내부IP : 10.10.0.x

Client가 접속할 수 있는 IP는 외부IP이고, 내부IPApache2.4Tomcat8.5를 통신하게 구성했습니다.

2. Tomcat 8.5

Apache24를 설명하기 전, Tomcat8.5 설정을 먼저 확인해보겠습니다.

  • Tomcat8.5 역할 Cluster VIP : 10.10.0.110
  • Tomcat8.5의 포트 8080

따라서, 10.10.0.110:8080 으로 접속되게 하면된다.

Cluster VIP(Virtual IP)Node1Node2Active/standbyfailover되면 왔다갔다할 IP입니다.

2.1 server.xml

Tomcatconf/server.xml 수정

  1. connector port 수정
<Connector port="8080" protocol="HTTP/1.1"
			   connectionTimeout="20000"
               redirectPort="8888" />
  1. Engine Host 수정
<Engine name="Catalina" defaultHost="10.10.0.110">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="10.10.0.110"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
</Engine>

3. Apache2.4

Client외부IP로 앞단에 Apache 24를 통해서 접속하고, Proxy내부IPTomcat8.5에 넘겨주도록 설계했습니다.

  • 추가로 SSL 설정을 해주어, 기본 접속 포트는 443입니다.
  • 예시로, 192.168.0.85의 DNS는 helloworld.test.com이며, SSL 인증서*.test.com 으로 하겠습니다.

3.1 Client 접속

  1. Client -> https://helloworld.test.com
  2. Apache24에서 *:443 접속주소 수신
  3. Apache24에서 tomcat8.5 ip주소인 http://10.10.0.110:8080proxy

3.2 httpd.conf

apacheconf/httpd.conf 수정

3.2.1 Listen 수정

Apache가 수신하는 포트들

Listen 443
Listen 5000
Listen 5001

3.2.2 LoadModule - proxy 주석해제

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

3.2.3 LoadModule - ssl 주석해제

LoadModule ssl_module modules/mod_ssl.so

3.2.4 VirtualHost 설정

httpd.conf 맨 아래에 추가

  • <VirtualHost helloworld.test.com:443>ServerName을 명시하지 않고, <VirtualHost *:443>로 설정해도 무방합니다.
  • 모든 접속 주소(/)를 (/http://10.10.0.110:8080/)로 proxy 하며, 맨 뒤의 /꼭! 붙여야합니다.
<VirtualHost helloworld.test.com:443>
    ServerName helloworld.test.com
	
	ProxyRequests Off
    ProxyPass / http://10.10.0.110:8080/
    ProxyPassReverse / http://10.10.4.110:8080/
    
    <Proxy *>
        Require all granted
    </Proxy>

    # SSL 인증서 파일 경로 설정
    SSLEngine on
    SSLCertificateFile "C:/Apache24/ssl/cert.pem"
    SSLCertificateKeyFile "C:/Apache24/ssl/newkey.pem"
    SSLCACertificateFile  "C:/Apache24/ssl/DigiCertCA.pem"
	
</VirtualHost>

3.2.5 VirtualHost - WSGI 설정

Apache24에서 WSGIflask 서버를 실행시키기 위한 세팅입니다.

  • Listen 포트는 5000, 5001
<VirtualHost helloworld.test.com:5000>
    ServerName helloworld.test.com
	
	WSGIScriptAlias / "C:/rest/flask_first.wsgi"

    <Directory C:/rest>
        WSGIApplicationGroup %{GLOBAL}
        Require all granted
    </Directory>

    # SSL 인증서 파일 경로 설정
    SSLEngine on
    SSLCertificateFile "C:/Apache24/ssl/cert.pem"
    SSLCertificateKeyFile "C:/Apache24/ssl/newkey.pem"
    SSLCACertificateFile  "C:/Apache24/ssl/DigiCertCA.pem"
	
</VirtualHost>

<VirtualHost helloworld.test.com:5001>
    ServerName helloworld.test.com
	
	WSGIScriptAlias / "C:/rest/flask_second.wsgi"

    <Directory C:/rest>
        WSGIApplicationGroup %{GLOBAL}
        Require all granted
    </Directory>

    # SSL 인증서 파일 경로 설정
    SSLEngine on
    SSLCertificateFile "C:/Apache24/ssl/cert.pem"
    SSLCertificateKeyFile "C:/Apache24/ssl/newkey.pem"
    SSLCACertificateFile  "C:/Apache24/ssl/DigiCertCA.pem"
	
</VirtualHost>

3.2.6 SSL 인증서

Apache SSL 인증서 관련 내용

  1. 인증서에 Chain 인증서가 없는 경우, SSLCACertificateFile를 제외하고 파일 경로 설정하면된다.

  2. 인증서의 확장자가 꼭 pem일 필요는 없다.

SSLCertificateFile "C:/Apache24/ssl/cert.crt"
SSLCertificateKeyFile "C:/Apache24/ssl/newkey.key"
  1. 인증서 인증이 안될 경우
SSLPassPhraseDialog exec:C:/Apache24/conf/pass.bat

# pass.bat
@echo password

위 내용은 WSGI 포트 접속 관련된 내용만 있습니다. WSGI 세팅은 LoadModule wsgi_module, WSGIPythonPath 등이 필요할 수 있습니다.

감사합니다.

profile
기록하지 않으면 기록되지 않는다.

0개의 댓글