1. 프로그램 다운로드 |
우선 레드햇에 로그인을 합니다.
Downloads를 클릭하고, 아래 그림처럼 Core Services에서 Apache HTTP Server를 클릭해서 JBCS-httpd24-2.4 버전을 OS에 맞게 다운로드 합니다.
2. 다운받은 압축 파일 해제 |
# unzip jbcs-httpd24-httpd2.4.29-RHEL7-x86_64.zip -d /APACHE
3. 소유권 변경 |
# chown apache:apache -R /APACHE
4. apache 패치 |
/CLOUD/APACHE 디렉터리로 패치 버전 순서대로 덮어씌어 압축 해제
# unzip -o jbcs-httpd24-httpd-2.4.29-SP1_RHEL7-x86_64.zip -d /APACHE
# unzip -o jbcs-httpd24-httpd-2.4.29-SP2_RHEL7-x86_64.zip -d /APACHE
5. apache 로그 디렉터리 생성 |
# cd /APACHE
# mkdir LOG
# cd LOG
# mkdir modjk-log
6. apache 설정 변경 |
1) apachectl.sh
# cd /APACHE/jbcs-httd24-2.4/httpd/sbin
# vim apachectl.sh
# 설치된 위치에 맞게 수정
HTTPD='./httpd'
→ HTTPD='/APACHE/jbcs-httpd24-2.4/httpd/sbin/httpd'
2) httpd.conf
# cd /APACHE/jbcs-httpd24-2.4/httpd/conf
# vim httpd.conf
# 응답 메시지 정보 숨김
ServerToken OS → ServerTokens Prod
# apache 서버 루트 설정
ServerRoot "/etc/httpd" → ServerRoot "/APACHE/jbcs-httpd24-2.4/httpd"
# 프로세스ID 파일 설정
PidFile "/var/run/httpd/httpd.pid" → PidFile "run/httpd.pid"
# 타임 아웃값 WAS 서버와 동일하게 설정
Timeout 120 → Timeout 60
# KeepAlive 설정 활성화
KeepAlive Off → KeepAlive On
# 한 프로세스(스레드)가 처리하는 최대 처리량 증가
MaxKeepAliveRequests 100 → MaxKeepAliveRequests 10000
# 처리 후 스레드가 유지되는 시간 축소
KeepAliveTimeout 15 → KeepAliveTimeout 5
# Listen 포트 설정
Listen 127.0.0.1:80 → Listen 80
# 프로세스 실행 권한 설정
User apache → User nobody
Group apache → Group nobody
# 서버명 변경
ServerName localhost:80 → ServerName localhost
# 헤더에서 서버명 표시 제한 설정
UseCanonicalName Off
# DocumentRoot의 경로는 엔진과 같이 사용하지 않길 권장(웹서비스 영역 분리)
DocumentRoot "/var/www/html" → DocumentRoot "/WebApp/www"
<Directory />
AllowOverride none
Require all denied
</Directory>
→
<Directory />
# AllowOverride none # 상위 패스 기능 제거
Options None # 심볼릭 링크 금지
Require all denied
LimitRequestBody 5000000 # 파일 업로드/다운로드 제한
</Directory>
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
→
<Directory "/WebApp/www">
Options None # 심볼릭 링크 금지
# AllowOverride none # 상위 패스 기능 제거
Require all granted
<LimitExcept GET POST HEAD> # HTTPD Method 제한
require all denied
</LimitExcept>
LimitRequestBody 5000000 # 파일 업로드/다운로드 제한
</Directory>
# ErrorLog가 0시에 로테이트 되고 일단위로 생성되도록 변경
ErrorLog logs/error_log
→ ErrorLog "|/APACHE/jbcs-httpd24-2.4/httpd/sbin/rotatelogs /APACHE/LOG/error_log.%Y%m%d 86400 +540"
# 초단위까지 기록하기 위해 %D를 추가
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
→ LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" combined
# CustomLog가 0시에 로테이트 되고 일단위로 생성되도록 변경
CustomLog logs/access_log combined
→ CustomLog "|/APACHE/jbcs-httpd24-2.4/httpd/sbin/rotatelogs /APACHE/LOG/access_log.%y%m%d 86400 +540" combined env=!do_not_log
# 이미지, 자바스크립트 파일, 스타일시트 파일, 플래시 파일 등 로그 저장 금지
SetEnvIfNocase Request_URI "\.(gif|jpg|ico|js|css|png|swf)$" do_not_log
# 해당 서버의 정보를 보내지 않도록 Off 처리
ServerSignature On → ServerSignature Off
# ICON 디렉터리 설정은 보안 설정에 위배되는 사항으로 제거(주석 처리)
# Alias /icons/ "/var/www/icons/"
# <Directory "/var/www/icons">
# Options Indexes MultiViews
# AllowOverride None
# Require all granted
#</Directory>
# 웹 분산저작 기능은 일반적으로 사용하지 않는 기능으로 제거(주석 처리)
# <IfModule mod_dav_fs.c>
# Location of the WebDAV lock database.
# DAVLockDB /var/lib/dav/lockdb
#<IfModule>
# CGI 설정은 불필요한 설정이고, 많은 부분이 보안에 노출됨(주석 처리)
# ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
#<Directory "/var/www/cgi-bin">
# AllowOverride None
# Options None
# Require all lgranted
#<Directory>
#ReadmeName README.html
#HeaderName HEADER.html
#IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
# ICON 매핑은 보안사항에 위배되며 불필요한 설정이므로 제거(주석 처리)
# AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
#AddIconByType (TXT,/icons/text.gif) text/*
#AddIconByType (IMG,/icons/image2.gif) image/*
#AddIconByType (SND,/icons/sound2.gif) audio/*
#AddIconByType (VID,/icons/movie.gif) video/*
#AddIcon /icons/binary.gif .bin .exe
#AddIcon /icons/binhex.gif .hqx
#AddIcon /icons/tar.gif .tar
--- 중간 생략 ---
#AddIcon /icons/blank.gif ^^BLANKICoN^^
DefaultIcon /icons/unknown.gif
# 사용하지 않는 기능 제거(주석 처리)
# Alias /error/ "/var/www/error/"
#<IfModule mod_negotiation.c>
#<IfModule mod_include.c>
# <Directory "/var/www/error">
# AllowOverride None
# Options IncludesNoExec
# AddOutputFilter Includes html
# Require alll granted
# LanguagePriority en es de fr
# ForceLanguagePriority Prefer Fallback
#<Directory>
#<IfModule>
#<IfModule>
# 클라이언트가 송신한 문자열 반환 설정 비활성화
TraceEnable On → TraceEnable Off
3) mod-jk.conf 설정
# vim /APACHE/jbcs-httpd24-2.4/httpd/conf.d/mod_jk.conf
# mod_jk 로그가 0시에 로테이트 되고 일단위로 생성되도록 변경
JkLogFile "|/APACHE/jbcs-httpd24-2.4/httpd/sbin/rotatelogs /APACHE/LOG/modjk-log/mod_jk.log.%Y%m%d 86400 +540"
# mod_jk 쉐어 메모리 파일 위치 재설정
JkShmFile /APACHE/LOG/modjk-log/mod-jk.shm
4) workers.properties 설정
# vim /APACHE/jbcs-httpd24-2.4/httpd/conf.d/workers.properties
worker.list=wlb,jkstatus #wlb 추가 설정 시 콤마(,)로 구분해서 추가
worker.template.type=ajp13 # 연결 프로토콜 설정
worker.template.lbfactor=1 # 로드밸런스 설정
worker.template.socket_timeout=60 # 소켓 타임아웃 설정
worker.template.sockert_keepalive=true # 소켓 keepalive 설정 활성화
worker.template.recovery_options=7 # 복구 옵션 설정
worker.template.ping_mode=A # ping 모드 설정
worker.template.ping_timeout=10000 # ping 타임아웃 설정
worker.template.connection_pool_size=64 # 최대 WAS 커넥션 수 설정
worker.template.connection_pool_minsize=32 # 최소 WAS 커넥션 수 설정
worker.template.connection_pool_timeout=60 # 커넥션 연결 종료 후 재사용 대기 시간 설정
# Configuration Node10 설정
worker.node10.reference=worker.template # 위에서 만든 템플릿 설정
worker.node10.host=WAS1 # WAS1 서버 호스트명 입력
worker.node10.port=8009 # WAS1 서버 포트 설정
# Configuration Node20 설정
worker.node20.reference=worker.template # 위에서 만든 템플릿 설정
worker.node20.host=WAS2 # WAS2 서버 호스트명 입력
worker.node20.port=8009 # WAS2 서버 포트 설정
# Configuration Loadbalancer 설정
worker.wlb.type=lb
worker.wlb.retries=2
worker.wlb.method=Session
worker.wlb.sticky_session=True
worker.wlb.balance_workers=node10,node20
worker.jkstatus.type=status
5) uriworkermap.properties 설정
# vim /APACHE/jbcs-httpd24-2.4/httpd/conf.d/uriworkermap.properties
/*=wlb # 모든 파일에 대한 처리 설정(wlb에 등록된 WAS로 요청 전달)
/서비스명/*=wlb1 # 설정한 서비스의 모든 파일에 대한 처리 설정(wlb1에 등록된 WAS로 요청 전달)
/*.jsp=wlb # jsp 파일에 대한 처리 설정(WAS로 요청 전달)
/*.do=wlb # do 파일에 대한 처리 설정(WAS로 요청 전달)
!/resource=wlb # /resource 디렉터리에 대한 처리 제외 설정(Web에서 처리 설정)
6) 00-base.conf 설정
# vim /APACHE/jbcs-httpd24-2.4/httpd/conf.modules.d/00-base.conf
마지막줄
DefaultRuntimeDir /opt/rh/jbcs-httpd24/root/var/run/jbcs-httpd24-httpd
→ DefaultRuntimeDir /APACHE/jbcs-httpd24-2.4/httpd/run
7) 00-dav.conf 설정
# vim /APACHE/jbcs-httpd24-2.4/httpd/conf.modules.d/00-dav.conf
# 웹 분산 저작기능 제거(주석 처리)
# LoadModule dav_module modules/mod_dav.so
# LoadModule dav_fs_module modules/mod_dav_fs.so
# LoadModule dav_lock_module modules/mod_dav_lock.so
8) 00-mpm.conf 설정
# vim /APACHE/jbcs-httpd24-2.4/httpd/conf.modules.d/00-mpm.conf
# MPM 방식 선택(주석 해제 또는 주석 처리로 선택)
# LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
LoadModule mpm_worker_module modules/mod_mpm_worker.so
<IfModule worker.c>
StartServers 2
MaxRequestWorkers 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxConnectionsPerchild 0
</IfModule>
→
<IfModule worker.c>
StartServers 16 # 기동 시 최초 프로세스 수
MaxRequestWorkers 1024 # 최대 동접자 수
MinSpareThreads 512 # 최소 유지 스레드 수
MaxSpareThreads 1024 # 최대 유지 스레드 수
ThreadsPerChild 64 # 프로세스당 스레드 수
ThreadLimit 1024 # 스레드 제한 설정
MaxConnectionsPerchild 0 # 스레드 요청 처리량(0은 무제한)
</IfModule>
9) 00-ssl.conf 설정
# vim /APACHE/jbcs-httpd24-2.4/httpd/conf.modules.d/00-ssl.conf
LoadModule ssl_module modules/mod_ssl.so
→
LoadFile lib/libcrypto.so.10
LoadFile lib/libssl.so.10
LoadModule ssl_module modules/mod_ssl.so
10) 01-cig.conf 설정
# vim /APACHE/jbcs-httpd24-2.4/httpd/conf.modules.d/01-cgi.conf
# CGI 설정 제거(모듈 로드 주석처리)
<IfModule mpm_worker_module>
# LocadModule cgid_module modules/mod_cgid.so
</IfModule>
<IfModule mpm_event_module>
# LoadModule cgid_module modules/mod_cgid.so
</IfModule>
<IfModule mpm_prefork_module>
# LoadModule cgi_module modules/mod_cgi.so
</IfModule>
11) 10-mod_security.conf 설정(mod_security 사용 시 설정)
# vim /APACHE/jbcs-httpd24-2.4/httpd/conf.modules.d/10-mod_security.conf
LoadModule security2_module modules/mod_security2.so
<IfModule !mod_unique_id.c>
LoadModule unique_id_module modules/mod_unique_id.so
</IfModule>
→
LoadFile lib/libcrypto.so.10
LoadFile lib/libssl.so.10
LoadModule security2_module modules/mod_security2.so
<IfModule !mod_unique_id.c>
LoadModule unique_id_module modules/mod_unique_id.so
</IfModule>
7. apache 80번 포트로 수행하기 위한 설정 |
※ apache 계정에서 sudo 명령을 사용하여 apache를 구동하는 이유는 80 port가 root 계정에서만 실행가능(1024port 이하)하기 때문임
① /etc/sudoers 에 apache가 구동될수 있도록 등록
# vim /etc/sudoers
apache ALL=/APACHE/jbcs-httpd24-2.4/httpd/sbin/apachectl
② /etc/sudoers.d 디렉터리에 apache.conf 파일을 생성하여 sudo 명령어로 apache가 구동될수 있도록 등록
# vim /etc/sudoers.d/apache.conf
apache ALL=/APACHE/jbcs-httpd24-2.4/httpd/sbin/apachectl
8. 실행 스크립트 만들기 |
※ 실행 스크립트를 만들어서 /home/apache 디렉터리에 복사
※ 생성한 스크립트 파일에 실행권한 주기
# chmod +x *.sh
1) apache_start.sh
#!/bin/sh
HTTPD_HOME=/APACHE/jbcs-httpd24-2.4/httpd
OPTIONS="-f $HTTPD_HOME/conf/httpd.conf"
PATH=$HTTPD_HOME/sbin:$PATH
LD_LIBRARY_PATH=$HTTPD_HOME/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH HTTPD_HOME PATH
if [ `ps -ef | grep "/sbin/httpd" | grep "root" | grep -v " grep" | wc -l` -eq 0 ]; then
sudo $HTTPD_HOME/sbin/apachectl ${OPTIONS} -k start
sleep 1
if [ `ps -ef | grep httpd | grep -v "grep" | wc -l` -ge 1 ]; then
echo -e "\nApache Status = $(ps -ef | grep "/sbin/httpd" | grep "root" | grep -v grep | awk '{print "\tPID : " $2, "\tLocation : "$8}')"
echo -e "httpd process is running.\n"
else
echo -e "\nhttpd process is not running.\n"
fi
else
echo -e "\nhttpd process is running.\n"
fi
2) apache_stop.sh
#!/bin/sh
HTTPD_HOME=/APACHE/jbcs-httpd24-2.4/httpd
OPTIONS="-f $HTTPD_HOME/conf/httpd.conf"
PATH=$HTTPD_HOME/sbin:$PATH
LD_LIBRARY_PATH=$HTTPD_HOME/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH HTTPD_HOME PATH
if [ `ps -ef | grep httpd | grep "root" | grep -v "grep" | wc -l` -eq 0 ]; then
echo -e "\nhttpd process is stoped.\n"
else
sudo $HTTPD_HOEM/sbin/apachectl ${OPTIONS} -k stop
sleep 1
if [ `ps -ef | grep "/sbin/httpd" | grep "root" | grep -v "grep" | wc -l` -eq 0 ]; then
echo -e "\nhttpd process is stoped.\n"
else
echo -e "\nApache Status = $(ps -ef | grep "/sbin/httpd" | grep "root" | grep -v grep | awk '{print "\tPID : " $2, "\tLocation : "$8}')"
echo -e "httpd process is running.\n"
fi
fi
3) apache_graceful.sh
#!/bin/sh
HTTPD_HOME=/APACHE/jbcs-httpd24-2.4/httpd
OPTIONS="-f $HTTPD_HOME/conf/httpd.conf"
PATH=$HTTPD_HOME/sbin:$PATH
LD_LIBRARY_PATH=$HTTPD_HOME/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH HTTPD_HOME PATH
if [ `ps -ef | grep "/sbin/httpd" | grep "root" | grep -v "grep" | wc -l` -ge 1 ]; then
sudo $HTTPD_HOME/sbin/apachectl ${OPTIONS} -k graceful
sleep 1
echo -e "\nApache Status = $(ps -ef | grep "/sbin/httpd" | grep "root" | grep -v grep | awk '{print "\tPID : " $2, "\tLocation : "$8}')"
echo -e "httpd processis restarting.\n"
else
echo -e "\nhttpd process is not running.\n"
fi
9. apache 실행 |
# su - apache
# ./apache_start.sh
'IT 이야기 > Apache' 카테고리의 다른 글
[Apache] Prefork MPM(Multi-Processing Module) (0) | 2020.04.08 |
---|---|
[Apache] Worker MPM(Multi-Processing Module) (0) | 2020.04.08 |
[JBCS-Apache HTTP Server] JBCS(jBoss Core Services)-Apache HTTP Server란? (0) | 2019.12.09 |
[Apache] Apache에서 동시 접속자 수를 변경하기 (0) | 2019.11.29 |
[Apache] Apache에 로딩된 모듈 확인(DUMP_MODULES) (0) | 2019.11.28 |
댓글