* 현재 환경 : https://example.com 도메인으로 모두 SSL이 적용되어 있는 상태
- Apache(https://example.com:443) : 홈페이지(html)
- Tomcat(https://example.com:8443/adm) : 관리자(spring)
- Spring Boot(https://example.com:5054) : 홈페이지에서 호출하는 API
* 목표
1. https://example.com 접속시에는 홈페이지 화면
2. 관리자 접속시에는 https://example.com:8443/adm 으로 접근하는 것이 아니라 https://example.com/adm 으로 접근
3. API 호출 시 https://example.com:5054 로 호출하는 것이 아니라 https://example.com/api 로 호출
* 환경 설정 수정
/etc/httpd/conf/httpd.conf
...
LoadModule proxy_module modules/mod_proxy.so
...
LoadModule proxy_http_module modules/mod_proxy_http.so
...
Include conf/extra/httpd-vhosts.conf
...
/etc/httpd/conf/extra/httpd-vhosts.conf (없으면 생성)
<VirtualHost *:443>
#
# ServerName example.com
#
## 포워드 Proxy 경우 On Reverse Proxy Off
ProxyRequests Off
#
## HTTP 호스트가 받은 HTTP 요청을 Proxy 요청시 사용 Reverse 경우 On으로 해야함
ProxyPreserveHost On
#
# <Proxy *>
# Order deny,allow
# Allow from all
# </Proxy>
#
## Proxy에 연결할 URL 기술 ServerHost:localhost -> Apache -> ProxyPass URL
## ProxyPass /api https://example.com:5054
# ProxyPass / https://example.com:8443/
#
## <ProxyPassReverse>
## 1 WAS 가 redirect HTTP 응답을 보냈을 경우 Location, Content-Location HTTP 헤더를 수정
## 2 클라이언트에 전달한다. 러비스 프락시가 이 헤더를 수정하지 않으면
## 3 클라이언트는 redirect 시 제대로 연결할 수 없으므로 꼭 설정해야 한다.
#
## ProxyPassReverse /api https://example.com:5054
# ProxyPassReverse / https://example.com:8443/
# <Location />
# Order allow,deny
# Allow from all
# </Location>
# 로드밸런싱 - 경로 분기
<Location /adm>
ProxyPass https://example.com:8443/adm/
ProxyPassReverse https://example.com:8443/adm/
</Location>
<Location /api>
ProxyPass https://example.com:5054
ProxyPassReverse https://example.com:5054
</Location>
# SSL
SSLProxyEngine on
SSLEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
SSLCertificateFile "[SSL 인증서 경로]/STAR.example.com.crt"
SSLCertificateKeyFile "[SSL 인증서 경로]/STAR.example.com.key"
SSLCACertificateFile "[SSL 인증서 경로]/chainca.crt"
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
</VirtualHost>
tip 1) Apache에 홈페이지가 없이 root로 관리자에 연결하고 싶을땐
<Location> 대신 "ProxyPass / https://example.com:8443/", "ProxyPassReverse / https://example.com:8443/"을 사용하면
https://example.com 접근시 https://example.com:8443 의 화면이 바로 노출된다.
tip 2) https://example.com/adm 에서 화면 이동 시 https://example.com/login.do 처럼 url의 prefix가 없어져서 화면을 찾지 못한다. Tomcat을 ROOT.war가 아닌 adm.war로 올려야 한다.
tip 3) SSL이 적용되어 있지 않으면 VirtualHost의 443은 80으로 바꾸고 하단의 SSL 부분은 모두 제거하면 될 것 같다.
'개발' 카테고리의 다른 글
ios safari에서 history.back 시 화면 reload (0) | 2023.03.28 |
---|---|
국내 테두리 웹 지도 그리기 (0) | 2023.03.17 |
안드로이드 aab google 업로드 오류 (0) | 2023.02.08 |
git Invalid username or password (0) | 2023.01.11 |
tomcat manager 설정 (0) | 2023.01.04 |