반응형
의존성 설치 및 패키지 풀기
# root 권한
yum -y install gcc make gcc-c++ pcre-devel openssl-devel expat-devel
cd /app/sw/apache2.4-src
tar xvfz pcre-8.45.tar.gz
tar xvfz httpd-2.4.57.tar.gz
tar xvfz apr-1.7.4.tar.gz
tar xvfz apr-util-1.6.3.tar.gz
tar xvfz tomcat-connectors-1.2.48-src.tar.gz
APR 설치
cd /app/sw/apache2.4-src/apr-1.7.4
./configure --prefix=/app/sw/apache2.4-src/apr-1.7.4
make && make install
APR-UTIL 설치
cd /app/sw/apache2.4-src/apr-util-1.6.3
./configure --prefix=/app/sw/apache2.4-src/apr-util-1.6.3 --with-apr=/app/sw/apache2.4-src/apr-1.7.4
make && make install
PCRE 설치
cd /app/sw/apache2.4-src/pcre-8.45
./configure --prefix=/app/sw/apache2.4-src/apr-util-1.6.3 --with-apr=/app/sw/apache2.4-src/apr-1.7.4
make && make install
아파치(httpd) 설치
cd /app/sw/apache2.4-src/httpd-2.4.57
./configure --prefix=/app/sw/apache2.4 --enable-proxy --enable-proxy-balancer --enable-modules=most --enable-mods-shared=all --enable-so --with-apr=/app/sw/apache2.4-src/apr-1.7.4 --with-apr-util=/app/sw/apache2.4-src/apr-util-1.6.3
make && make install
서비스 파일 옮기기
mv /app/sw/httpd.service /etc/systemd/system
chown emily:emily /etc/systemd/system/httpd.service
로드밸런싱을 위한 tomcat 셋팅(mod_jk)
# 개발서버는 tomcat 로드밸런싱이 없지만 아래 mod라이브러리를 만들어야지 httpd 시작이 되므로 진행한다.
cd /app/sw/apache2.4-src/tomcat-connectors-1.2.48-src/native
./configure --with-apxs=/app/sw/apache2.4/bin/apxs
make && make install
# /app/sw/apache2.4/modules 하위에 mod_jk.so가 생김
Tomcat AJP LB를 위한 worker 설정
vi apache2.4/conf/workers.properties
worker.list=load_balancer,task_balancer
worker.load_balancer.type=lb
# worker.load_balancer.balance_workers=tomcat1,tomcat2
worker.load_balancer.balance_workers=tomcat1
worker.load_balancer.sticky_session=true
worker.load_balancer.method=S
worker.load_balancer.session_cookie=TOMCAT_JSESSIONID
worker.load_balancer.retries=5
worker.load_balancer.recovery_options=7
worker.tomcat1.port=28009
worker.tomcat1.host=192.168.18.188
worker.tomcat1.type=ajp13
worker.tomcat1.connection_pool_timeout=600
worker.tomcat1.socket_timeout=600
worker.tomcat1.ping_timeout=300
worker.tomcat1.connect_timeout=20000
worker.tomcat1.prepost_timeout=20000
worker.tomcat1.recovery_options=7
worker.tomcat1.lbfactor=1
worker.tomcat1.route=tomcat1
worker.tomcat1.max_packet_size=65536
worker.tomcat2.port=28009
worker.tomcat2.host=192.168.18.189
worker.tomcat2.type=ajp13
worker.tomcat2.connection_pool_timeout=60
worker.tomcat2.socket_timeout=30
worker.tomcat2.lbfactor=1
worker.tomcat2.route=tomcat2
#
worker.task_balancer.type=lb
worker.task_balancer.balance_workers=task1,task2
worker.task_balancer.sticky_session=true
worker.task_balancer.method=S
worker.task_balancer.session_cookie=TASK_JSESSIONID
worker.task1.port=26030
worker.task1.host=192.168.18.188
worker.task1.type=ajp13
worker.task1.lbfactor=1
worker.task1.route=task1
worker.task2.port=26030
worker.task2.host=192.168.18.189
worker.task2.type=ajp13
worker.task2.lbfactor=1
worker.task2.route=task2
확인
/app/sw/apache2.4/bin/httpd -version
Server version: Apache/2.4.57 (Unix)
Server built: Jun 23 2023 17:29:55
[root@localhost conf]#
[root@localhost conf]# openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
# 정적 모듈로 설치된 mod_ssl.so 확인
/app/sw/apache2.4/bin/apachectl -l
# 동적 모듈로 설치된 mod_ssl.so 확인
# (정적모듈 or 동적모듈 중 하나로만 확인되면 됩니다. )
# (동적모듈의 경우, mod_so.c 및 mod_ssl.so 둘 다 확인된 경우에만 SSL 적용 가능합니다.)
1. ls -al /app/sw/apache2.4/modules | grep mod_ssl
2. bin/apachectl -l
mod_so.c
httpd-ssl.conf 파일에서 SSL포트 Listen 및 VirtualHost 설정
vi apache2.4/conf/extra/httpd-ssl.conf
Listen 8443
<VirtualHost *:8443>
ErrorLog "/logs/sw/apache2.4/error_log"
TransferLog "/logs/sw/apache2.4/access_log"
DocumentRoot "/app/sw/apache2.4/htdocs" ← Document Root 동기화
ServerName www.example.com:8443 ← ServerName 동기화
………
#SSL 환경설정
SSLEngine on
SSLProtocol –All +TLSv1.2 +TLSv1.3
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
#인증서(crt), 개인키(key), 체인(chainca) 설정
SSLCertificateFile /app/sw/openssl/sw.crt
SSLCertificateKeyFile /app/sw/openssl/sw.key
SSLCACertificateFile /app/sw/openssl/sw.crt
………
</VirtualHost>
httpd.conf 설정 - AJP LB 설정
vi apache2.4/conf/httpd.conf
Listen 61819
# 1. 프록시 기본 및 HTTP 프록시 모듈 (ProxyPreserveHost, ProxyPass 등에 필수)
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
# 2. 로드밸런서 관련 모듈 (balancer:// 지정을 위해 필수)
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
# 3. SSL 관련 모듈 (SSLEngine, SSLProxyEngine 지정을 위해 필수)
LoadModule ssl_module modules/mod_ssl.so
# 4. 헤더 제어 관련 모듈 (RequestHeader 설정을 위해 필수)
LoadModule headers_module modules/mod_headers.so
LoadModule jk_module modules/mod_jk.so
User emily
Group emily
JkWorkersFile conf/workers.properties
# mod_jk logrotate
JkLogFile "|/app/sw/apache-2.4/bin/rotatelogs -l /app/sw/apache-2.4/logs/mod_jk.log.%Y%m%d 86400"
JkShmFile logs/jk-runtime-status
JkOptions +ForwardKeySize +ForwardURICompatUnparsed -FlushPackets
<VirtualHost *:61819>
ServerAdmin you@example.com
ServerName localhost:61819
<IfModule jk_module>
JkLogFile logs/mod_jk.log
JkLogLevel info
# JkUnmount /task/* load_balancer
# JkMount /* load_balancer
JkMount /sw/* task_balancer
JkMount /task/* task_balancer
</IfModule>
SSLProxyVerify none
SSLProxyCheckPeerName off
SSLEngine on
SSLProxyEngine on
SSLProtocol all -SSLv3
SSLCertificateKeyFile /usr/local/openssl/sw.key
SSLCertificateFile /usr/local/openssl/sw.crt
SSLCACertificateFile /usr/local/openssl/sw.crt
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "61819"
</VirtualHost>
<VirtualHost *:6087>
ServerAdmin you@example.com
ServerName localhost:6087
ProxyPreserveHost Off
ProxyRequests Off
SSLProxyVerify none
SSLProxyCheckPeerName off
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<Proxy "balancer://mycluster">
BalancerMember "http://192.168.18.187:6030" route=1
ProxySet lbmethod=byrequests
ProxySet stickysession=ROUTEID
</Proxy>
ProxyPass "/" "balancer://mycluster/"
ProxyPassReverse "/" "balancer://mycluster/"
<IfModule remoteip_module>
RemoteIPHeader X-Forwarded-For
RemoteIPProxiesHeader X-Forwarded-By
</IfModule>
SSLEngine on
SSLProxyEngine on
SSLProtocol all -SSLv3
SSLCertificateKeyFile /usr/local/openssl/sw.key
SSLCertificateFile /usr/local/openssl/sw.crt
SSLCACertificateFile /usr/local/openssl/sw.crt
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "6087"
</VirtualHost>
<VirtualHost *:17443>
ServerAdmin you@example.com
ServerName localhost:17443
SSLEngine on
SSLProxyEngine on
ProxyPreserveHost On
ProxyRequests Off
ProxyPass "/socket.io/" "ws://127.0.0.1:8080/socket.io/"
ProxyPassReverse "/socket.io/" "ws://127.0.0.1:8080/socket.io/"
ProxyPass "/" "http://127.0.0.1:8080/"
ProxyPassReverse "/" "http://127.0.0.1:8080/"
# SSLProtocol all -SSLv3
SSLCertificateKeyFile /usr/local/openssl/solution_dev63.key
SSLCertificateFile /usr/local/openssl/solution_dev63.crt
SSLCACertificateFile /usr/local/openssl/solution_dev63.crt
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "17443"
</VirtualHost>
httpd.conf 설정 - Log Format 수정
<IfModule log_config_module>
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Cookie}i\" %D %{ms}T(ms)" common
<IfModule logio_module>
# You need to enable mod_logio.c to use %I and %O
# LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog "logs/access_log" common
</IfModule>
아파치 시작전 conf 체크
/bin/apachectl configtest
아파치 시작
systemctl list-unit-files | grep httpd
systemctl enable httpd
systemctl httpd start반응형
'밥줄 > Web' 카테고리의 다른 글
| [IIS] 설치 및 인증서 적용 (0) | 2026.06.18 |
|---|---|
| [apache] Apache2.4 SSL 설정과 mod_jk, mod_proxy_balancer (0) | 2025.08.17 |
| CORS (0) | 2021.04.16 |