IT. POST LIST
# cd /usr/local/src/APM_Setup/httpd-2.4.3/modules/filters # /usr/local/apache/bin/apxs -cia -Wl,"-lz" mod_deflate.c
# /usr/local/apache/bin/httpd -l mod_deflate.c
# vi /usr/local/apache/conf/httpd.conf <IfModule mod_deflate.c> AddType text/html .html .htm AddType text/css .css AddType application/xml .xml AddType application/javascript .js AddType application/x-httpd-php .php .php3 .html .htm .phtml .inc AddType application/x-httpd-php-source .phps AddOutputFilterByType DEFLATE text/plain text/html text/xml AddOutputFilterByType DEFLATE application/xhtml+xml application/xml application/rss+xml AddOutputFilterByType DEFLATE text/css application/javascript application/x-javascript AddOutputFilterByType DEFLATE application/json AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/php AddOutputFilterByType DEFLATE application/x-httpd-php AddOutputFilterByType DEFLATE application/x-httpd-fastphp #사용할 압축레벨을 선택, 값이 클수록 압축률이 증가하지만, CPU를 더 많이 사용함 DeflateCompressionLevel 9 # Netscape 4.xx에는 HTML만 압축해서 보냄 BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.06~4.08에는 압축해서 보내지 않음 BrowserMatch ^Mozilla/4\.0[678] no-gzip # 자신을 Mozilla로 알리는 MSIE에는 그대로 압축해서 보냄 BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # 압축하지 않을 파일들을 지정 SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|bmp|zip|tar|rar|alz|a00|ace|txt|mp3|mpe?g|wav|asf|wma|wmv|swf|exe|pdf|doc|xsl|hwp|java|c|t?gz|bz2|7z)$ no-gzip dont-vary </ifModule>
Request Headers - Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 - Accept-Encoding:gzip, deflate - Accept-Language:ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4 - Connection:keep-alive - Cookie:tbl_session=a%3A4%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%22dbe714132c740233f7c93526e7a11201%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A11%3A%22115.68.87.2%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A105%3A%22Mozilla%2F5.0+%28X11%3B+Linux+x86_64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F59.0.3071.115+Safari%2F537.36%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1501209037%3B%7D65560fd68b1e8de8e0b840836288bbe1a8ce9b42 - Host:mobile.ibabynews.com - If-Modified-Since:Fri, 28 Jul 2017 02:33:08 GMT - Referer:http://mobile.ibabynews.com/ - Upgrade-Insecure-Requests:1 - User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 - 적용 확인
* mod_url 이란?
아파치가 한글로된 파일을 인식 하게하는 모듈
예를들어 jpg파일이름이 영문이 아닌 한글 이름으로 되어있어도 그 jpg 파일을 불러드려 실행할 수 있다.
* mod_url 설치전 확인 사항
DSO 방식으로 설치된 APACHE 인지 확인 해야댐 ㅇㅇ
DSO 방식은 APACHE 서버가 컴파일 되었을때 구정 정보로 모듈을 컴파일 하여 APACHE EXTENSION 프
로그램인 apxs가 알아서 처리하여 Apache 모듈을 DSO(.so 파일)에 컴파일 한뒤 적절한 APACHE 구성
으로 설치할 수 있게 해 줌
DSO 설치 확인 방법
[root@hoguinside01:45:17]# /usr/local/apache/bin/httpd -l
파일은 요서 다운 받음 됨 ㅇㅇ
다운로드 : http://kldp.net/projects/modurl/download/note/2188
다운 받은 mod_url 파일의 압출을 해제
[root@hoguinside01:45:17]# tar xvfi mod_url-apache2-1.8.tar.bz2
mod_url 디렉토리로 이동하여 apxs로 모듈을 추가
[root@hoguinside01:45:17]#cd /usr/local/src/mod_url-apache2-1.8
[root@hoguinside01:45:17]# /usr/local/apache/bin/apxs -l -a -c mod_url.c
모듈이 생성 되었는지 확인
[root@hoguinside01:45:17]#ll /usr/local/apache/modules | grep mod_url.so
httpd.conf. 파일에 모듈이 추가 되어있는지 확인
[root@hoguinside01:45:17]#vi /usr/local/apache/conf/httpd.conf
mod_url 활성화
[root@hoguinside01:45:17]# vi /usr/local/apache/conf/httpd.conf
<ifModule mod_url.c>
CheckURL On
</ifModule>
conf 파일에 위의 문장 3줄을 아무곳에나 추가한다.
아파치 데몬 재 시작
[root@hoguinside01:45:17]# /usr/local/apache/bin/apachectl restart
아파치가 한글로된 파일을 인식 하게하는 모듈
예를들어 jpg파일이름이 영문이 아닌 한글 이름으로 되어있어도 그 jpg 파일을 불러드려 실행할 수 있다.
* mod_url 설치전 확인 사항
DSO 방식으로 설치된 APACHE 인지 확인 해야댐 ㅇㅇ
DSO 방식은 APACHE 서버가 컴파일 되었을때 구정 정보로 모듈을 컴파일 하여 APACHE EXTENSION 프
로그램인 apxs가 알아서 처리하여 Apache 모듈을 DSO(.so 파일)에 컴파일 한뒤 적절한 APACHE 구성
으로 설치할 수 있게 해 줌
DSO 설치 확인 방법
[root@hoguinside01:45:17]# /usr/local/apache/bin/httpd -l
파일은 요서 다운 받음 됨 ㅇㅇ
다운로드 : http://kldp.net/projects/modurl/download/note/2188
다운 받은 mod_url 파일의 압출을 해제
[root@hoguinside01:45:17]# tar xvfi mod_url-apache2-1.8.tar.bz2
mod_url 디렉토리로 이동하여 apxs로 모듈을 추가
[root@hoguinside01:45:17]#cd /usr/local/src/mod_url-apache2-1.8
[root@hoguinside01:45:17]# /usr/local/apache/bin/apxs -l -a -c mod_url.c
모듈이 생성 되었는지 확인
[root@hoguinside01:45:17]#ll /usr/local/apache/modules | grep mod_url.so
httpd.conf. 파일에 모듈이 추가 되어있는지 확인
[root@hoguinside01:45:17]#vi /usr/local/apache/conf/httpd.conf
mod_url 활성화
[root@hoguinside01:45:17]# vi /usr/local/apache/conf/httpd.conf
<ifModule mod_url.c>
CheckURL On
</ifModule>
conf 파일에 위의 문장 3줄을 아무곳에나 추가한다.
아파치 데몬 재 시작
[root@hoguinside01:45:17]# /usr/local/apache/bin/apachectl restart
mod_expires 이란
이 모듈은 서버 응답의 Expires HTTP 헤더와 Cache-Control HTTP 헤더의 max-age 지시어 설정을 조절한다.
만기일을 파일이 마직막 수정된 시간 혹은 클라이언트가 접속한 시간에 상대적으로 설정할 수 있다.
즉 디스크 상에 캐시영역을 확보하여 자주가는 사이트에 접속 할때 캐시영역에 보관되어 있지않은 사이트에 접
속 할때보다 더빨리 문서를 보여주게 되는데 이것은 부라우저가 이미 캐시역역에 사이트 문서들을 저장한 상태
에서 최종수정일자가 변경된 문서만을 요청해 브라우징 해주기 때문이다.
웹서버는 빠른 정보제공과 실행의 과부하을 덜 수 있는 수단으로 이기능들을 지원해야 한다.
mod_expires 설치전 확인사항
DSO(mod_so.c) 방식으로 설치된 APACHE 인지 확인 하셔야합니다.
DSO 방식은 APACHE 서버가 컴파일 되었을때 구성 정보로 모듈을 컴파일 하여 APACHE EXTENSION 프로그
램인 apxs가 알아서 처리하여 Apache 모듈을 DSO(.so 파일)에 컴파일 한뒤 적절한 APACHE 구성으로 설치
할 수 있게 해 줍니다.
DSO 설치 확인 방법
/usr/local/apache/bin/httpd -l
mod_expires 기본경로
일반적으로 mod_expires 는 아파치 기본 모듈에 포함되 어있습니다.
다운받은 아파치 디렉토리에 위치 하여있습니다.
설치전 아파치 디렉토리 경로를 확인합니다.
일반적인 경로
/usr/local/src/httpd-2.2.14/modules/metadata/mod_expires.c
mod_expires.c 설치
/usr/local/apache/bin/apxs -aic /usr/local/src/httpd-2.2.14/modules/metadata/mod_expires.c
(본 호구의경우 아파치 디렉토리 경로가(mod_expires.c 가들어있는 디렉토리리)/usr/local/src/APM_Setup/httpd- 2.2.17/modules/metadata ㅇㅇ)
Httpd.conf 에 내용(지시어)추가
LoadModule expires_module libexec/mod_expires.so
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault “access plus 1 month”
ExpiresByType application/javascript “access plus 1 month”
ExpiresByType text/css “access plus 1 month”
ExpiresByType image/jpeg “access plus 1 month”
ExpiresByType image/gif “access plus 1 month”
ExpiresByType image/png “access plus 1 month”
<Directory “/usr/local/apache/htdocs”>
ExpiresActive Off
</Directory>
</IfModule>
그외 지시어들
ExpiresByType application/x-javascript “access plus 1 month”
ExpiresByType text/css “access plus 1 month”
ExpiresByType image/jpeg “access plus 1 month”
ExpiresByType image/gif “access plus 1 month”
ExpiresByType image/png “access plus 1 month”
ExpiresByType image/bmp “access plus 1 month”
ExpiresByType image/cgm “access plus 1 month”
ExpiresByType image/tiff “access plus 1 month”
ExpiresByType video/mpeg “access plus 1 month”
ExpiresByType video/quicktime “access plus 1 month”
ExpiresByType video/x-msvideo “access plus 1 month”
ExpiresByType audio/basic “access plus 1 month”
ExpiresByType audio/midi “access plus 1 month”
ExpiresByType audio/mpeg “access plus 1 month”
ExpiresByType audio/x-aiff “access plus 1 month”
ExpiresByType audio/x-mpegurl “access plus 1 month”
ExpiresByType audio/x-pn-realaudio “access plus 1 month”
ExpiresByType audio/x-wav “access plus 1 month”
ExpiresByType application/x-shockwave-flash “access plus 1 month”
Virtualhost 설정(예를 들어 이미지 캐싱을 할달로 설정)
httpd-vhosts.conf 에 다음 내용을 추가
<Directory “/home/auction/www/img”> #DocumentRoot 경로
ExpiresActive On # on 또는 off
ExpiresByType image/jpeg “acces plus 1 month” #jpeg 캐싱 한달로 설정
ExpiresByType image/gif “acces plus 1 month” #gif 캐싱을 한달로 설정
</Directory>
mod_expires 모듈이 생성 되었는지 확인
cd /usr/local/apache/moddules
설정 적용을 위한 아파치 재시작
/usr/local/apache/bin/apachectl restart
파일과 설치 경로등은 설치 환경에 따라 다를 수 있습니다.
이 모듈은 서버 응답의 Expires HTTP 헤더와 Cache-Control HTTP 헤더의 max-age 지시어 설정을 조절한다.
만기일을 파일이 마직막 수정된 시간 혹은 클라이언트가 접속한 시간에 상대적으로 설정할 수 있다.
즉 디스크 상에 캐시영역을 확보하여 자주가는 사이트에 접속 할때 캐시영역에 보관되어 있지않은 사이트에 접
속 할때보다 더빨리 문서를 보여주게 되는데 이것은 부라우저가 이미 캐시역역에 사이트 문서들을 저장한 상태
에서 최종수정일자가 변경된 문서만을 요청해 브라우징 해주기 때문이다.
웹서버는 빠른 정보제공과 실행의 과부하을 덜 수 있는 수단으로 이기능들을 지원해야 한다.
mod_expires 설치전 확인사항
DSO(mod_so.c) 방식으로 설치된 APACHE 인지 확인 하셔야합니다.
DSO 방식은 APACHE 서버가 컴파일 되었을때 구성 정보로 모듈을 컴파일 하여 APACHE EXTENSION 프로그
램인 apxs가 알아서 처리하여 Apache 모듈을 DSO(.so 파일)에 컴파일 한뒤 적절한 APACHE 구성으로 설치
할 수 있게 해 줍니다.
DSO 설치 확인 방법
/usr/local/apache/bin/httpd -l
mod_expires 기본경로
일반적으로 mod_expires 는 아파치 기본 모듈에 포함되 어있습니다.
다운받은 아파치 디렉토리에 위치 하여있습니다.
설치전 아파치 디렉토리 경로를 확인합니다.
일반적인 경로
/usr/local/src/httpd-2.2.14/modules/metadata/mod_expires.c
mod_expires.c 설치
/usr/local/apache/bin/apxs -aic /usr/local/src/httpd-2.2.14/modules/metadata/mod_expires.c
(본 호구의경우 아파치 디렉토리 경로가(mod_expires.c 가들어있는 디렉토리리)/usr/local/src/APM_Setup/httpd- 2.2.17/modules/metadata ㅇㅇ)
Httpd.conf 에 내용(지시어)추가
LoadModule expires_module libexec/mod_expires.so
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault “access plus 1 month”
ExpiresByType application/javascript “access plus 1 month”
ExpiresByType text/css “access plus 1 month”
ExpiresByType image/jpeg “access plus 1 month”
ExpiresByType image/gif “access plus 1 month”
ExpiresByType image/png “access plus 1 month”
<Directory “/usr/local/apache/htdocs”>
ExpiresActive Off
</Directory>
</IfModule>
그외 지시어들
ExpiresByType application/x-javascript “access plus 1 month”
ExpiresByType text/css “access plus 1 month”
ExpiresByType image/jpeg “access plus 1 month”
ExpiresByType image/gif “access plus 1 month”
ExpiresByType image/png “access plus 1 month”
ExpiresByType image/bmp “access plus 1 month”
ExpiresByType image/cgm “access plus 1 month”
ExpiresByType image/tiff “access plus 1 month”
ExpiresByType video/mpeg “access plus 1 month”
ExpiresByType video/quicktime “access plus 1 month”
ExpiresByType video/x-msvideo “access plus 1 month”
ExpiresByType audio/basic “access plus 1 month”
ExpiresByType audio/midi “access plus 1 month”
ExpiresByType audio/mpeg “access plus 1 month”
ExpiresByType audio/x-aiff “access plus 1 month”
ExpiresByType audio/x-mpegurl “access plus 1 month”
ExpiresByType audio/x-pn-realaudio “access plus 1 month”
ExpiresByType audio/x-wav “access plus 1 month”
ExpiresByType application/x-shockwave-flash “access plus 1 month”
Virtualhost 설정(예를 들어 이미지 캐싱을 할달로 설정)
httpd-vhosts.conf 에 다음 내용을 추가
<Directory “/home/auction/www/img”> #DocumentRoot 경로
ExpiresActive On # on 또는 off
ExpiresByType image/jpeg “acces plus 1 month” #jpeg 캐싱 한달로 설정
ExpiresByType image/gif “acces plus 1 month” #gif 캐싱을 한달로 설정
</Directory>
mod_expires 모듈이 생성 되었는지 확인
cd /usr/local/apache/moddules
설정 적용을 위한 아파치 재시작
/usr/local/apache/bin/apachectl restart
파일과 설치 경로등은 설치 환경에 따라 다를 수 있습니다.
1. JDK 설치 (Java SE Development Kit)
우선 JDK 가 필요하므로 아래 주소에서 다운로드 받습니다.
http://java.sun.com/javase/downloads/index.jsp
[root@ppinde /usr/local/src]# tar zxvf jdk-7u5-linux-i586.tar.gz
압축이 풀린 디렉토리를 원하는 곳으로 이동
[root@ppinde /usr/local/src]# mv jdk1.7.0_05 /usr/local/jdk1.7
`jdk1.7.0_05′ -> `/usr/local/jdk1.7
2. 톰캣 설치
톰캣을 아래 주소에서 다운로드 합니다.
http://tomcat.apache.org/
압축푼 후 원하는 곳으로 이동시켜 줍니다.
[root@ppinde /usr/local/src]# tar zxvf apache-tomcat-6.0.35.tar.gz
[root@ppinde /usr/local/src]# mv apache-tomcat-6.0.35 /usr/local/tomcat
`apache-tomcat-6.0.35′ -> `/usr/local/tomcat’
[root@ppinde /usr/local/src]# ls -al /usr/local/tomcat/
합계 104
drwxr-xr-x 9 root root 4096 7월 16 23:25 .
drwxr-sr-x 21 root root 4096 7월 16 23:55 ..
-rw-r–r– 1 root root 37951 11월 28 2011 LICENSE
-rw-r–r– 1 root root 558 11월 28 2011 NOTICE
-rw-r–r– 1 root root 8680 11월 28 2011 RELEASE-NOTES
-rw-r–r– 1 root root 6670 11월 28 2011 RUNNING.txt
drwxr-xr-x 2 root root 4096 7월 16 23:25 bin
drwxr-xr-x 2 root root 4096 11월 28 2011 conf
drwxr-xr-x 2 root root 4096 7월 16 23:25 lib
drwxr-xr-x 2 root root 4096 11월 28 2011 logs
drwxr-xr-x 2 root root 4096 7월 16 23:25 temp
drwxr-xr-x 7 root root 4096 11월 28 2011 webapps
drwxr-xr-x 2 root root 4096 11월 28 2011 work
/etc/profile 환경설정 파일 맨 아래에 PATH 를 추가 해줍니다.
[root@ppinde /usr/local/src]# vi /etc/profile
#Tomcat Setting
export JAVA_HOME=/usr/local/jdk1.7
export CATALINA_HOME=/usr/local/tomcat
export PATH=$PATH:/usr/local/bin:$JAVA_HOME/bin:$CATALINA_HOME/bin
환경설정을 적용시켜 줍니다.
[root@ppinde /usr/local/src]# source /etc/profile
[root@ppinde /usr/local/src]# echo $JAVA_HOME
/usr/local/jdk1.7
[root@ppinde /usr/local/src]# echo $CATALINA_HOME
/usr/local/tomcat
로그 디렉토리, catalina.out 를 생성 해줍니다.
[root@ppinde /usr/local/src]# mkdir $CATALINA_HOME/logs
mkdir: `/usr/local/tomcat/logs’ 디렉토리를 만들 수 없습니다: 파일이 존재합니다
[root@ppinde /usr/local/src]# chmod 777 $CATALINA_HOME/logs
`/usr/local/tomcat/logs’의 모드를 0777(rwxrwxrwx)으로 변경하였습니다
[root@ppinde /usr/local/src]# touch $CATALINA_HOME/catalina.out
쉘 스크립트에 실행 권한을 줍니다
[root@ppinde /usr/local/src]# chmod +x $CATALINA_HOME/bin/*
`/usr/local/tomcat/bin/bootstrap.jar’의 모드를 0755(rwxr-xr-x)으로 변경하였습니다
`/usr/local/tomcat/bin/catalina-tasks.xml’의 모드를 0755(rwxr-xr-x)으로 변경하였
습니다
`/usr/local/tomcat/bin/catalina.bat’의 모드를 0755(rwxr-xr-x)으로 변경하였습니다
`/usr/local/tomcat/bin/catalina.sh’의 모드를 0755(rwxr-xr-x)으로 유지하였습니다
`/usr/local/tomcat/bin/commons-daemon-native.tar.gz’의 모드를 0755(rwxr-xr-x)
으로 변경하였습니다
`/usr/local/tomcat/bin/commons-daemon.jar’의 모드를 0755(rwxr-xr-x)으로 변경하
였습니다
`/usr/local/tomcat/bin/cpappend.bat’의 모드를 0755(rwxr-xr-x)으로 변경하였습니다
`/usr/local/tomcat/bin/digest.bat’의 모드를 0755(rwxr-xr-x)으로 변경하였습니다
`/usr/local/tomcat/bin/digest.sh’의 모드를 0755(rwxr-xr-x)으로 유지하였습니다
`/usr/local/tomcat/bin/setclasspath.bat’의 모드를 0755(rwxr-xr-x)으로 변경하였습
니다
`/usr/local/tomcat/bin/setclasspath.sh’의 모드를 0755(rwxr-xr-x)으로 유지하였습니
다
`/usr/local/tomcat/bin/shutdown.bat’의 모드를 0755(rwxr-xr-x)으로 변경하였습니다
`/usr/local/tomcat/bin/shutdown.sh’의 모드를 0755(rwxr-xr-x)으로 유지하였습니다
`/usr/local/tomcat/bin/startup.bat’의 모드를 0755(rwxr-xr-x)으로 변경하였습니다
`/usr/local/tomcat/bin/startup.sh’의 모드를 0755(rwxr-xr-x)으로 유지하였습니다
`/usr/local/tomcat/bin/tomcat-juli.jar’의 모드를 0755(rwxr-xr-x)으로 변경하였습니
다
`/usr/local/tomcat/bin/tomcat-native.tar.gz’의 모드를 0755(rwxr-xr-x)으로 변경하
였습니다
`/usr/local/tomcat/bin/tool-wrapper.bat’의 모드를 0755(rwxr-xr-x)으로 변경하였습
니다
`/usr/local/tomcat/bin/tool-wrapper.sh’의 모드를 0755(rwxr-xr-x)으로 유지하였습
니다
`/usr/local/tomcat/bin/version.bat’의 모드를 0755(rwxr-xr-x)으로 변경하였습니다
`/usr/local/tomcat/bin/version.sh’의 모드를 0755(rwxr-xr-x)으로 유지하였습니다
톰캣을 실행 해줍니다.
[root@ppinde /usr/local/src]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk1.7
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar
3. 톰캣 커넥터 mod_jk 모듈 설치
아파치와 연동하기 위한 mod_jk 모듈 설치
[root@ppinde /usr/local/src]# wget http://archive.apache.org/dist/tomcat/tomcatconnectors/
jk/binaries/linux/jk-1.2.31/i386/mod_jk-1.2.31-httpd-2.2.x.so
다운받은 JK커넥터를 아파치 모듈 디렉토리로 이동 시키면서 파일명을 변경합니다.
[root@ppinde /usr/local/src]# mv mod_jk-1.2.31-httpd-2.2.x.so
/usr/local/apache/modules/mod_jk.so
`mod_jk-1.2.31-httpd-2.2.x.so’ -> `/usr/local/apache/modules/mod_jk.so’
아파치 설정파일 httpd.conf 에서 아래와 같이 모듈 추가 설정을 합니다.
LoadModule jk_module modules/mod_jk.so
<IfModule mod_jk.c>
JkWorkersFile conf/workers.properties
JkShmFile logs/mod_jk.shm
JkLogFile logs/mod_jk.log
JkLogLevel info
JkLogStampFormat “[%a %b %d %H:%M:%S %Y]”
JkMount /* ajp13
</IfModule>
/usr/local/apache/conf/workers.properties 파일을 생성하여 아래 내용을 입력합니다.
workers.tomcat_home=/usr/local/tomcat // tomcat 설치 디렉토리
workers.java_home=/usr/java/jdk1.7 // java 설치 디렉토리
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
4. 구동 및 확인
httpd 및 tomcat 을 중지 시킨 후 아래 순서대로 다시 웹서버를 구동시킵니다.
tomcat 구동 > apache 구동
<VirtualHost *:80> 와 </VirtualHost> 사이에 아래 내용을 추가
Alias /jsp-examples “/usr/local/tomcat/webapps/examples/jsp/”
Alias /servlets-examples
“/usr/local/tomcat/webapps/examples/servlets/”
JkMount /jsp-examples/*.jsp default
JkMount /servlets-examples/*.jsp default
아파치 재시작
[root@ruo91 ~]# /usr/local/apache2/bin/apachectl restart
우선 JDK 가 필요하므로 아래 주소에서 다운로드 받습니다.
http://java.sun.com/javase/downloads/index.jsp
[root@ppinde /usr/local/src]# tar zxvf jdk-7u5-linux-i586.tar.gz
압축이 풀린 디렉토리를 원하는 곳으로 이동
[root@ppinde /usr/local/src]# mv jdk1.7.0_05 /usr/local/jdk1.7
`jdk1.7.0_05′ -> `/usr/local/jdk1.7
2. 톰캣 설치
톰캣을 아래 주소에서 다운로드 합니다.
http://tomcat.apache.org/
압축푼 후 원하는 곳으로 이동시켜 줍니다.
[root@ppinde /usr/local/src]# tar zxvf apache-tomcat-6.0.35.tar.gz
[root@ppinde /usr/local/src]# mv apache-tomcat-6.0.35 /usr/local/tomcat
`apache-tomcat-6.0.35′ -> `/usr/local/tomcat’
[root@ppinde /usr/local/src]# ls -al /usr/local/tomcat/
합계 104
drwxr-xr-x 9 root root 4096 7월 16 23:25 .
drwxr-sr-x 21 root root 4096 7월 16 23:55 ..
-rw-r–r– 1 root root 37951 11월 28 2011 LICENSE
-rw-r–r– 1 root root 558 11월 28 2011 NOTICE
-rw-r–r– 1 root root 8680 11월 28 2011 RELEASE-NOTES
-rw-r–r– 1 root root 6670 11월 28 2011 RUNNING.txt
drwxr-xr-x 2 root root 4096 7월 16 23:25 bin
drwxr-xr-x 2 root root 4096 11월 28 2011 conf
drwxr-xr-x 2 root root 4096 7월 16 23:25 lib
drwxr-xr-x 2 root root 4096 11월 28 2011 logs
drwxr-xr-x 2 root root 4096 7월 16 23:25 temp
drwxr-xr-x 7 root root 4096 11월 28 2011 webapps
drwxr-xr-x 2 root root 4096 11월 28 2011 work
/etc/profile 환경설정 파일 맨 아래에 PATH 를 추가 해줍니다.
[root@ppinde /usr/local/src]# vi /etc/profile
#Tomcat Setting
export JAVA_HOME=/usr/local/jdk1.7
export CATALINA_HOME=/usr/local/tomcat
export PATH=$PATH:/usr/local/bin:$JAVA_HOME/bin:$CATALINA_HOME/bin
환경설정을 적용시켜 줍니다.
[root@ppinde /usr/local/src]# source /etc/profile
[root@ppinde /usr/local/src]# echo $JAVA_HOME
/usr/local/jdk1.7
[root@ppinde /usr/local/src]# echo $CATALINA_HOME
/usr/local/tomcat
로그 디렉토리, catalina.out 를 생성 해줍니다.
[root@ppinde /usr/local/src]# mkdir $CATALINA_HOME/logs
mkdir: `/usr/local/tomcat/logs’ 디렉토리를 만들 수 없습니다: 파일이 존재합니다
[root@ppinde /usr/local/src]# chmod 777 $CATALINA_HOME/logs
`/usr/local/tomcat/logs’의 모드를 0777(rwxrwxrwx)으로 변경하였습니다
[root@ppinde /usr/local/src]# touch $CATALINA_HOME/catalina.out
쉘 스크립트에 실행 권한을 줍니다
[root@ppinde /usr/local/src]# chmod +x $CATALINA_HOME/bin/*
`/usr/local/tomcat/bin/bootstrap.jar’의 모드를 0755(rwxr-xr-x)으로 변경하였습니다
`/usr/local/tomcat/bin/catalina-tasks.xml’의 모드를 0755(rwxr-xr-x)으로 변경하였
습니다
`/usr/local/tomcat/bin/catalina.bat’의 모드를 0755(rwxr-xr-x)으로 변경하였습니다
`/usr/local/tomcat/bin/catalina.sh’의 모드를 0755(rwxr-xr-x)으로 유지하였습니다
`/usr/local/tomcat/bin/commons-daemon-native.tar.gz’의 모드를 0755(rwxr-xr-x)
으로 변경하였습니다
`/usr/local/tomcat/bin/commons-daemon.jar’의 모드를 0755(rwxr-xr-x)으로 변경하
였습니다
`/usr/local/tomcat/bin/cpappend.bat’의 모드를 0755(rwxr-xr-x)으로 변경하였습니다
`/usr/local/tomcat/bin/digest.bat’의 모드를 0755(rwxr-xr-x)으로 변경하였습니다
`/usr/local/tomcat/bin/digest.sh’의 모드를 0755(rwxr-xr-x)으로 유지하였습니다
`/usr/local/tomcat/bin/setclasspath.bat’의 모드를 0755(rwxr-xr-x)으로 변경하였습
니다
`/usr/local/tomcat/bin/setclasspath.sh’의 모드를 0755(rwxr-xr-x)으로 유지하였습니
다
`/usr/local/tomcat/bin/shutdown.bat’의 모드를 0755(rwxr-xr-x)으로 변경하였습니다
`/usr/local/tomcat/bin/shutdown.sh’의 모드를 0755(rwxr-xr-x)으로 유지하였습니다
`/usr/local/tomcat/bin/startup.bat’의 모드를 0755(rwxr-xr-x)으로 변경하였습니다
`/usr/local/tomcat/bin/startup.sh’의 모드를 0755(rwxr-xr-x)으로 유지하였습니다
`/usr/local/tomcat/bin/tomcat-juli.jar’의 모드를 0755(rwxr-xr-x)으로 변경하였습니
다
`/usr/local/tomcat/bin/tomcat-native.tar.gz’의 모드를 0755(rwxr-xr-x)으로 변경하
였습니다
`/usr/local/tomcat/bin/tool-wrapper.bat’의 모드를 0755(rwxr-xr-x)으로 변경하였습
니다
`/usr/local/tomcat/bin/tool-wrapper.sh’의 모드를 0755(rwxr-xr-x)으로 유지하였습
니다
`/usr/local/tomcat/bin/version.bat’의 모드를 0755(rwxr-xr-x)으로 변경하였습니다
`/usr/local/tomcat/bin/version.sh’의 모드를 0755(rwxr-xr-x)으로 유지하였습니다
톰캣을 실행 해줍니다.
[root@ppinde /usr/local/src]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk1.7
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar
3. 톰캣 커넥터 mod_jk 모듈 설치
아파치와 연동하기 위한 mod_jk 모듈 설치
[root@ppinde /usr/local/src]# wget http://archive.apache.org/dist/tomcat/tomcatconnectors/
jk/binaries/linux/jk-1.2.31/i386/mod_jk-1.2.31-httpd-2.2.x.so
다운받은 JK커넥터를 아파치 모듈 디렉토리로 이동 시키면서 파일명을 변경합니다.
[root@ppinde /usr/local/src]# mv mod_jk-1.2.31-httpd-2.2.x.so
/usr/local/apache/modules/mod_jk.so
`mod_jk-1.2.31-httpd-2.2.x.so’ -> `/usr/local/apache/modules/mod_jk.so’
아파치 설정파일 httpd.conf 에서 아래와 같이 모듈 추가 설정을 합니다.
LoadModule jk_module modules/mod_jk.so
<IfModule mod_jk.c>
JkWorkersFile conf/workers.properties
JkShmFile logs/mod_jk.shm
JkLogFile logs/mod_jk.log
JkLogLevel info
JkLogStampFormat “[%a %b %d %H:%M:%S %Y]”
JkMount /* ajp13
</IfModule>
/usr/local/apache/conf/workers.properties 파일을 생성하여 아래 내용을 입력합니다.
workers.tomcat_home=/usr/local/tomcat // tomcat 설치 디렉토리
workers.java_home=/usr/java/jdk1.7 // java 설치 디렉토리
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
4. 구동 및 확인
httpd 및 tomcat 을 중지 시킨 후 아래 순서대로 다시 웹서버를 구동시킵니다.
tomcat 구동 > apache 구동
<VirtualHost *:80> 와 </VirtualHost> 사이에 아래 내용을 추가
Alias /jsp-examples “/usr/local/tomcat/webapps/examples/jsp/”
Alias /servlets-examples
“/usr/local/tomcat/webapps/examples/servlets/”
JkMount /jsp-examples/*.jsp default
JkMount /servlets-examples/*.jsp default
아파치 재시작
[root@ruo91 ~]# /usr/local/apache2/bin/apachectl restart
apaceh 구동 불가 : [crit] (28)No space left on device: mod_rewrite: could not create rewrite_log_lock Configuration Failed
By 때찌때찌맴매 - 12월 04, 2013
[emerg] (28)No space left on device: Couldn’t create accept lock
[crit] (28)No space left on device: mod_rewrite: could not create rewrite_log_lock Configuration Failed
ipcs -s | grep nobody 를 쳐보면 세마포어 배열이 잔뜩 있는 것을 확인할 수 있다
ipcs -s | grep nobody | perl -e ‘while (<STDIN>) { @a=split(/\s+/); print `ipcrm sem $a[1]`}’ 를 하여서 세마포어 배열들을 죽이면 임시방편으로 해결이 가능한다.
다른 해결방안은 커널파라메터를 튜닝해서 최대세마포어배열수를 늘려주는 것인데,
ipcs -ls 해보면
—— Semaphore Limits ——–
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767
위처럼 128개로 되어 있다.
/proc/sys/kernel/sem 을 수정해서 최대세마포어배열수를 512나 적절히 늘려주면 된다.
echo 250 32000 100 512 > /proc/sys/kernel/sem
[alert] (EAI 2)Name or service not known: mod_unique_id: unable to find IPv4 address of ‘guguflower’
By 때찌때찌맴매 - 12월 03, 2013
Sun Mar 24 04:02:12 2013] [alert] (EAI 2)Name or service not known: mod_unique_id: unable to find IPv4 address of ‘guguflower’
Configuration Failed
hostname 이 ‘ gugu ‘ 로 해당 IP 에대한 원하는 호스트명으로 등록 되어 있지 않아 발생 하는 경우.
#vi /etc/hosts 에서 해당 호스트명으로 수정 하면됩니다.
Configuration Failed
hostname 이 ‘ gugu ‘ 로 해당 IP 에대한 원하는 호스트명으로 등록 되어 있지 않아 발생 하는 경우.
#vi /etc/hosts 에서 해당 호스트명으로 수정 하면됩니다.
Apache Multi-Processing Modules(MPM, 다중처리모듈)의 Prefork 와 Worker 방식의 비교
==> apache 서버가 클라이언트에게서 받아들인 요청을 처리하기 위해 “자식 process” 에게 분배하는 방식
Prefork 방식
– 하나의 자식 프로세스가 하나의 쓰레드를 갖는 구조로, 자식 프로세스는 1024까지 늘일 수 있다.
– 한개의 자식 프로세스는 한 개의 연결을 담당한다.
– 프로세스가 생성되는 구조이므로 당연히 worker보다는 많은 메모리를 사용함.
– 프로세스간 메모리를 직접 공유하지 않으므로, 메모리 공간이 독립적이어서 안정적임
httpd.conf에서 httpd-mpm.conf 파일을 include 시켜야 한다.
httpd-mpm.conf 파일에서
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
옵션 설명
StartServer: 아파치서버의 자식 프로세스 개수 지정
MinSpareServers, MaxSpareServers :
부하가 적어서 MinSpareServers 개수 보다 적었을 경우 최소한 이 개수 만큼 유지하려고 아파치가 노력하고
부하가 증가하여 프로세스 개수가 많아질 경우에 MaxSpareServers 개수 이하로 줄이려고 아파치는 노력한다.
즉, 절대적인 수치가 아니다.
MaxClient : 초기 시작시 실행가능한 최대 아파치 자식 프로세스의 개수를 지정
worker방식의 MaxClient 와는 전혀 다른 의미가 다르지만 결국 클라이언트의 요청을 처리하는 용량을 말하므로 사실상 유사.
MaxReqeustPerChild :클라이언트들의 요청 개수를 제한.
만약 자식 프로세스가 이 값만큼의 클라이언트 요청을 받았다면 이 자식 프로세스는 자동으로 죽게 된다.
0 인 경우 무한대임.
Maxclient 를 늘리기 위한 설정 ( Prefork 방식일 경우 )
1) apache 1.x 버전
Apache 소스 디렉토리/src/include/httpd.h 에서
define HARD_SERVER_LIMIT 256 —-> 512 혹은 1024 등으로 변경 저장후 컴파일
2) apache 2.x~ 2.2.x 버전
apache소스디렉토리/server/mpm/prefork/prefork.c 에서
define DEFAULT_SERVER_LIMIT 256 —-> 512 혹은 1024 등으로 변경후 재부팅
Worker 방식
– 자식 프로세스들이 여러개의 쓰레드를 갖을 수 있으며, 각 쓰레드는 한번에 한 연결을 담당함.
– Prefork보다 메모리 사용량이 적음. 통신량이 많은 서버에 적절함.
– 쓰레드 간에 메모리 공간을 공유함. 리소스 경합이 발생하지 않도록 주의 필요. 특히 PHP를 쓰는 경우 유의하여야 함.
httpd.conf에서 httpd-mpm.conf 파일을 include 시켜야 한다.
httpd-mpm.conf 파일에서
<IfModule mpm_worker_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
옵션 설명
StartServers(Default 3) : 시작시에 생성되는 서버 프로세스의 개수, 자식 프로세스의 수는 부하에 따라 동적으로 변경되기 때문에 이 값은 큰 의미가 없다.
ServerLimit (default : 16)
– 구성 가능한 child 프로세스의 제한 수.
– 이 ServerLimit 값이 필요 이상 높게 설정 된다면, 불필요한 공유 메모리가 할당 되므로 적절한 설정 필요.
– MaxClient 와 ThreadPerChild 에서 요구한 프로세스 수보다 높게 설정하지 말 것.
MaxClient (default : ServerLimit * ThreadsPerChild)
– 동시에 처리될 최대 커넥션(request)의 수
– MaxClients 수치를 초과한 후 온 요청들은 ListenBackLog에 의해 큐잉됨
– ThreadsPerChild 옵션과 매우 긴밀하게 작용함
– 동접자가 많을 경우, 이 MaxClient값을 증가시켜야 함.
– OS의 FD(File Descriptor)값을 증가 시켜 MaxClient 의 상한값을 증가시키도록 할 것.
MinSpareThreads(default 75) : 최소 thread 개수
– 만약 서버에 idle 쓰레드가 충분하지 않다면 child 프로세스는 idle 쓰레드가 MinSpareThreads 보다 커질때까지 생성된다.
MaxSpareThreads(default 250) : 최대 thread개수
– 만약 서버에 너무 많은 idle 쓰레드가 존재하면 child 프로세스는 idle 쓰레드가 MaxSpareThreads 수보다 작아질 때까지 죽는다
ThreadPerChild : 개별 자식 프로세스가 지속적으로 가질 수 있는 Thread의 개수
MaxRequestPerChild : 자식 프로세스가 서비스할 수 있는 최대 요청 개수
ThreadLimit (default : 64)
– child 프로세스의 라이프주기 동안 ThreadsPerChild 의 최대 설정값을 설정한다.
– ThreadLimit 가 ThreadsPerChild 보다 훨씬 높게 설정된다면, 여분의 미사용 공유 메모리가 할당될 것이다.
– ThreadLimit 과 ThreadsPerChild 모두 시스템이 감당할 수 있는 값 보다 높게 설정하면,
아파치가 기동되지 않거나 시스템이 불안정하게 될 수 있다.
– 이 값은 최대 예상 ThreadsPerChild 의 설정보다 높게 설정하면 안된다.
Maxclient 를 늘리기 위한 설정 ( Worker 방식일 경우 – 2.x버전에 한정됨)
1) Maxclient 는 StartServers * ThreadsPerChild 로 정해짐
( MaxClient = StartServer * ThreadsPerChild )
=> worker 방식은 각각의 자식프로세스별로 여러개의 thread를 생성해서 요청을 처리하기 때문
2) Maxclient 를 늘리기 위한 설정
apache소스디렉토리/server/mpm/worker/worker.c 파일 을 수정
( define DEFAULT_SERVER_LIMIT 16 값을 늘려준다 )
* 참고1.
대부분 prefork 방식이 기본적으로 사용되며, 사용자가 많은 경우에는 worker방식을 사용한다.
요즘 몇 몇 사이트에서 사용자 폭주로 인하여 worker 방식을 사용하는 경우가 간혹 있다.
*참고2.
apache 설치 시에 아래와 같이, 반드시 –with-mpm=worker 옵션을 설정 하고 설치한다.
이 옵션을 주지 않을 경우, Default인 Prefork방식으로 설치된다(Linux에 한함)
================================================================
./configure –prefix=/home/paint/apache-2.2.15 –enable-mods-shared=all –enable-module=so –enable-so –with-mpm=worker
================================================================
* 참고3.
현재 worker 모듈 설치 되었는지 확인하는 방법
– “httpd -l” 명령으로 현재 설치된 Apache가 worker방식으로 설치되었는지 확인할 수 있다.
============================================
# httpd -l
Compiled in modules:
core.c
worker.c <———————-요거임
http_core.c
mod_so.c
============================================
또는, httpd -V 명령으로 확인 가능하다. (V는 대문자)
============================================
# httpd -V
Server version: Apache/2.2.15 (Unix)
Server built: Jun 30 2010 16:59:45
Server’s Module Magic Number: 20051115:24
Server loaded: APR 1.4.2, APR-Util 1.3.9
Compiled using: APR 1.4.2, APR-Util 1.3.9
Architecture: 32-bit
Server MPM: Worker <————————요거
threaded: yes (fixed thread count)
forked: yes (variable process count)
Server compiled with….
-D APACHE_MPM_DIR=”server/mpm/worker”
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT=”/home/paint/apache-2.2.15″
-D SUEXEC_BIN=”/home/paint/apache-2.2.15/bin/suexec”
-D DEFAULT_SCOREBOARD=”logs/apache_runtime_status”
-D DEFAULT_ERRORLOG=”logs/error_log”
-D AP_TYPES_CONFIG_FILE=”conf/mime.types”
-D SERVER_CONFIG_FILE=”conf/httpd.conf”
[출처] [Apache 튜닝]apache prefork 와 worker 방식|작성자 부탄가스
부가설명
apache 2.2.x 버젼 까지는 위 내용에서 httpd-mpm.conf 에서 변경을 하면 출력 시 변경 값은 적용 됐다고 나오지만 실제로 서버는 반영을 안한다고 함
max-client 값은 반드시 재컴파일이 필요 하고, apaceh 2.4.x 버젼 부터는 위 문제가 해결 되어 httpd-mpm.conf 에서 변경 해도 적용 된다고 함
← Previous Post Next Post →
==> apache 서버가 클라이언트에게서 받아들인 요청을 처리하기 위해 “자식 process” 에게 분배하는 방식
Prefork 방식
– 하나의 자식 프로세스가 하나의 쓰레드를 갖는 구조로, 자식 프로세스는 1024까지 늘일 수 있다.
– 한개의 자식 프로세스는 한 개의 연결을 담당한다.
– 프로세스가 생성되는 구조이므로 당연히 worker보다는 많은 메모리를 사용함.
– 프로세스간 메모리를 직접 공유하지 않으므로, 메모리 공간이 독립적이어서 안정적임
httpd.conf에서 httpd-mpm.conf 파일을 include 시켜야 한다.
httpd-mpm.conf 파일에서
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
옵션 설명
StartServer: 아파치서버의 자식 프로세스 개수 지정
MinSpareServers, MaxSpareServers :
부하가 적어서 MinSpareServers 개수 보다 적었을 경우 최소한 이 개수 만큼 유지하려고 아파치가 노력하고
부하가 증가하여 프로세스 개수가 많아질 경우에 MaxSpareServers 개수 이하로 줄이려고 아파치는 노력한다.
즉, 절대적인 수치가 아니다.
MaxClient : 초기 시작시 실행가능한 최대 아파치 자식 프로세스의 개수를 지정
worker방식의 MaxClient 와는 전혀 다른 의미가 다르지만 결국 클라이언트의 요청을 처리하는 용량을 말하므로 사실상 유사.
MaxReqeustPerChild :클라이언트들의 요청 개수를 제한.
만약 자식 프로세스가 이 값만큼의 클라이언트 요청을 받았다면 이 자식 프로세스는 자동으로 죽게 된다.
0 인 경우 무한대임.
Maxclient 를 늘리기 위한 설정 ( Prefork 방식일 경우 )
1) apache 1.x 버전
Apache 소스 디렉토리/src/include/httpd.h 에서
define HARD_SERVER_LIMIT 256 —-> 512 혹은 1024 등으로 변경 저장후 컴파일
2) apache 2.x~ 2.2.x 버전
apache소스디렉토리/server/mpm/prefork/prefork.c 에서
define DEFAULT_SERVER_LIMIT 256 —-> 512 혹은 1024 등으로 변경후 재부팅
Worker 방식
– 자식 프로세스들이 여러개의 쓰레드를 갖을 수 있으며, 각 쓰레드는 한번에 한 연결을 담당함.
– Prefork보다 메모리 사용량이 적음. 통신량이 많은 서버에 적절함.
– 쓰레드 간에 메모리 공간을 공유함. 리소스 경합이 발생하지 않도록 주의 필요. 특히 PHP를 쓰는 경우 유의하여야 함.
httpd.conf에서 httpd-mpm.conf 파일을 include 시켜야 한다.
httpd-mpm.conf 파일에서
<IfModule mpm_worker_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
옵션 설명
StartServers(Default 3) : 시작시에 생성되는 서버 프로세스의 개수, 자식 프로세스의 수는 부하에 따라 동적으로 변경되기 때문에 이 값은 큰 의미가 없다.
ServerLimit (default : 16)
– 구성 가능한 child 프로세스의 제한 수.
– 이 ServerLimit 값이 필요 이상 높게 설정 된다면, 불필요한 공유 메모리가 할당 되므로 적절한 설정 필요.
– MaxClient 와 ThreadPerChild 에서 요구한 프로세스 수보다 높게 설정하지 말 것.
MaxClient (default : ServerLimit * ThreadsPerChild)
– 동시에 처리될 최대 커넥션(request)의 수
– MaxClients 수치를 초과한 후 온 요청들은 ListenBackLog에 의해 큐잉됨
– ThreadsPerChild 옵션과 매우 긴밀하게 작용함
– 동접자가 많을 경우, 이 MaxClient값을 증가시켜야 함.
– OS의 FD(File Descriptor)값을 증가 시켜 MaxClient 의 상한값을 증가시키도록 할 것.
MinSpareThreads(default 75) : 최소 thread 개수
– 만약 서버에 idle 쓰레드가 충분하지 않다면 child 프로세스는 idle 쓰레드가 MinSpareThreads 보다 커질때까지 생성된다.
MaxSpareThreads(default 250) : 최대 thread개수
– 만약 서버에 너무 많은 idle 쓰레드가 존재하면 child 프로세스는 idle 쓰레드가 MaxSpareThreads 수보다 작아질 때까지 죽는다
ThreadPerChild : 개별 자식 프로세스가 지속적으로 가질 수 있는 Thread의 개수
MaxRequestPerChild : 자식 프로세스가 서비스할 수 있는 최대 요청 개수
ThreadLimit (default : 64)
– child 프로세스의 라이프주기 동안 ThreadsPerChild 의 최대 설정값을 설정한다.
– ThreadLimit 가 ThreadsPerChild 보다 훨씬 높게 설정된다면, 여분의 미사용 공유 메모리가 할당될 것이다.
– ThreadLimit 과 ThreadsPerChild 모두 시스템이 감당할 수 있는 값 보다 높게 설정하면,
아파치가 기동되지 않거나 시스템이 불안정하게 될 수 있다.
– 이 값은 최대 예상 ThreadsPerChild 의 설정보다 높게 설정하면 안된다.
Maxclient 를 늘리기 위한 설정 ( Worker 방식일 경우 – 2.x버전에 한정됨)
1) Maxclient 는 StartServers * ThreadsPerChild 로 정해짐
( MaxClient = StartServer * ThreadsPerChild )
=> worker 방식은 각각의 자식프로세스별로 여러개의 thread를 생성해서 요청을 처리하기 때문
2) Maxclient 를 늘리기 위한 설정
apache소스디렉토리/server/mpm/worker/worker.c 파일 을 수정
( define DEFAULT_SERVER_LIMIT 16 값을 늘려준다 )
* 참고1.
대부분 prefork 방식이 기본적으로 사용되며, 사용자가 많은 경우에는 worker방식을 사용한다.
요즘 몇 몇 사이트에서 사용자 폭주로 인하여 worker 방식을 사용하는 경우가 간혹 있다.
*참고2.
apache 설치 시에 아래와 같이, 반드시 –with-mpm=worker 옵션을 설정 하고 설치한다.
이 옵션을 주지 않을 경우, Default인 Prefork방식으로 설치된다(Linux에 한함)
================================================================
./configure –prefix=/home/paint/apache-2.2.15 –enable-mods-shared=all –enable-module=so –enable-so –with-mpm=worker
================================================================
* 참고3.
현재 worker 모듈 설치 되었는지 확인하는 방법
– “httpd -l” 명령으로 현재 설치된 Apache가 worker방식으로 설치되었는지 확인할 수 있다.
============================================
# httpd -l
Compiled in modules:
core.c
worker.c <———————-요거임
http_core.c
mod_so.c
============================================
또는, httpd -V 명령으로 확인 가능하다. (V는 대문자)
============================================
# httpd -V
Server version: Apache/2.2.15 (Unix)
Server built: Jun 30 2010 16:59:45
Server’s Module Magic Number: 20051115:24
Server loaded: APR 1.4.2, APR-Util 1.3.9
Compiled using: APR 1.4.2, APR-Util 1.3.9
Architecture: 32-bit
Server MPM: Worker <————————요거
threaded: yes (fixed thread count)
forked: yes (variable process count)
Server compiled with….
-D APACHE_MPM_DIR=”server/mpm/worker”
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT=”/home/paint/apache-2.2.15″
-D SUEXEC_BIN=”/home/paint/apache-2.2.15/bin/suexec”
-D DEFAULT_SCOREBOARD=”logs/apache_runtime_status”
-D DEFAULT_ERRORLOG=”logs/error_log”
-D AP_TYPES_CONFIG_FILE=”conf/mime.types”
-D SERVER_CONFIG_FILE=”conf/httpd.conf”
[출처] [Apache 튜닝]apache prefork 와 worker 방식|작성자 부탄가스
부가설명
apache 2.2.x 버젼 까지는 위 내용에서 httpd-mpm.conf 에서 변경을 하면 출력 시 변경 값은 적용 됐다고 나오지만 실제로 서버는 반영을 안한다고 함
max-client 값은 반드시 재컴파일이 필요 하고, apaceh 2.4.x 버젼 부터는 위 문제가 해결 되어 httpd-mpm.conf 에서 변경 해도 적용 된다고 함
← Previous Post Next Post →
Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden:xxx/xxx/xx…
By 때찌때찌맴매 - 12월 03, 2013
Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden:xxx/xxx/xxxx.html
요 관련 에러… 해당 폴더에 .htaccess 파일 찾아 보자…ㅋㅋㅋㅋㅋ 아… 일단 그거 부터..ㅋㅋㅋ 없으면 다른데서 걍 복사해서 가져다가 넣어 버리센
요 관련 에러… 해당 폴더에 .htaccess 파일 찾아 보자…ㅋㅋㅋㅋㅋ 아… 일단 그거 부터..ㅋㅋㅋ 없으면 다른데서 걍 복사해서 가져다가 넣어 버리센
[crit] (28)No space left on device: mod_rewrite: could not create rewrite_log_lock Configuration Failed(아파치데몬안올라옴)
By 때찌때찌맴매 - 12월 03, 2013
merg] (28)No space left on device: Couldn’t create accept lock
[crit] (28)No space left on device: mod_rewrite: could not create rewrite_log_lock Configuration Failed
ipcs -s | grep nobody 를 쳐보면 세마포어 배열이 잔뜩 있는 것을 확인할 수 있다. =_=;
ipcs -s | grep nobody | perl -e ‘while (<STDIN>) { @a=split(/\s+/); print `ipcrm sem $a[1]`}’ 를 하여서 세마포어 배열들을 죽이면 임시방편으로 해결이 가능한다.
다른 해결방안은 커널파라메터를 튜닝해서 최대세마포어배열수를 늘려주는 것인데,
ipcs -ls 해보면
—— Semaphore Limits ——–
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767
위처럼 128개로 되어 있다.
/proc/sys/kernel/sem 을 수정해서 최대세마포어배열수를 512나 적절히 늘려주면 된다.
echo 250 32000 100 512 > /proc/sys/kernel/sem
[crit] (28)No space left on device: mod_rewrite: could not create rewrite_log_lock Configuration Failed
ipcs -s | grep nobody 를 쳐보면 세마포어 배열이 잔뜩 있는 것을 확인할 수 있다. =_=;
ipcs -s | grep nobody | perl -e ‘while (<STDIN>) { @a=split(/\s+/); print `ipcrm sem $a[1]`}’ 를 하여서 세마포어 배열들을 죽이면 임시방편으로 해결이 가능한다.
다른 해결방안은 커널파라메터를 튜닝해서 최대세마포어배열수를 늘려주는 것인데,
ipcs -ls 해보면
—— Semaphore Limits ——–
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767
위처럼 128개로 되어 있다.
/proc/sys/kernel/sem 을 수정해서 최대세마포어배열수를 512나 적절히 늘려주면 된다.
echo 250 32000 100 512 > /proc/sys/kernel/sem
httpd (pid xxxx) already running or (20014)Error string not specified yet: Error retrieving pid file logs/httpd.pid
By 때찌때찌맴매 - 12월 03, 2013
[root@ logs]# /usr/local/apache/bin/apachectl start
httpd (pid 2445) already running
[root@yahocar logs]# ps -ef |grep httpd
root 3088 1 0 15:49 ? 00:00:00 /usr/local/apache/bin/httpd -k start
nobody 3089 3088 0 15:49 ? 00:00:00 /usr/local/apache/bin/httpd -k start
nobody 3090 3088 2 15:49 ? 00:00:05 /usr/local/apache/bin/httpd -k start
nobody 3092 3088 1 15:49 ? 00:00:05 /usr/local/apache/bin/httpd -k start
/usr/local/apache/logs/httpd.pid 해당 pid 값 입력 3088 <— 엄마 프로세스 pid 값
(20014)Error string not specified yet: Error retrieving pid file logs/httpd.pid
/usr/local/apache/logs/httpd.pid 파일 백업후 프로세스 장제 종료 후 재구동 합니다.
httpd (pid 2445) already running
[root@yahocar logs]# ps -ef |grep httpd
root 3088 1 0 15:49 ? 00:00:00 /usr/local/apache/bin/httpd -k start
nobody 3089 3088 0 15:49 ? 00:00:00 /usr/local/apache/bin/httpd -k start
nobody 3090 3088 2 15:49 ? 00:00:05 /usr/local/apache/bin/httpd -k start
nobody 3092 3088 1 15:49 ? 00:00:05 /usr/local/apache/bin/httpd -k start
/usr/local/apache/logs/httpd.pid 해당 pid 값 입력 3088 <— 엄마 프로세스 pid 값
(20014)Error string not specified yet: Error retrieving pid file logs/httpd.pid
/usr/local/apache/logs/httpd.pid 파일 백업후 프로세스 장제 종료 후 재구동 합니다.
httpd (을)를 시작 중: httpd: bad user name apache
[실패]
vi /etc/passwd
apache:x:48:48:Apache:/var/www:/sbin/nologin —>등록
vi /etc/group
apache:x:48: —>등록
두곳에서 apache 가 없을 경우 등록
service httpd start 정상 확인
주의)
yum 설치시 해당
소스 설치를 했을경우 절대 경로를 통해서 구동
ex) /usr/local/apache/bin/apachectl start
[실패]
vi /etc/passwd
apache:x:48:48:Apache:/var/www:/sbin/nologin —>등록
vi /etc/group
apache:x:48: —>등록
두곳에서 apache 가 없을 경우 등록
service httpd start 정상 확인
주의)
yum 설치시 해당
소스 설치를 했을경우 절대 경로를 통해서 구동
ex) /usr/local/apache/bin/apachectl start