Apache HTTP Server에 대한 전반적인 사항을 정리한다.
HTTP 서비스를 제공하는 웹 서버이다.


설치 가이드



아래 설치 가이드는 Windows Server 2003을 기준으로 작성한 것 입니다. 설치 환경이 틀릴 경우에는 별도의 주석을 달아 주세요.

- [http://httpd.apache.org/download.cgi](http://httpd.apache.org/download.cgi)에서 "Win32 Binary including OpenSSL 0.9.8g (MSI Installer)"를 다운로드 한다.
![다운로드](img/Apache228_install_01.png)

- 다운로드한 설치 프로그램(apache_2.2.8-win32-x86-openssl-0.9.8g.msi)을 실행한다.


- 정보를 읽고 "Next" 버튼을 눌러 설치를 시작한다.
![설치 시작](img/Apache228_install_02.png)

- 라이센스를 확인하고 "Next" 버튼을 눌러 설치를 계속한다.
![라이센스 확인](img/Apache228_install_03.png)

- Apache HTTP Server의 일반 정보를 읽고 "Next" 버튼을 눌러 계속 진행한다.
![Apache HTTP Server 정보](img/Apache228_install_04.png)

- 서버의 기본 정보를 입력한다.
![서버 정보](img/Apache228_install_05.png)

- "Typical"을 선택하여 디폴트 설치를 진행한다.
![설치 옵션](img/Apache228_install_06.png)

- "Change" 버튼을 눌러 설치할 디렉토리를 지정한다.
![설치 디렉토리](img/Apache228_install_07.png)

- "Install" 버튼을 눌러 설치를 시작한다.
![설치 시작](img/Apache228_install_08.png)

- "Finish" 버튼을 눌러 설치를 종료한다.
![설치 종료](img/Apache228_install_09.png)

- 윈도우의 우측 하단의 시스템 트레이에서 붉은 원으로 표시된 아이콘을 더블 클릭하여 "Apache Service Monitor" 창을 띄운다.
![시스템 트레이](img/Apache228_install_12.png)

- "Apache Service Monitor" 창에서 "Start", "Stop" 버튼을로 Apache HTTP Server를 시작/종료 한다.
![시작 종료](img/Apache228_install_11.png)

- http://localhost/에 접속해서 서비스가 정상 동작하는지 확인한다.
- %APACHE_HOME% : d:/OpenBiz/31_application/Apache228
- Document Home Directory : %APACHE_HOME%/htdocs
![서비스 확인](img/Apache228_install_10.png)

- HTTP를 사용할 수 있도록 80 Port를 방화벽에서 연다.
1. "시작" -> "설정" -> "제어판"에서 "Windows 방화벽"을 실행한다.
1. "예외" 탭을 선택하여 "포트 추가" 버튼을 클릭한다.
1. 방화벽에 Apacht HTTP Server에서 사용할 다음 포트를 추가한다.
1. HTTP, 80, TCP



Linux용 설치 가이드


Ubuntu Server에서 Apache HTTP Server를 설치하여 사용한다.

  • Apache HTTP Server 2.2.11 설치
    apt-get install apache2
    #--- [MySQL](MySQL.md#Linux용 설치 가이드.md) 연동 모듈 설치
    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/
      
       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 *: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"

    ```
  • 참고 문헌


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](L.md)
    
    RewriteCond %{HTTP_HOST} ^(eapp\.test\.co\.kr)
    RewriteCond %{REQUEST_URI} ^/ekp/svri(/*)
    RewriteRule ^(.*)$  http://eapp.test.co.kr/  [L](L.md)
    
    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
  • 참고 문헌


Windows 서비스 등록

  • Windows 서비스로 등록 httpd -k install -n "Apache2"
  • Windows 서비스에서 삭제 httpd -k uninstall -n "Apache2"
  • 참고 문헌

HTTPS 서비스 설정


- Apache와 함께 설치된 OpenSSL을 사용하여 개인키를 생성한다.
![다운로드](img/Apache_SSL.png) - 도스창을 띄운다.
``` 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을 사용하여 공개키를 만든다.
![다운로드](img/Apache_SSL1.png) - 도스창을 띄운다.
``` 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



- HTTPS를 사용할 수 있도록 443 Port를 방화벽에서 연다.
1. "시작" -> "설정" -> "제어판"에서 "Windows 방화벽"을 실행한다.
1. "예외" 탭을 선택하여 "포트 추가" 버튼을 클릭한다.
1. 방화벽에 HTTPS에서 사용할 다음 포트를 추가한다.
1. SSL, 443, TCP


- Apache HTTP Server를 종료한 후 다시 기동한다.


### 모니터링 및 튜닝 [Apache HTTP Server 튜닝](튜닝.md#Apache_HTTP_Server.md)
### Timeout 설정 - vi vi /etc/httpd/conf/httpd.conf

Timeout 300 KeepAliveTimeout 15


### PHP 설정 변경 - [PHP 설정 변경](PHP 5.2.5.md#PHP 설정 변경.md)
- vi /etc/php.ini
- [php.ini 설정, 2009.06](http://cdral.tistory.com/445)

session.gc_maxlifetime = 10800 session.cookie_lifetime = 86400 //--- 0. 브라우저가 꺼지면 Cookie 삭제 session.cache_limiter = nocache, must-revalidate

```


참고 문헌


공유하기