Apache HTTP Server
둘러보기로 가기
검색하러 가기
Apache HTTP Server에 대한 전반적인 사항을 정리한다.
HTTP 서비스를 제공하는 웹 서버이다.
- 홈페이지 : http://httpd.apache.org/
- 다운로드 : http://httpd.apache.org/download.cgi
- 라이센스 : Apache License, Version 2.0
- 플랫폼 : Win32, Unix
목차
설치 가이드
아래 설치 가이드는 Windows Server 2003을 기준으로 작성한 것 입니다. 설치 환경이 틀릴 경우에는 별도의 주석을 달아 주세요.
- http://httpd.apache.org/download.cgi에서 "Win32 Binary including OpenSSL 0.9.8g (MSI Installer)"를 다운로드 한다.
- 다운로드한 설치 프로그램(apache_2.2.8-win32-x86-openssl-0.9.8g.msi)을 실행한다.
- 정보를 읽고 "Next" 버튼을 눌러 설치를 시작한다.
- 라이센스를 확인하고 "Next" 버튼을 눌러 설치를 계속한다.
- Apache HTTP Server의 일반 정보를 읽고 "Next" 버튼을 눌러 계속 진행한다.
- 서버의 기본 정보를 입력한다.
- "Typical"을 선택하여 디폴트 설치를 진행한다.
- "Change" 버튼을 눌러 설치할 디렉토리를 지정한다.
- "Install" 버튼을 눌러 설치를 시작한다.
- "Finish" 버튼을 눌러 설치를 종료한다.
- 윈도우의 우측 하단의 시스템 트레이에서 붉은 원으로 표시된 아이콘을 더블 클릭하여 "Apache Service Monitor" 창을 띄운다.
- "Apache Service Monitor" 창에서 "Start", "Stop" 버튼을로 Apache HTTP Server를 시작/종료 한다.
- http://localhost/에 접속해서 서비스가 정상 동작하는지 확인한다.
- HTTP를 사용할 수 있도록 80 Port를 방화벽에서 연다.
- "시작" -> "설정" -> "제어판"에서 "Windows 방화벽"을 실행한다.
- "예외" 탭을 선택하여 "포트 추가" 버튼을 클릭한다.
- 방화벽에 Apacht HTTP Server에서 사용할 다음 포트를 추가한다.
- HTTP, 80, TCP
Linux용 설치 가이드
Ubuntu Server에서 Apache HTTP Server를 설치하여 사용한다.
- Apache HTTP Server 2.2.11 설치
apt-get install apache2 #--- MySQL 연동 모듈 설치 apt-get install libapache2-mod-auth-mysql #--- 방화벽에서 80번 port를 연다. ufw allow 80/tcp
- mod_rewrite 활성화
- sudo a2enmod rewrite
- /etc/apache2/sites-available/default 수정
DocumentRoot /var/www/ <Directory /var/www/> Options Indexs FollowSymLinks MultiViews AllowOverride None //--- None을 All로 변경 한다.
- sudo /etc/init.d/apache2 restart
- 다음과 같은 오류가 발생할 경우 "/etc/apache2/conf.d/phpmyadmin.conf" 심볼 링크 파일을 삭제한다.
The Alias directive in /etc/phpmyadmin/apache.conf at line 3 will probably never match because it overlaps an earlier Alias
- 설치 정보
- 설치 폴더 : /usr/share/apache2/
- 환경 폴더 : /etc/apache2/, /etc/default/apache2
- 로그 폴더 : /var/log/apache2/
- tail -f /var/log/apache2/access.log, error.log
- Document Root : /var/www/
- 기동 종료 : /etc/init.d/apache2 start, stop, reload, restart, status
- 서비스 확인 : ps -ef | grep apache
- /cgi-bin/ : /usr/lib/cgi-bin/
- Lock 폴더 : /var/lock/apache2
CentOS용 설치 가이드
- Apache 현황 확인
yum list | grep http #--- 설치 가능한 package 확인 yum list installed | grep http #--- 설치된 package 확인
- CentOS에서 Apache HTTP Server 설치
yum install httpd httpd-* yum install mod_ssl rpm -qa | grep http
- 언어와 UTF-8 설정
vi /etc/httpd/conf/httpd.conf LanguagePriority ko en ... #--- ko를 맨앞으로 위치 한다. AddDefaultCharset UTF-8
- 설치 정보
- 설치 폴더 : /etc/httpd/
- 실행 파일 : /usr/sbin/
- 환경 파일 : /etc/sysconfig/httpd
- /etc/httpd/conf/httpd.conf
- /etc/httpd/conf.d : Apache HTTP Server에 연동되는 소프트웨어의 설정 파일이 저장되는 폴더
- DocumentRoot : /var/www/html
- 기동 종료 : /etc/init.d/httpd start, stop, restart, status 또는 service httpd start, stop, restart
- 서비스 확인 : ps -ef | grep httpd | grep -v grep
- 로그 정보 : /etc/httpd/logs/
- PID 파일 : /var/run/httpd.pid
- showinfo_apache.bash
#!/bin/bash echo 'Apache 버전 : Apache HTTP Server 2.2.3' echo 'Apache 문자셋 : UTF-8' echo '설치 폴더 : /etc/httpd/' echo '환경 파일 : vi /etc/httpd/conf/httpd.conf' echo '환경 파일/폴더 : /etc/sysconfig/httpd, /etc/httpd/conf.d/' echo 'DocumentRoot : /var/www/html/' echo '기동 종료 : service httpd restart' echo '서비스 확인 : ps -ef | grep httpd | grep -v grep' echo '로그 폴더 : /etc/httpd/logs/'
관리자 가이드
이름 기반 가상 호스트
Apache HTTP Server에서 이름 기반의 가상 호스트를 구축 합니다. 이름 기반 가상 호스트는 하나의 서버에서 호스트명과 도메인 명으로 서로 다른 서비스를 제공할 수 있도록 해 줍니다.
- 이름 기반 가상 호스트 (Name Based Virtual Host) 기본 설정 (httpd.conf)
- 첫번째 정의된 가상 호스트 (VirtualHost)가 디폴트로 적용되는 가상 호스트 입니다.
- ServerName : 가상 호스트의 이름
- ServerAlias : 가상 호스트에 적용되는 여러개의 다른 이름, 스페이스로 구분하여 적어 줍니다.
- JkMountCopy On : Apache Tomcat과 연동되어 있다면 이 설정을 가상 호스트에 적용 되도록 합니다.
NameVirtualHost *:80 <VirtualHost *:80> ServerName www.vtiger.co.kr ServerAlias *.vtiger.co.kr DocumentRoot /usr/local/vtiger //--- 다른 호스트명으로 redirect 한다. //--- 즉, www.vtiger.co.kr로 접속해도 자동으로 www.domainA.co.kr로 바뀐다. //Redirect / http://www.domainA.co.kr/ LogLevel info CustomLog "logs/access_log" common ErrorLog "logs/error_log" //--- JkMount /*.jsp worker1 JkMountCopy On </VirtualHost> <VirtualHost *:80> ServerName bizapp.jopenbusiness.co.kr ServerAlias *.jopenbusiness.co.kr DocumentRoot /var/www/html LogLevel info CustomLog "logs/bizapp_access_log" common ErrorLog "logs/bizapp_error_log" </VirtualHost>
- 참고 문헌
URL rewrite 모드 설정
- 설정 위치
- httpd.conf 파일에서 Server Config, Virtual Host, Directory 영역에서 설정
- 각 폴더에서 .htaccess 파일에서 설정
- Apache HTTP Server에 모듈 추가
LoadModule rewrite_module modules/mod_rewrite.so
- .htaccess 샘플
RewriteEngine On #--- RewriteLogLevel : 0. 로그 기록 않음, 1, 2, ..., 9 # RewreteLog 로그파일명 # RewriteLogLevel 0 #--- RewriteCond TestStirng CondPattern CondPattern #--- HTTP_HOST (HTTP_HOST, SERVER_PORT), REQUEST_URI, QUERY_STRING, REQUEST_FILENAME #--- http://www.jopenbusiness.com/test -> HTTP_HOST : www.jopenbusiness.com, REQUEST_URI : /test #--- CondPattern : -f. 파일, -d. 폴더 #--- RewriteRule Pattern Substitution flag #--- Flag : F. 403 에러, G. 401. 에러, L. 여기까지 rule 적용, C. 다음 rule 계속 적용 RewriteCond %{HTTP_HOST} ^(www\.vtiger\.co\.kr) RewriteRule (.*) http://www.jopenbusiness.com/$1 [L] RewriteCond %{HTTP_HOST} ^(eapp\.test\.co\.kr) RewriteCond %{REQUEST_URI} ^/ekp/svri(/*) RewriteRule ^(.*)$ http://eapp.test.co.kr/ [L] RewriteOptions 100
- 시스템 변수 ( 사용법 : %{변수명} )
- HTTP headers: HTTP_USER_AGENT, HTTP_REFERER, HTTP_COOKIE, HTTP_FORWARDED, HTTP_HOST, HTTP_PROXY_CONNECTION, HTTP_ACCEPT
- connection & request: REMOTE_ADDR, REMOTE_HOST, REMOTE_PORT, REMOTE_USER, REMOTE_IDENT, REQUEST_METHOD, SCRIPT_FILENAME, PATH_INFO, QUERY_STRING, AUTH_TYPE
- server internals: DOCUMENT_ROOT, SERVER_ADMIN, SERVER_NAME, SERVER_ADDR, SERVER_PORT, SERVER_PROTOCOL, SERVER_SOFTWARE
- date and time: TIME_YEAR, TIME_MON, TIME_DAY, TIME_HOUR, TIME_MIN, TIME_SEC, TIME_WDAY, TIME
- specials: API_VERSION, THE_REQUEST, REQUEST_URI, REQUEST_FILENAME, IS_SUBREQ, HTTPS
- 참고 문헌
- Apache HTTP Server Version 2.0 - Apache Module mod_rewrite
- Apache rewrite 사용 방법, 2007.2
- Apache module 4탄 - rewrite_module (1), 2009.7
- Apache module 4탄 - rewrite_module (2)
- Apache module 4탄 - rewrite_module (3)
- Apache module 4탄 - rewrite_module (4)
- Apache module 4탄 - rewrite_module (5)
- Apache module 4탄 - rewrite_module (6)
Windows 서비스 등록
- Windows 서비스로 등록
- httpd -k install -n "Apache2"
- Windows 서비스에서 삭제
- httpd -k uninstall -n "Apache2"
- 참고 문헌
HTTPS 서비스 설정
- Apache와 함께 설치된 OpenSSL을 사용하여 개인키를 생성한다.
cd d: cd d:/OpenBiz/31_application/Apache228/bin openssl.exe OpenSSL> req -config d:/OpenBiz/31_application/Apache228/conf/openssl.cnf -new -out jopenbusiness.csr Enter PEM pass phrase: 개인키에 사용할 암호를 입력한다. Verifying - Enter PEM pass phrase: 개인키에 사용할 암호를 한번 더 입력한다. Country Name: 국가명(KO)을 입력한다. State or Province Name: 비워둔다. Locality Name: 지역명(seoul)을 입력한다. Organization Name: 단체명으로 Apache 등록시 사용한 도메인명을 입력한다. Organizational Unit Name: 사용할 도메인(www.jopenbusiness.com)을 입력한다. Common Name: 사용할 도메인(www.jopenbusiness.com)을 입력한다. Email Address: 이메일 주소를 입력한다. A challenge password: 비워둔다. An optional company name: 비워둔다. OpenSSL> exit
- jopenbusiness.csr과 privkey.pem 파일이 생성된 것을 확인한다.
- Apache와 함께 설치된 OpenSSL을 사용하여 공개키를 만든다.
cd d: cd d:/OpenBiz/31_application/Apache228/bin openssl.exe OpenSSL> rsa -in privkey.pem -out jopenbusiness.key Enter pass phrase for privkey.pem: privkey.pem 생성시 입력한 암호를 입력한다. OpenSSL> req -config d:/OpenBiz/31_application/Apache228/conf/openssl.cnf -new -x509 -days 365 -key jopenbusiness.key -out jopenbusiness.crt Country Name: 국가명(KO)을 입력한다. State or Province Name: 비워둔다. Locality Name: 지역명(seoul)을 입력한다. Organization Name: 단체명으로 Apache 등록시 사용한 도메인명을 입력한다. Organizational Unit Name: 사용할 도메인(www.jopenbusiness.com)을 입력한다. Common Name: 사용할 도메인(www.jopenbusiness.com)을 입력한다. Email Address: 이메일 주소를 입력한다. OpenSSL> exit
- jopenbusiness.key과 jopenbusiness.crt 파일이 생성된 것을 확인한다.
- 생성된 개인키와 공개키 관련 파일을 %APACHE_HOME%/conf 아래로 복사한다.
- jopenbusiness.csr, privkey.pem, jopenbusiness.key, jopenbusiness.crt을 복사한다.
- %APACHE_HOME%/conf/httpd.conf 파일에 다음과 같이 작업한다.
###--- Listen 80 아래에 다음 라인을 추가한다. Listen 443 ###--- mod_ssl.so의 주석(#)을 푼다. LoadModule ssl_module modules/mod_ssl.so ###--- 다음을 파일의 하단에 추가한다. NameVirtualHost *:443 <VirtualHost *:443> SSLEngine on SSLCertificateFile "d:/OpenBiz/31_application/Apache228/conf/jopenbusiness.crt" SSLCertificateKeyFile "d:/OpenBiz/31_application/Apache228/conf/jopenbusiness.key" SSLProtocol all SSLCipherSuite HIGH:MEDIUM </VirtualHost>
- HTTPS를 사용할 수 있도록 443 Port를 방화벽에서 연다.
- "시작" -> "설정" -> "제어판"에서 "Windows 방화벽"을 실행한다.
- "예외" 탭을 선택하여 "포트 추가" 버튼을 클릭한다.
- 방화벽에 HTTPS에서 사용할 다음 포트를 추가한다.
- SSL, 443, TCP
- Apache HTTP Server를 종료한 후 다시 기동한다.
모니터링 및 튜닝
Timeout 설정
- vi vi /etc/httpd/conf/httpd.conf
Timeout 300 KeepAliveTimeout 15
PHP 설정 변경
- PHP 설정 변경
- vi /etc/php.ini
session.gc_maxlifetime = 10800 session.cookie_lifetime = 86400 //--- 0. 브라우저가 꺼지면 Cookie 삭제 session.cache_limiter = nocache, must-revalidate