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
아파치 데몬 다운현상([error] child process xxxxxxx still did not exit, sending a SIGKILL)
By 때찌때찌맴매 - 12월 03, 2013
[error] child process xxxxxxx still did not exit, sending a SIGKILL
The error “child process xxxxx still did not exit, sending a SIGTERM” means that the child processes were not terminated, and a SIGTERM(Signal: Terminate – default signal to kill a process) was sent.
자식 프로세스가 죽지않아 프로세스를 죽이는 신호를 보냈다.
This error can occur due to various reasons such as running buggy scripts, lack of space/memory, a rewrite loop, etc.
문제는 여러가지가 있는데, 스크립트의 버그, 메모리 문제, 리라이트 루프(a.html로 접속했을때 b.html로 접속하고, b.html에서 a.html로 접속하도록 rewriteRule 등이 설정되어 있을때), 기타 등등이 있습니다.
/etc/init.d/apache restart (service httpd stop) 시 데몬이 중지가 되지 않을시 pkill -9 httpd 명령어르 사용해 강제로 프로세스 종료 후 데몬 재시작 하면 OK
The error “child process xxxxx still did not exit, sending a SIGTERM” means that the child processes were not terminated, and a SIGTERM(Signal: Terminate – default signal to kill a process) was sent.
자식 프로세스가 죽지않아 프로세스를 죽이는 신호를 보냈다.
This error can occur due to various reasons such as running buggy scripts, lack of space/memory, a rewrite loop, etc.
문제는 여러가지가 있는데, 스크립트의 버그, 메모리 문제, 리라이트 루프(a.html로 접속했을때 b.html로 접속하고, b.html에서 a.html로 접속하도록 rewriteRule 등이 설정되어 있을때), 기타 등등이 있습니다.
/etc/init.d/apache restart (service httpd stop) 시 데몬이 중지가 되지 않을시 pkill -9 httpd 명령어르 사용해 강제로 프로세스 종료 후 데몬 재시작 하면 OK
vim /usr/local/apache/build/config.nice
ex) xxxx.co.kr , xxxx.com 으로 접속 시 www.xxxx.com 으로 이동
ssl 설치 후 보안 인증이 잘 되지 않아 사용해 봤습니다.
기존 가상 호스트 여러개 사용 중 일때
#################### 가상호스트
<VirtualHost *:80>
ServerAdmin xxxx.com
DocumentRoot ‘E:/PansyMall_xxxx’
ServerName xxxx.com
ServerAlias www.xxxx.com
ErrorLog ‘logs/xxxx.Error.log’
CustomLog ‘logs/xxxx.Custom.log’ common
Redirect / http://www.xxxx.com
</VirtualHost>
##################### 가상호스트
<VirtualHost *:80>
ServerAdmin www.xxxx.co.kr
DocumentRoot ‘E:/PansyMall_xxxx’
ServerName www.xxxx.co.kr
ServerAlias www.xxxx.com
ErrorLog ‘logs/xxxx.Error.log’
CustomLog ‘logs/xxxx.Custom.log’ common
Redirect / http://www.xxxx.com
</VirtualHost>
##################### 가상호스트
<VirtualHost *:80>
ServerAdmin laseanmom.co.kr
DocumentRoot ‘E:/PansyMall_xxxx’
ServerName xxxx.co.kr
ServerAlias www.xxxx.com
ErrorLog ‘logs/xxxx.Error.log’
CustomLog ‘logs/xxxx.Custom.log’ common
Redirect / http://www.xxxx.com
</VirtualHost>
==================================================
기존에 있는 것으로 사용 가능
<VirtualHost *:80>
ServerName xxxx.co.kr ———> # 입력하면 연결되면서 주소가 아래(Redirect)로 변경
ServerAlias www.xxxx.com
Redirect / http://www.xxxx.com ——>url 입력창에 나오는 주소
</VirtualHost>
httpd.conf 버전에 따라 옵션이라든지 디렉토리 구조가 좀 틀린듯 하다.
ServerTokens OS
– 클라이언트 요청에 되돌려주는 정보에 웹서버의 OS에 대한 정보를 클라이언트에게 보여줌
– ServerTokens Prod : 정보보여주지 않는다??
ServerTokens min
– 클라이언트 요청에 최소한의 정보만을 클라이언트에게 보여줌
ServerRoot “/usr/local/apache”
– 웹서버의 본체가 있는 디렉토리 소스설치하거나 rpm 으로 설치한 경우 경로가 틀려질수도 ㅋㅋ
PidFile run/httpd.pid
– 웹 프로세스의 PID를 기록할 파일의 위치를 설정 (뭔지 모르겠네 ㅋ)
Timeout 300
– 클라이언트가 300초후에 접속 끊겠다 아마 응답이 없으면 5분에 끊어지는듯
KeepAlive Off
– 클라이언트의 지속적인 접속 허용여부 결정 (디폴트는 Off)
– OFF 의 경우 클라이언트의 요청이 있은후 접속이 끊어지고 클라이언트 요청시 다시 접속하게 됨
– ON의 경우 클라이언트 요청시 다시 접속하는 과정이 생략 되어서 좋다는데 모르겠음 좋은지 ㅋ
– 한번 접속후 많은 통신이 이루어지는 서버의 경우 On 이 유리할지도 모름 (자원소모가 있다네)
MaxKeepAliveRequests 100 (Keepalive 가 On일때만 유효함)
– 클라이언트가 접속되어 있을시 웹서버에 요청할수 있는 최대 횟수
– 100이면 클라이언트의 요청을 받으면 끊고 다시 접속하게 하여 웹 서비스 처리 (프로세스가 100번의 요청이 들어오면 자신은 죽고
다음 프로세스가 다시 클라이언트 요청을 받아서 처리)
– 0은 제한 없음을 의미하며 클라이언트가 접속을 끊지 않는 이상 계속 연결되게 할려고 할거임
– MaxClients 제한 이상의 연결시도는 보통 ListenBacklog 지시자에 설정된 수까지 대기
KeepAliveTimeout 15
– 클라이언트가 서버에 접속한 이후 15초동안 요청이 없다면 서버가 클라이언트 접속을 끊음 (일종의 대기시간)
– 60초 이상 설정 하지 말라네요.
그냥 디폴트의 아파치라면 prefork MPM 방식
– 미리 프로세스를 띠우고 있다가 요청이 있을시 자식프로세스를 생성하여 서비스 해주는 방식
StartServer
– 웹 서버가 시작할때 자식 프로세스 수를 지정 (아파치 시작후 ps -ef | grep httpd 하면 확인 가능)
– MinSpareServers, MaxSpareServers 등의 지시자에 의해서 프로세스는 생성되기도 하고 죽기도 하므로 큰 의미 없다고 함
MinSpareServers / MaxSpareServers
– MinSpareServers 수 보다 자식프로세스가 적으면 설정된 값만큼 자식프로세스 생성 (항상 대기하고 있을 프로세스 최소 갯수)
– MaxSpareServers 수 보다 많다면 만들어진 자식프로세스 중에 일부를 끝내어 버림 (항상 대기하고 있을 프로세스 최대 갯수)
ServerLimit
– 웹서버 운영중에 만들수 있는 자식프로세스의 한도를 지정
MaxClient
– 클라이언트들이 동시에 최대로 접속했을때 실행할수 있는 자식프로세스의 최대값 결정
MaxRequestPerChild
– 웹서버가 실행된후 자식 프로세스가 처리하는 최대 연결 요청 (하나의 프로세스당 최대 처리할수 있는 방문자 요청 횟수)
– 0인 경우 한번 실행된 웹서버의 자식 프로세스는 결코 죽지 않아 속도가 빨라짐?, 오류가 생기면 뒤지지 않음ㅋ
Listen 80
– 아이피 주소 지정하면 해당하는 아이피로만 들어오는 80번의 응답을 기다림
– 쿨하게 그냥 80만 적자
Include conf.d/*.conf
– 아파치 웹서버의 설정파일의 위치
User apache
Group apache
– 웹서버의 데몬 자식 프로세스의 사용그룹 지정
– Root 계정으로 실행된 다음 apache 라는 사용자 권한으로 사용자 권한으로 자식 프로세스 생성
– 보안때문에 설정된것. 웹 프로세스를 해킹하더라도 apache 권한 밖에 못 얻음 (root를 보호하자)
#ExtendedStatus On
– server_status 항목을 이용해서 서버의 상태를 보여주는 웹문서에 어떤 정보를 표시할것인지 설정
– 확장정보를 On으로 해놓으면 수집해야하는 부분이 있으므로 부화 생길지도 디폴트가 off, 주석처리 되어 있네
DSO (Dynamic Shared Object) 동적 공유 객체? (기능을 확장해주는것을 모듈화 해서 제공함)
– LoadModules 모듈을 실행하기 위한 항목
– modules 디렉토리 안에 있지 싶음
ServerAdmin takakocap@kensei.co.kr
– 서버 문제 발생시 보낼 관리자 메일 지정
ServerName kensei.co.kr
– 웹 서버 이름 지정
UseCanonicaName Off
– 아파치 웹 서버가 자신을 가르키는 URL 주소를 구성할껀지 결정
– ServerName:port 형식으로 웹서비스 한다는데 무슨 말인지 모르겠음
DocumentRoot “/var/www/html”
– 웹 문서 디렉토리의 결로 지정 ( 웹 문서의 Root 디렉토리)
<Directory /> ~ </Directory>
– 디렉토리를 제어하기 위한 구문 (Root 디렉토리에 대한 설정)
– 하위 디렉토리에 까지 적용되므로 공통적으로 적용되는 내용이라고 보면 됨
Options FollowSymLinks
– 클라이언트가 심볼릭 링크를 따라 이동할수 없게 하는 옵션
AllowOverride None
– 각각의 디렉토리에 접근 권한을 설정할때 필요한 옵션 (설정된 아파치 환경설정을 무시하고 새로운 설정을 적용하는 방법)
– 웹 문서를 제공하는 디렉토리에서 (.htaccess) 파일을 찾으면 이 파일로 디렉토리 접근을 재설정을 허용할지 결정
– None 값은 보안을 위해 설정 내용을 변경하지 못하게 하고 있음?
아파치는 /.htaccess, /www/.htaccess, /www/htdocs/.htaccess를 매번 열려고 시도한다.
최고의 성능을 얻으려면 항상 AllowOverride None을 사용하자.
AuthConfig
AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, require 등과 같은 클라이언트
인증지시자의 사용을 허용.
FileInfo
AccessFileName 으로 지정한 파일에 대하여 AddEncoding, AddLanguage, AddType,
DefaultType, ErrorDocument, LanguagePriority 등과같은 문서유형을 제어하는 지시자 사용을 허용
Indexes
AccessFileName 으로 지정한 파일에 대하여 AddDescription, AddIcon,
AddIconByEncoding, DirectoryIndex, FancyIndexing 등과같은 디렉토리 인덱싱을 제어하는
지시자 사용을 허용
Limit
AccessFileName 으로 지정한 파일에 대하여 allow, deny, order 같은 호스트접근을 제어하는 지시자사용을 허용
Options
AccessFileName 으로 지정한 파일에 대하여 Options 지시자를 이용한 재설정을 허용
All
위에서 이야기한 모든 것을 허용
None
AccessFileName 으로 지정한 파일을 무시. 어떠한 설정도 재설정 할 수 없다.
<Directory “var/www/html”> ~ </Directory>
– 특정디렉토리에 대한 설정을 하는 부분임
indexes
– 시작 웹 문서 파일인 인덱스 파일이 없을때 디렉토리에 있는 파일 내용 보여줄것이다라는? 옵션
AllowOverride None
– 위에 꺼랑 같은 옵션 내용임
Order
– 디렉토리 접근 권한을 위한 지시자
allow, deny
– 디렉토리에 접근에 대해 먼저 허용하고 그 다음이 거부하겠다 (순서에 따라서 ㅋㅋ)
Allow from all
– 모든곳에서 들어오는 접속을 허용
– all 대신에 특정 도메인도 넣을수 있다
EnableMMAP
커널에서 메모리매핑(mmap)을 지원한다면 아파치가 웹문서를 로딩하기 위하여 내부문서를 읽을때에 파일을 메모리 매핑하여 처리
메모리대응이 서버의 성능을 떨어트리고 심지어 안정성을 해치는 경우
또한 NFS 마운트한 파일시스템에 있는 파일을 메모리 대응하는 도중에 다른 NFS 클라이언트에 있는 프로세스가 파일을 지우거나
파일크기를 줄이면, 웹서버 프로세스가 다음 번에 메모리대응한 파일내용을 읽을때 bus error가 발생할 수 있다
되도록이면 off 하자
UserDir public_html
UserDir disable
– Root 계정이외에 사용자가 자기 계정에 해당하는 웹서버의 기본 디렉토리를 public_html으로 지정함
– 계정별로 웹 서비스를 지정할수 있는 옵션부분임 (아마 웹 호스팅?)
– 디폴트가 주석처리이고 disable임
DirectoryIndex index.php index.html 18nom.html ……
– 처음에 보여줄 웹 문서 지정 (순차적으로 적어주자 먼저 보여줄것)
– 지정되어 있지 않으면 파일 목록을 보여주거나 403 Forbidden 오류 메세지 출력
– 완전한 파일명을 명시하며 자주 쓰이는 것 부터 먼저 명시
AccessFileName .htaccess
– 디렉토리 사용자인증에 필요한 파일을 지정
<Files ~ “^\.ht”> ~ </Files>
– 파일에 대한 접근을 제어하기 위한 부분. 여기서는 *.ht 로 시작되는 확장자에 대한 파일에 대한 제어 부분임
– 디폴트로 Deny from all 로 되어있다. 웹 클라이언트가 이 부분 수정하면 조때죠…
TypesConfig /etc/mime.types
– /etc/mime.types 에는 파일 확장자가 거기에 대응하는 컨텐츠 유형이 설정되어 있음
– 서버가 클라이언트의 요청에 응답할때 시작 부분에 MIME 정보 함께 전송하여 이에 클라이언트에
이를 재생하기 위해 적절한 응용프로그램을 선택할수 있게 한다
DefaultType text/plain
– 웹서버가 알지 못하는 MIME 유형 제공할때 디폴트가 text/plain 의 유형으로 지정 (뭔지는 모름 텍스트??)
MIMEmagicFile conf/magic
– 클라이언트에게 제공할 파일의 내용을 통해 MIME 유형을 결정할때 힌트를 얻을수 있다??
– 사용할 리도 없겠지만 httpd.conf에 Loadmodule mime_magic_module modules/mod_mime_magic.so 적어준다.
HostnameLookups Off
– 웹서버가 로그정보를 기록할때 클라이언트들의 IP들을 DNS에 질의해서 도메인으로 남길지 설정
– 도메인으로 변경할때 성능저하를 가지고 올수 있음 ( 할 이유가 없다 따로 질의해봐도 되니깐 ㅋ)
ErrorLog “/var/log/httpd/erroe_log”
– 아파치 에러로그 남길 파일 지정
LogLevel warn
– 로그를 기록할 수준 선택 (debug, info, notice, warn, error, crit → 이쪽 순으로 갈수록 간단하게 남김)
LogFormat 에서 접속로그를 기록할 형식을 결정
CustomLog 에서 원하는 형식의 로그 기록 방식을 선택
– %h : host
– %i : ident
– %u : authuser
– %t : date and time
– %r : request
– %>s : status
– %b : byte
로그포맷을 아래와 같이 뒤에 이름을 붙여서 설정도 가능함…
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” common
LogFormat “%v %{X-Forwarded-For}i %l %u %t \”%r\” %>s %b” X-Forwarded-For
LogFormat “%v %{X-Forwarded-For}i %l %u %t \”%r\” %>s %b %{GEOIP_COUNTRY_CODE}e” KENSEI
vhost 설정 부분에서 아래와 같이 httpd.conf에서 지정한 로그포맷 이름을 주어서 로그 생성가능
CustomLog “logs/kensei.co.kr-access_log” KENSEI
이미지 파일 등은 로그 남기지 않기
SetEnvIfNoCase Request_URI “\.(swf|png|gif|jpg|jpeg|js|css|mpg|mpeg|ico)$” NO_LOG
CustomLog logs/access_log combined env=!NO_LOG
임의의 아이피 로그 남기지 않기
SetEnvIf Remote_Addr “^100.100.100.100$” NO_LOG
아예 로그 남기지 않기
– CustomLog 설정 하지 않을시 그냥 access.log 로 (디폴트)로 남기게 될것임
CustomLog /dev/null combined
Alias /icons/ “/var/www/icons/”
– DocumentRoot 이외의 다른 디렉토리에서도 웹 문서를 서비스 할수 있게 디렉토리 경로에 별칭 부여
– 별칭을 부여한다면 웹 문서에서 /icons/파일이름 으로 사용가능함
<Directory “/var/www/icons/”> ~ </Directory> 지시자를 통해 웹 문서에 제공할 디렉토리에 대한 속성 정의
ScriptAlias /cgi-bin/ “/usr/local/apache/cgi-bin/”
– 위와 같이 별칭부여의 한가지이며 별칭을 CGI 스크립트로 인식한다는 점
<Directory “/usr/local/apache/cgi-bin”> ~ </Directory> 를 통해 CGI 스크립트를 제공할 디렉토리 속성 정의
*. CGI : Common Gateway Interface
– 웹서버에서 외부의 프로그램을 실행하고 그 결과를 받아오기 위한 규약
– 웹 컨텐츠를 동적으로 만드는데 이용됨 ex) 게시판 방명록 등등….
# Redirect permanent /foo http://www.example.com/bar
– 웹도메인이 변경되었을때 기존도메인으로 들어온다면 새로운 웹 주소의 문서를 제공해준다.
IndexOptions FancyIndexing VersionSort NameWidth=*
– DocumentRoot 디렉토리에 DirectoryIndex 항목에서 설정한 시작문서가 없다면 디렉토리의 파일목록을 보여주는데
이때 각 파일들을 어떤 형식으로 보여줄지 결졍
FancyIndexing
– 파일의 아이콘, 파일크기, 파일이 수정된 시간을 보여줌
VersionSort
– 파일의 버전순으로 정렬하여 보여줌
NameWidth=*
– 출력되는 파일 목록의 열의 폭을 필요한 만큼 늘림
/conf.d/welcome.conf
– 웹서버 테스트 파일은 따로 존재하지 않음, 이 페이지에 설정파일에 대해 정의 되어 있다.
– 주석처리 하면 테스트 페이지 대신에 파일목록을 나열함
<LocationMatch “^/+$”>
Options -Indexes
ErrorDocument 403 /error/noindex.html
</LocationMatch>
IndexIgone .??* *~ *# HEADER* README* RCS CVS *,v *,t
– 디렉토리안에 있는 파일목록을 출력할때 숨길파일을 정의
Include conf/extra/httpd-languages.conf
– 웹서버가 제공할 웹 문서 사용되는 언어 정의
아래와 같이 정의 되어 있음
AddLanguage ca .ca
AddLanguage cs .cz .cs
AddLanguage da .dk
….
LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv tr zh-CN zh-TW
– 각 언어에 대한 우선순위 부여함
ForceLanguagePriority Prefer Fallback
– 언어가 AddLanguage 목록에 없을때 LanguagePriority에 정의된 순서대로 판단할 수 있게 함
AddCharset us-ascii.ascii .us-ascii
– 언어의 문자세트가 정의 되어 있음
AddType application/x-httpd-php .htm .html .php .ph php3 .php4 .phtml .inc
– mime.type 을 통해 변환하지 않고 웹서버가 제공하는 MIME 유형을 정의 할때 사용
– 위의 예는 php 형식에 파일에 대해서는 PHP로의 변환이 필요하다는것을 의미함
AddEncoding x-compress .Z
– 특정 브라우저에서 자료를 내려받음과 동시에 압축 해제가능하게 하는 지시자, 만약 주석처리 한다면
AddType application/x-gzip .gz .tgz 와 같이 파일 형식에 대한 MIME 유형을 AddType 으로 정의해야함
– 웹 브라우져에서 기능을 지원해야 한다고 함 ( 안 써도 될듯한 기능일거 같음?)
#ErrorDocument 500 “The server made a boo boo.”
– 사용자 정의 에러메시지에 대한 설정부분 메세지로 나타낼수도 있으며 문서로 지정할수도 있다.
아파치/error 디렉토리에 정의 문서가 제공되어 지는듯하다, 해당디렉토리를 alias 해서 사용하면 될거 같다
BrowserMatch “Mozila/2″ nokeepalive
– 클라이언트에서 접근하는 브라우져별 특정한 행동을 지정할수 있음
ErrorDocument 404 http://도메인
– 없는 페이지를 요청할 경우 특정 도메인으로 리다이렉팅 시킴
ex) http-vhost.conf
– 들어오는 모든 80번 트래픽에 한해 한가지 페이지만 띠울때 …
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot “/home/imsi-page”
ServerName *
</VirtualHost>
ServerTokens OS
– 클라이언트 요청에 되돌려주는 정보에 웹서버의 OS에 대한 정보를 클라이언트에게 보여줌
– ServerTokens Prod : 정보보여주지 않는다??
ServerTokens min
– 클라이언트 요청에 최소한의 정보만을 클라이언트에게 보여줌
ServerRoot “/usr/local/apache”
– 웹서버의 본체가 있는 디렉토리 소스설치하거나 rpm 으로 설치한 경우 경로가 틀려질수도 ㅋㅋ
PidFile run/httpd.pid
– 웹 프로세스의 PID를 기록할 파일의 위치를 설정 (뭔지 모르겠네 ㅋ)
Timeout 300
– 클라이언트가 300초후에 접속 끊겠다 아마 응답이 없으면 5분에 끊어지는듯
KeepAlive Off
– 클라이언트의 지속적인 접속 허용여부 결정 (디폴트는 Off)
– OFF 의 경우 클라이언트의 요청이 있은후 접속이 끊어지고 클라이언트 요청시 다시 접속하게 됨
– ON의 경우 클라이언트 요청시 다시 접속하는 과정이 생략 되어서 좋다는데 모르겠음 좋은지 ㅋ
– 한번 접속후 많은 통신이 이루어지는 서버의 경우 On 이 유리할지도 모름 (자원소모가 있다네)
MaxKeepAliveRequests 100 (Keepalive 가 On일때만 유효함)
– 클라이언트가 접속되어 있을시 웹서버에 요청할수 있는 최대 횟수
– 100이면 클라이언트의 요청을 받으면 끊고 다시 접속하게 하여 웹 서비스 처리 (프로세스가 100번의 요청이 들어오면 자신은 죽고
다음 프로세스가 다시 클라이언트 요청을 받아서 처리)
– 0은 제한 없음을 의미하며 클라이언트가 접속을 끊지 않는 이상 계속 연결되게 할려고 할거임
– MaxClients 제한 이상의 연결시도는 보통 ListenBacklog 지시자에 설정된 수까지 대기
KeepAliveTimeout 15
– 클라이언트가 서버에 접속한 이후 15초동안 요청이 없다면 서버가 클라이언트 접속을 끊음 (일종의 대기시간)
– 60초 이상 설정 하지 말라네요.
그냥 디폴트의 아파치라면 prefork MPM 방식
– 미리 프로세스를 띠우고 있다가 요청이 있을시 자식프로세스를 생성하여 서비스 해주는 방식
StartServer
– 웹 서버가 시작할때 자식 프로세스 수를 지정 (아파치 시작후 ps -ef | grep httpd 하면 확인 가능)
– MinSpareServers, MaxSpareServers 등의 지시자에 의해서 프로세스는 생성되기도 하고 죽기도 하므로 큰 의미 없다고 함
MinSpareServers / MaxSpareServers
– MinSpareServers 수 보다 자식프로세스가 적으면 설정된 값만큼 자식프로세스 생성 (항상 대기하고 있을 프로세스 최소 갯수)
– MaxSpareServers 수 보다 많다면 만들어진 자식프로세스 중에 일부를 끝내어 버림 (항상 대기하고 있을 프로세스 최대 갯수)
ServerLimit
– 웹서버 운영중에 만들수 있는 자식프로세스의 한도를 지정
MaxClient
– 클라이언트들이 동시에 최대로 접속했을때 실행할수 있는 자식프로세스의 최대값 결정
MaxRequestPerChild
– 웹서버가 실행된후 자식 프로세스가 처리하는 최대 연결 요청 (하나의 프로세스당 최대 처리할수 있는 방문자 요청 횟수)
– 0인 경우 한번 실행된 웹서버의 자식 프로세스는 결코 죽지 않아 속도가 빨라짐?, 오류가 생기면 뒤지지 않음ㅋ
Listen 80
– 아이피 주소 지정하면 해당하는 아이피로만 들어오는 80번의 응답을 기다림
– 쿨하게 그냥 80만 적자
Include conf.d/*.conf
– 아파치 웹서버의 설정파일의 위치
User apache
Group apache
– 웹서버의 데몬 자식 프로세스의 사용그룹 지정
– Root 계정으로 실행된 다음 apache 라는 사용자 권한으로 사용자 권한으로 자식 프로세스 생성
– 보안때문에 설정된것. 웹 프로세스를 해킹하더라도 apache 권한 밖에 못 얻음 (root를 보호하자)
#ExtendedStatus On
– server_status 항목을 이용해서 서버의 상태를 보여주는 웹문서에 어떤 정보를 표시할것인지 설정
– 확장정보를 On으로 해놓으면 수집해야하는 부분이 있으므로 부화 생길지도 디폴트가 off, 주석처리 되어 있네
DSO (Dynamic Shared Object) 동적 공유 객체? (기능을 확장해주는것을 모듈화 해서 제공함)
– LoadModules 모듈을 실행하기 위한 항목
– modules 디렉토리 안에 있지 싶음
ServerAdmin takakocap@kensei.co.kr
– 서버 문제 발생시 보낼 관리자 메일 지정
ServerName kensei.co.kr
– 웹 서버 이름 지정
UseCanonicaName Off
– 아파치 웹 서버가 자신을 가르키는 URL 주소를 구성할껀지 결정
– ServerName:port 형식으로 웹서비스 한다는데 무슨 말인지 모르겠음
DocumentRoot “/var/www/html”
– 웹 문서 디렉토리의 결로 지정 ( 웹 문서의 Root 디렉토리)
<Directory /> ~ </Directory>
– 디렉토리를 제어하기 위한 구문 (Root 디렉토리에 대한 설정)
– 하위 디렉토리에 까지 적용되므로 공통적으로 적용되는 내용이라고 보면 됨
Options FollowSymLinks
– 클라이언트가 심볼릭 링크를 따라 이동할수 없게 하는 옵션
AllowOverride None
– 각각의 디렉토리에 접근 권한을 설정할때 필요한 옵션 (설정된 아파치 환경설정을 무시하고 새로운 설정을 적용하는 방법)
– 웹 문서를 제공하는 디렉토리에서 (.htaccess) 파일을 찾으면 이 파일로 디렉토리 접근을 재설정을 허용할지 결정
– None 값은 보안을 위해 설정 내용을 변경하지 못하게 하고 있음?
아파치는 /.htaccess, /www/.htaccess, /www/htdocs/.htaccess를 매번 열려고 시도한다.
최고의 성능을 얻으려면 항상 AllowOverride None을 사용하자.
AuthConfig
AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, require 등과 같은 클라이언트
인증지시자의 사용을 허용.
FileInfo
AccessFileName 으로 지정한 파일에 대하여 AddEncoding, AddLanguage, AddType,
DefaultType, ErrorDocument, LanguagePriority 등과같은 문서유형을 제어하는 지시자 사용을 허용
Indexes
AccessFileName 으로 지정한 파일에 대하여 AddDescription, AddIcon,
AddIconByEncoding, DirectoryIndex, FancyIndexing 등과같은 디렉토리 인덱싱을 제어하는
지시자 사용을 허용
Limit
AccessFileName 으로 지정한 파일에 대하여 allow, deny, order 같은 호스트접근을 제어하는 지시자사용을 허용
Options
AccessFileName 으로 지정한 파일에 대하여 Options 지시자를 이용한 재설정을 허용
All
위에서 이야기한 모든 것을 허용
None
AccessFileName 으로 지정한 파일을 무시. 어떠한 설정도 재설정 할 수 없다.
<Directory “var/www/html”> ~ </Directory>
– 특정디렉토리에 대한 설정을 하는 부분임
indexes
– 시작 웹 문서 파일인 인덱스 파일이 없을때 디렉토리에 있는 파일 내용 보여줄것이다라는? 옵션
AllowOverride None
– 위에 꺼랑 같은 옵션 내용임
Order
– 디렉토리 접근 권한을 위한 지시자
allow, deny
– 디렉토리에 접근에 대해 먼저 허용하고 그 다음이 거부하겠다 (순서에 따라서 ㅋㅋ)
Allow from all
– 모든곳에서 들어오는 접속을 허용
– all 대신에 특정 도메인도 넣을수 있다
EnableMMAP
커널에서 메모리매핑(mmap)을 지원한다면 아파치가 웹문서를 로딩하기 위하여 내부문서를 읽을때에 파일을 메모리 매핑하여 처리
메모리대응이 서버의 성능을 떨어트리고 심지어 안정성을 해치는 경우
또한 NFS 마운트한 파일시스템에 있는 파일을 메모리 대응하는 도중에 다른 NFS 클라이언트에 있는 프로세스가 파일을 지우거나
파일크기를 줄이면, 웹서버 프로세스가 다음 번에 메모리대응한 파일내용을 읽을때 bus error가 발생할 수 있다
되도록이면 off 하자
UserDir public_html
UserDir disable
– Root 계정이외에 사용자가 자기 계정에 해당하는 웹서버의 기본 디렉토리를 public_html으로 지정함
– 계정별로 웹 서비스를 지정할수 있는 옵션부분임 (아마 웹 호스팅?)
– 디폴트가 주석처리이고 disable임
DirectoryIndex index.php index.html 18nom.html ……
– 처음에 보여줄 웹 문서 지정 (순차적으로 적어주자 먼저 보여줄것)
– 지정되어 있지 않으면 파일 목록을 보여주거나 403 Forbidden 오류 메세지 출력
– 완전한 파일명을 명시하며 자주 쓰이는 것 부터 먼저 명시
AccessFileName .htaccess
– 디렉토리 사용자인증에 필요한 파일을 지정
<Files ~ “^\.ht”> ~ </Files>
– 파일에 대한 접근을 제어하기 위한 부분. 여기서는 *.ht 로 시작되는 확장자에 대한 파일에 대한 제어 부분임
– 디폴트로 Deny from all 로 되어있다. 웹 클라이언트가 이 부분 수정하면 조때죠…
TypesConfig /etc/mime.types
– /etc/mime.types 에는 파일 확장자가 거기에 대응하는 컨텐츠 유형이 설정되어 있음
– 서버가 클라이언트의 요청에 응답할때 시작 부분에 MIME 정보 함께 전송하여 이에 클라이언트에
이를 재생하기 위해 적절한 응용프로그램을 선택할수 있게 한다
DefaultType text/plain
– 웹서버가 알지 못하는 MIME 유형 제공할때 디폴트가 text/plain 의 유형으로 지정 (뭔지는 모름 텍스트??)
MIMEmagicFile conf/magic
– 클라이언트에게 제공할 파일의 내용을 통해 MIME 유형을 결정할때 힌트를 얻을수 있다??
– 사용할 리도 없겠지만 httpd.conf에 Loadmodule mime_magic_module modules/mod_mime_magic.so 적어준다.
HostnameLookups Off
– 웹서버가 로그정보를 기록할때 클라이언트들의 IP들을 DNS에 질의해서 도메인으로 남길지 설정
– 도메인으로 변경할때 성능저하를 가지고 올수 있음 ( 할 이유가 없다 따로 질의해봐도 되니깐 ㅋ)
ErrorLog “/var/log/httpd/erroe_log”
– 아파치 에러로그 남길 파일 지정
LogLevel warn
– 로그를 기록할 수준 선택 (debug, info, notice, warn, error, crit → 이쪽 순으로 갈수록 간단하게 남김)
LogFormat 에서 접속로그를 기록할 형식을 결정
CustomLog 에서 원하는 형식의 로그 기록 방식을 선택
– %h : host
– %i : ident
– %u : authuser
– %t : date and time
– %r : request
– %>s : status
– %b : byte
로그포맷을 아래와 같이 뒤에 이름을 붙여서 설정도 가능함…
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” common
LogFormat “%v %{X-Forwarded-For}i %l %u %t \”%r\” %>s %b” X-Forwarded-For
LogFormat “%v %{X-Forwarded-For}i %l %u %t \”%r\” %>s %b %{GEOIP_COUNTRY_CODE}e” KENSEI
vhost 설정 부분에서 아래와 같이 httpd.conf에서 지정한 로그포맷 이름을 주어서 로그 생성가능
CustomLog “logs/kensei.co.kr-access_log” KENSEI
이미지 파일 등은 로그 남기지 않기
SetEnvIfNoCase Request_URI “\.(swf|png|gif|jpg|jpeg|js|css|mpg|mpeg|ico)$” NO_LOG
CustomLog logs/access_log combined env=!NO_LOG
임의의 아이피 로그 남기지 않기
SetEnvIf Remote_Addr “^100.100.100.100$” NO_LOG
아예 로그 남기지 않기
– CustomLog 설정 하지 않을시 그냥 access.log 로 (디폴트)로 남기게 될것임
CustomLog /dev/null combined
Alias /icons/ “/var/www/icons/”
– DocumentRoot 이외의 다른 디렉토리에서도 웹 문서를 서비스 할수 있게 디렉토리 경로에 별칭 부여
– 별칭을 부여한다면 웹 문서에서 /icons/파일이름 으로 사용가능함
<Directory “/var/www/icons/”> ~ </Directory> 지시자를 통해 웹 문서에 제공할 디렉토리에 대한 속성 정의
ScriptAlias /cgi-bin/ “/usr/local/apache/cgi-bin/”
– 위와 같이 별칭부여의 한가지이며 별칭을 CGI 스크립트로 인식한다는 점
<Directory “/usr/local/apache/cgi-bin”> ~ </Directory> 를 통해 CGI 스크립트를 제공할 디렉토리 속성 정의
*. CGI : Common Gateway Interface
– 웹서버에서 외부의 프로그램을 실행하고 그 결과를 받아오기 위한 규약
– 웹 컨텐츠를 동적으로 만드는데 이용됨 ex) 게시판 방명록 등등….
# Redirect permanent /foo http://www.example.com/bar
– 웹도메인이 변경되었을때 기존도메인으로 들어온다면 새로운 웹 주소의 문서를 제공해준다.
IndexOptions FancyIndexing VersionSort NameWidth=*
– DocumentRoot 디렉토리에 DirectoryIndex 항목에서 설정한 시작문서가 없다면 디렉토리의 파일목록을 보여주는데
이때 각 파일들을 어떤 형식으로 보여줄지 결졍
FancyIndexing
– 파일의 아이콘, 파일크기, 파일이 수정된 시간을 보여줌
VersionSort
– 파일의 버전순으로 정렬하여 보여줌
NameWidth=*
– 출력되는 파일 목록의 열의 폭을 필요한 만큼 늘림
/conf.d/welcome.conf
– 웹서버 테스트 파일은 따로 존재하지 않음, 이 페이지에 설정파일에 대해 정의 되어 있다.
– 주석처리 하면 테스트 페이지 대신에 파일목록을 나열함
<LocationMatch “^/+$”>
Options -Indexes
ErrorDocument 403 /error/noindex.html
</LocationMatch>
IndexIgone .??* *~ *# HEADER* README* RCS CVS *,v *,t
– 디렉토리안에 있는 파일목록을 출력할때 숨길파일을 정의
Include conf/extra/httpd-languages.conf
– 웹서버가 제공할 웹 문서 사용되는 언어 정의
아래와 같이 정의 되어 있음
AddLanguage ca .ca
AddLanguage cs .cz .cs
AddLanguage da .dk
….
LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv tr zh-CN zh-TW
– 각 언어에 대한 우선순위 부여함
ForceLanguagePriority Prefer Fallback
– 언어가 AddLanguage 목록에 없을때 LanguagePriority에 정의된 순서대로 판단할 수 있게 함
AddCharset us-ascii.ascii .us-ascii
– 언어의 문자세트가 정의 되어 있음
AddType application/x-httpd-php .htm .html .php .ph php3 .php4 .phtml .inc
– mime.type 을 통해 변환하지 않고 웹서버가 제공하는 MIME 유형을 정의 할때 사용
– 위의 예는 php 형식에 파일에 대해서는 PHP로의 변환이 필요하다는것을 의미함
AddEncoding x-compress .Z
– 특정 브라우저에서 자료를 내려받음과 동시에 압축 해제가능하게 하는 지시자, 만약 주석처리 한다면
AddType application/x-gzip .gz .tgz 와 같이 파일 형식에 대한 MIME 유형을 AddType 으로 정의해야함
– 웹 브라우져에서 기능을 지원해야 한다고 함 ( 안 써도 될듯한 기능일거 같음?)
#ErrorDocument 500 “The server made a boo boo.”
– 사용자 정의 에러메시지에 대한 설정부분 메세지로 나타낼수도 있으며 문서로 지정할수도 있다.
아파치/error 디렉토리에 정의 문서가 제공되어 지는듯하다, 해당디렉토리를 alias 해서 사용하면 될거 같다
BrowserMatch “Mozila/2″ nokeepalive
– 클라이언트에서 접근하는 브라우져별 특정한 행동을 지정할수 있음
ErrorDocument 404 http://도메인
– 없는 페이지를 요청할 경우 특정 도메인으로 리다이렉팅 시킴
ex) http-vhost.conf
– 들어오는 모든 80번 트래픽에 한해 한가지 페이지만 띠울때 …
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot “/home/imsi-page”
ServerName *
</VirtualHost>
■ httpd 2.3.8
▶APM 전체 필수 구성 요소 설치
yum -y install openssl openssl-devel mhash mhash-devel libtool libtool-ltdl libtool-ltdl-devel imap-devel imap zlib-devel zlib freetype-devel freetype libpng-devel libpng libjpeg-devel libjpeg libtiff-devel libtiff gd-devel gd pcre-devel pcre libxml-devel libxml libxml2-devel libxml2 gdbm-devel gdbm ncurses-devel ncurses curl-devel curl expat-devel expat bzip2-devel bzip2-libs bzip2 libc libc-devel libc-client-devel gcc* <– 끝에 네개 추가
▶ 필수 구성 요소 설치
cd /usr/local/src
wget http://archive.apache.org/dist/apr/apr-1.4.2.tar.gz
tar xvzf apr-1.4.2.tar.gz
cd apr-1.4.2
cp -arp libtool libtoolT <- (두번째 시도) libtoolT 지우지 못한다는 에러메세지 나타났지만 생략해주어도 되었음
./configure
ln -s /usr/bin/libtool / <- (두번째 시도) 생략해주어도 되었음
make
make install
wget http://archive.apache.org/dist/apr/apr-util-1.3.9.tar.gz
tar xvzf apr-util-1.3.9.tar.gz
cd apr-util-1.3.9
./configure –with-apr=/usr/local/apr
make
make install
▶ 설치 진행
cd /usr/local/src/httpd-2.3.8
./configure –prefix=/usr/local/apache –enable-modules=so –enable-mods-shared=all –enable-modules=shared –enable-ssl –enable-rewrite –with-mpm=worker –with-apr=/usr/local/apr –with-apr-util=/usr/local/apr
make
make install
▶APM 전체 필수 구성 요소 설치
yum -y install openssl openssl-devel mhash mhash-devel libtool libtool-ltdl libtool-ltdl-devel imap-devel imap zlib-devel zlib freetype-devel freetype libpng-devel libpng libjpeg-devel libjpeg libtiff-devel libtiff gd-devel gd pcre-devel pcre libxml-devel libxml libxml2-devel libxml2 gdbm-devel gdbm ncurses-devel ncurses curl-devel curl expat-devel expat bzip2-devel bzip2-libs bzip2 libc libc-devel libc-client-devel gcc* <– 끝에 네개 추가
▶ 필수 구성 요소 설치
cd /usr/local/src
wget http://archive.apache.org/dist/apr/apr-1.4.2.tar.gz
tar xvzf apr-1.4.2.tar.gz
cd apr-1.4.2
cp -arp libtool libtoolT <- (두번째 시도) libtoolT 지우지 못한다는 에러메세지 나타났지만 생략해주어도 되었음
./configure
ln -s /usr/bin/libtool / <- (두번째 시도) 생략해주어도 되었음
make
make install
wget http://archive.apache.org/dist/apr/apr-util-1.3.9.tar.gz
tar xvzf apr-util-1.3.9.tar.gz
cd apr-util-1.3.9
./configure –with-apr=/usr/local/apr
make
make install
▶ 설치 진행
cd /usr/local/src/httpd-2.3.8
./configure –prefix=/usr/local/apache –enable-modules=so –enable-mods-shared=all –enable-modules=shared –enable-ssl –enable-rewrite –with-mpm=worker –with-apr=/usr/local/apr –with-apr-util=/usr/local/apr
make
make install
☆ Apache 수동 설치
httpd-2.2. 사용
# cd /httpd-2.2.
# ./configure –prefix=/usr/local/apache –with-mpm=worker –enable-modules=so –enable-rewrite –enable-ssl –enable-mods-shared=all
※ 옵션내용이 무엇인지 알아보자
# make install
※ make 오류시
modules/http/.libs/libmod_http.a(byterange_filter.o): In function `ap_set_byterange':
byterange_filter.c:(.text+0x12c1): undefined reference to `apr_array_clear’
collect2: ld returned 1 exit status
make[1]: *** [httpd] 오류 1
make[1]: Leaving directory `/root/install_1/httpd-2.2.22′
make: *** [all-recursive] 오류 1
config 옵션 추가
–with-included-apr
httpd.conf 설정
# cd /usr/local/apache/conf
# vim httpd.conf
114~115 번째 줄에 user와 group을 nobody 로 변경
<IfModule !mpm_netware_module>
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User nobody
Group nobody
137줄 쯤에 주석 해제
ServerName www.example.com:80
해제후 도메인 또는 ip주소 입력
ServerName xxx.xxx.xxx.xxx:80
212 줄 쯤에 index.php 추가 (또는 테스트용 test.php)
# <IfModule dir_module>
DirectoryIndex index.html index.php
# </IfModule>
편집기 오픈 355줄 쯤에
AddType application/x-httpd-php .php .php4 .inc .html .thtml
AddType application/x-httpd-php-source .phps
삽입 후 366줄 쯤에
AddHandler cgi-script .cg 주석 해제
/서비스 재시작
httpd-2.2. 사용
# cd /httpd-2.2.
# ./configure –prefix=/usr/local/apache –with-mpm=worker –enable-modules=so –enable-rewrite –enable-ssl –enable-mods-shared=all
※ 옵션내용이 무엇인지 알아보자
# make install
※ make 오류시
modules/http/.libs/libmod_http.a(byterange_filter.o): In function `ap_set_byterange':
byterange_filter.c:(.text+0x12c1): undefined reference to `apr_array_clear’
collect2: ld returned 1 exit status
make[1]: *** [httpd] 오류 1
make[1]: Leaving directory `/root/install_1/httpd-2.2.22′
make: *** [all-recursive] 오류 1
config 옵션 추가
–with-included-apr
httpd.conf 설정
# cd /usr/local/apache/conf
# vim httpd.conf
114~115 번째 줄에 user와 group을 nobody 로 변경
<IfModule !mpm_netware_module>
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User nobody
Group nobody
137줄 쯤에 주석 해제
ServerName www.example.com:80
해제후 도메인 또는 ip주소 입력
ServerName xxx.xxx.xxx.xxx:80
212 줄 쯤에 index.php 추가 (또는 테스트용 test.php)
# <IfModule dir_module>
DirectoryIndex index.html index.php
# </IfModule>
편집기 오픈 355줄 쯤에
AddType application/x-httpd-php .php .php4 .inc .html .thtml
AddType application/x-httpd-php-source .phps
삽입 후 366줄 쯤에
AddHandler cgi-script .cg 주석 해제
/서비스 재시작
mod_rewrite 란?
Apache module의 한 종류로 서버 Request를 정해진 Rule에 의해서 다른 URL or File로 보내는 모듈
mod_rewrite로 거의 모든 Request변형 처리가 가능하다.
가능한 작업의 예
URL Forward
– DocumentRoot 변경
– Domain,Subdomain 조작
– 특정 Patten URL에 대한 URL변경
– User 디렉토리에 대한 처리
– 기타 등등..
mod_rewrite 설치
Apache 전체의 재 컴파일이 아닌 Mod_rewrite 모듈만 별도로 컴파일 하여 설치 하는 방법임 ㅇㅇ
[root@hoguinside01:58:39]# cd /usr/src/apache_2.2.6 // 아파치 설치 디렉토리로 이동(아파치를 설치한 소스 디렉토리)
[root@hoguinside01:58:39]# /usr/local/apache/bin/apxs -c -I/usr/include/gdbm mod_rewrite.c
[root@hoguinside01:58:39]# gcc -shared -o mod_rewrite.so mod_rewrite.o -lgdbm
[root@hoguinside01:58:39]# /usr/local/apache/bin/apxs -i mod_rewrite.so
[root@hoguinside01:58:39]# cp mod_rewrite.so /usr/local/apache/libexec/mod_rewrite.so
[root@hoguinside01:58:39]# chmod 755 /usr/local/apache/libexec/mod_rewrite.so
[root@hoguinside01:58:39]# vi /usr/local/apache/conf/httpd.conf
LoadModule rewrite_module libexec/mod_rewrite.so
~~~
Addmodule mod_rewrite.c
코드 추가
[root@hoguinside01:58:39]# /usr/local/apache/bin/apachectl restart
mod_rewrite 사용
1. httpd.conf 의 rewrite 모듈 활성화( 주석을 제거)
LoadModule rewrite_module modules/mod_rewrite.so
2. RewriteRule 적용
<VirtualHost *:80>
DocumentRoot E:\wwwroot\test
ServerName localhost
RewriteEngine on
RewriteRule ^(/images/.*)$ http://hoguinside.com$1
RewriteRule ^(/data/.*)$ http://hoguinside.com$1
</VirtualHost>
위의 경우는 /images , /data 디렉토리에 대한 요청은 http://hoguinside.com/images/~ 로 Redirect 시키라는 명령어 입니다.
.htaccess 파일을 이용하기 위해서는 아래와 같은 옵션을 주셔야 합니다.
<Directory “/data2/dwwwroot/tt/html”>
Options FollowSymLinks
AllowOverride FileInfo
</Directory>
3. 웹서버 재시작
[root@hoguinside01:58:39]# /usr/local/apache/bin/apachectl restart
Apache module의 한 종류로 서버 Request를 정해진 Rule에 의해서 다른 URL or File로 보내는 모듈
mod_rewrite로 거의 모든 Request변형 처리가 가능하다.
가능한 작업의 예
URL Forward
– DocumentRoot 변경
– Domain,Subdomain 조작
– 특정 Patten URL에 대한 URL변경
– User 디렉토리에 대한 처리
– 기타 등등..
mod_rewrite 설치
Apache 전체의 재 컴파일이 아닌 Mod_rewrite 모듈만 별도로 컴파일 하여 설치 하는 방법임 ㅇㅇ
[root@hoguinside01:58:39]# cd /usr/src/apache_2.2.6 // 아파치 설치 디렉토리로 이동(아파치를 설치한 소스 디렉토리)
[root@hoguinside01:58:39]# /usr/local/apache/bin/apxs -c -I/usr/include/gdbm mod_rewrite.c
[root@hoguinside01:58:39]# gcc -shared -o mod_rewrite.so mod_rewrite.o -lgdbm
[root@hoguinside01:58:39]# /usr/local/apache/bin/apxs -i mod_rewrite.so
[root@hoguinside01:58:39]# cp mod_rewrite.so /usr/local/apache/libexec/mod_rewrite.so
[root@hoguinside01:58:39]# chmod 755 /usr/local/apache/libexec/mod_rewrite.so
[root@hoguinside01:58:39]# vi /usr/local/apache/conf/httpd.conf
LoadModule rewrite_module libexec/mod_rewrite.so
~~~
Addmodule mod_rewrite.c
코드 추가
[root@hoguinside01:58:39]# /usr/local/apache/bin/apachectl restart
mod_rewrite 사용
1. httpd.conf 의 rewrite 모듈 활성화( 주석을 제거)
LoadModule rewrite_module modules/mod_rewrite.so
2. RewriteRule 적용
<VirtualHost *:80>
DocumentRoot E:\wwwroot\test
ServerName localhost
RewriteEngine on
RewriteRule ^(/images/.*)$ http://hoguinside.com$1
RewriteRule ^(/data/.*)$ http://hoguinside.com$1
</VirtualHost>
위의 경우는 /images , /data 디렉토리에 대한 요청은 http://hoguinside.com/images/~ 로 Redirect 시키라는 명령어 입니다.
.htaccess 파일을 이용하기 위해서는 아래와 같은 옵션을 주셔야 합니다.
<Directory “/data2/dwwwroot/tt/html”>
Options FollowSymLinks
AllowOverride FileInfo
</Directory>
3. 웹서버 재시작
[root@hoguinside01:58:39]# /usr/local/apache/bin/apachectl restart