[JBCS-httpd24-2.4] JBCS-httpd24-2.4 구성하기
본문 바로가기
IT 이야기/Apache

[JBCS-httpd24-2.4] JBCS-httpd24-2.4 구성하기

by 찬찬이 아빠 2019. 12. 26.
반응형
  1. 프로그램 다운로드

http://acess.redhat.com 

우선 레드햇에 로그인을 합니다.

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
반응형

댓글