RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
'apache2'에 해당되는 글 1
2009.07.27  아파치 2.0에 대하여  

출처 : 대전국제IT교육센터 정성재 강사

 

1. 아파치 2.0 에 대하여
(1) 개요: 아파치 2.0 버전은 기존의 1.3버전에서 업그레이드된 버전으로 레드햇 리눅스 8.0 부터
          기본으로 설치되고 있다. 1.3버전에 비해 많은 부분이 달라졌으므로 기존의 버전과 비교
          해서 그 차이점을 알아야 한다. 아파치 2.0은 가장 큰 변화는 멀티스레딩(MultiThreading)
          의 지원이다. 1.3버전은 각 요청을 프로세스에 의존하는 방식이었으나 스레드 기능의 추가
          로 아파치 2.0은 확장성과 유연함을 더 하였다. 아파치에서는 MPM(Multi-Processing Modul
          es)이라고 한다.
(2) MPM(Multi-Processing Modules)
   1) 설명: 아파치 2.0이 소개되면서 바뀐 가장 큰 변화로 기존의 1.3 버전이 안고 있는 한계인
           확장성 부분에 초점을 두고, 이에 대한 솔루션으로 하이브리드(Hybrid)웹서버를 표방하였
           다. 기존의 프로세스 방식과 스레드를 혼용한 것으로 하나의 프로세스가 제공해 주지
           못하던 신뢰성을 스레드개념을 도입하여 문제를 해결하도록 하였다. 이러한 방법은 신뢰
           성과 확장성을 제공한다. MPM은 주로  세가지 모듈형태로 많이 사용하는데, 이 중 하나의
           모듈을 선택하여 사용하면 된다. 특별히 선택하지 않으면 1.3 버전과 같은 형태인
           prefork 모듈을 사용한다.
   2) MPM 모듈의 종류
    ㄱ. prefork: 1.3 프로세스 모듈과 같은 방법으로 각 요청에 프로세스가 매핑되어 서비스 요청이
                많게 되면 프로세스의 수가 증가하게 된다. 프로세스를 제어하는 부모 프로세스는
                클라이언트의 요청이 들어올 경우 대기하고 있다가 자식 프로세스의 생성여부 등을
                관리하는 방식이다. 'MinSpaerServers', 'MaxSpareServers', 'Maxservers'의 프로
                세스 관련 지시어를 바탕으로 프로세스의 상태를 관리하며, 스레드를 지원하는 않는
                오래된 플랫폼의 경우나 스레드없이 작동하기를 원할 때 사용한다.
    ㄴ. worker: 'prefork MPM'에 기반을 두고 있는 모듈로 지정된 만큼의 스레드에 얼마나 많은 자
               식 프로세스를 생성할 것인지 지정하는 것이다. 페이지 요청이 들어오면 스레드는
               요청을 받게 되고 그에 따라 자연히 응답한다. 그러나, 이미 요청을 처리하는데 있어
               서 한계를 넘는 경우 새로운 자식 프로세스를 생성하게 된다.
    ㄷ. perchild: 서버시작시에 고정적인 프로세스 개수를 정의하며 각 프로세스는 특정 스레드
                 개수로 동작한다. 이 프로세스가 증가하게 되면 정의되어 있는 기능에 의해 자연히
                 스레드 개수는 증가된다. 프로세스는 요청이 많은지 그렇지 않은지를 판별하여 최
                 소/최대 여유분의 스레드 개수를 유지하게 된다. 또한, 각 자식 프로세스에 대하여
                 각기 다른 사용자와 그룹을 지정할 수 있다. 이 기능은 mod_perl, PHP 등을 포함한
                 CGI 스크립드들이 자식프로세스의 소유주 아이디로 작동이 가능하기 때문에 웹서버
                 입장에서는 보안적인 기능을 제공해준다고 볼 수 있다. 이 프로세스 모듈이 요즘
                 스레드를 지원하는 대부분 플랫폼환경에서 사용되어 질 수 있으며, 최대한 많은 요
                 청을 처리하기 위하여 CPU 사용량을 줄일 수 있는 방안도 될 수 있다.
    ㄹ. 기타 MPM모듈: 기타 MPM모듈로 WinNT, BeOS, NetWare, OS/2, 등이 있다.
(3) 기타 특징
   전자상거래와 같이 안전한 전송을 위해 쓰여지고 있는 SSL(Secure Socket Layer)을 핵심모듈의
  수정없이 지원한다. 또한 한 모듈의 출력을 다른 모듈에서 수정하여 클라이언트에게 보내는 필터링
  기능이 추가되었으며, IPV6도 지원한다.

2. 아파치 2.0 버전이 1.3버전에 비해 달라진 점
(1) 아파치 2.0은 아파치 데몬이 단독모드(Standalone)으로만 동작하도록 지원하기 때문에 서버의
   운영타입과 관련된 지시자인 ServerType 지시자가 없어졌다.
(2) StartServers, MinSpareServers, MaxSpareServers, MaxClients, MaxRequests-PerChild 등의
    지시자는 서버의 프로세스 개수를 지정하는 지시자였는데 이 모든 지시자들의 MPM모듈의 메뉴로
    흡수되었다.
(3) 1.3버전에서 포트넘버를 지정하던 Port라는 지시자를 없애고 Listen이라는 지시자를 사용한다.
    또한 포트넘버를 Listen 지시자 이외에 ServerName 지시자뒤에 호스트명에서 지정해야 한다.
(4) 개인 사용자의 웹 디렉토리의 경로는 나타내는 UserDir 지시자의 기본값이 disable로 설정되어
    있다. 만약 활성화시키려면 disable을 public_html 등으로 변경해야 한다.
(5) 1.3 버전에서는 DSO 모듈 설정을 위해 httpd.conf파일안에 AddModule, ClearModuleList 등의
   지시자를 사용하였지만 2.0에서는 Include지시자를 이용하여 conf.d디렉토리에 있는 conf파일을
   불러 읽어 들이게 할 수 있다. 물론 Include지시자를 사용하지 않으면 기존의 설정대로 할 수
   있다.
(6) srm.conf와 access.conf 파일을 독립적으로 사용하려면 Accessconfig와 ResourceConfig 지시자
   를 사용하였지만 2.0에서는 Include지시자를 사용한다.
(7) ErrorDocument 지시자로 메시지를 출력할 때 겹따옴표를 사용하지 않았지만, 2.0에서는 반드시
   겹따옴표를 사용해야 한다.
(8) 그 외에 AgentLog, ReferLog, RefererIgnore, FancyIndexing 등이 사용되지 않는다.

3. apache의 환경설정
(1) apache의 환경설정파일
   아파치 2.0 버전에서도 httpd.conf 파일에서 모든 환경설정을 다하도록 되어 있다.
(2) httpd.conf
   1) 구성: 1.3 버전과 마찬가지로 크게 3가지 부분으로 구성된다.
    ㄱ. Global Environment: 아파치를 전반적으로 제어하는 부분(전체환경설정)
    ㄴ. Main Server Configuration: 가상호스트에서 처리되는 않는 요청을 모두 처리해주는 주서버
                                  또는 기본 서버의 작동을 제어하는 부분(메인서버 환경설정)
    ㄷ. Virtual Host: 다른 IP와 호스트 이름을 처리하는 가상호스트 설정부분
   2) 주요설정 : httpd.conf파일은 세가지 섹션 설정으로 구성되어 있다.
    ### Section 1: Global Environment
     -ServerRoot "/usr/local/apache": 웹서버가 설치되는 디렉토리를 나타낸다. 이 곳에 환경설정
                                     파일, log파일, 에러파일, 실행바이너리 등이 위치한다.

     -ScoreBoardFile /usr/local/apache/logs/httpd.scoreboard
       => Internal server process정보를 기록할 때 사용한다. 모든 아키텍쳐에서 요구되는 것은 아
         니며, 필요한 경우 아파치 실행 프로세스의 값이 겹치지 않도록 해주면 된다.

     -PidFile /usr/local/apache/logs/httpd.pid : 서버가 시작할 때 자신의 프로세스 ID를 기록할
                                                파일을 나타낸다.

     -Timeout 300 : 받기/보내기 타임 아웃 시간을 설정한다. 설정시간 단위는 초이다.

     -KeepAlive On : 지속적인 접속을 허가할 것인지 말 것인지를 설정하는 부분이다. 즉, 하나의
                    프로세스가 실행됐을 때 처음부터 끝까지 이 프로세스를 요청한 사용자에게 작
                    업을 할 수 있도록 하는 기능이다. 이것을 사용하는 이유는 성능저하 때문인데,
                    예를 들면 자식프로세서가 한 가지 일만 처리하고 죽는 것이 아니라 다음의 일
                    도 처리함으로써 성능 향상을 꾀한다.

     -MaxKeepAliveRequests 100 : KeepAlive가 설정되어 있을 때, 지속적인 접속 기간 동안 처리할
                                수 있는 요청 갯수를 설정하는 부분이다. 클라이언트의 요청을 몇
                                번이나 처리하고 다시 처음 상태로 돌아가는지를 설정한다. 최대
                                요청갯수 0을 넣으면 무한대이다. 높은 성능을 내기 위해서는 높은
                                값을 써 넣는다.

     -KeepAliveTimeout 15 : keepAlive가 설정된 상태에서 클라이언트의 요청이 타임 아웃되는 시간
                           을 나타내며 초단위이다.

     -# prefork MPM
      <IfModule prefork.c>
      StartServers       8             // 몇개의 자식 프로세스를 처음에 미리 띄울것인지 지정
      MinSpareServers    5             // 최소로 유지해야할 여분의 자식프로세스수
      MaxSpareServers   20             // 최대 제한되어야 할 여분의 자식프로세스수
      MaxClients       150             // 클라이언트들이 동시에 접속할 수 있는 최대의 수 지정
      MaxRequestsPerChild  1000        // 자식 프로세스가 죽기전에 처리할 수 있는 요청의 개수
      </IfModule>
       => 아파치 1.3 버전에서 사용되는 모듈형태로 하나의 부모 프로세스가 작동하고 클라이언트의
         요청이 들어오면 자식프로세스를 생성하는 방식이다.

     -# worker MPM
      <IfModule worker.c>
      StartServers         2
      MaxClients         150
      MinSpareThreads     25   // 최소 여분의 스레드값
      MaxSpareThreads     75   // 최대 여분의 스레드값
      ThreadsPerChild     25   // 각 자식 프로세스당 생성하는 스레드값
      MaxRequestsPerChild  0   // 값이 0이면 자식프로세스는 죽지않고 계속 처리한다.
      </IfModule>
       => 프로세스 기반으로 작동하는 prefork MPM 방식과 각 자식 프로세스가 스레드로 클라이언트
         요청에 응답하는 혼합된 멀티 스레드 방식이다. 지정된 만큼의 프로세스와 각 프로세스마다
         스레드를 준비하여 많은 클라이언트의 요청을 받아들인다. prefork MPM에 비해 시스템 자원
         을 덜 소모한다.

     -# perchild MPM
      <IfModule perchild.c>
      NumServers           5  // 시작할 프로세스의 개수를 지정
      StartThreads         5  // 자식 프로세스에 의해서 실행되는 스레드의 수
      MinSpareThreads      5  // 최소 여분의 스레드수
      MaxSpareThreads     10  // 최대 여분의 스레드수
      MaxThreadsPerChild  20  // 자식프로세스가 생성할 수 있는 최대 스레드의 수
      MaxRequestsPerChild  0
      </IfModule>
       => 고정된 프로세스 개수를 정의하고 각 프로세스는 특정 스레드개수로 동작한다.

     -Listen 80 : 아파치 웹서버의 포트를 설정한다. 아파치 1.3버전의 Port 지시자를 대체한다.

     -Include conf.d/*.conf
       => 웹서버와 연동하는 프로그램과 관련된 환경파일을 불러오도록 지정한다.

     -LoadModule access_module modules/mod_access.so
       => 동적 객체 지원(Dynamic Shared Object, DSO)방식으로 관련 모듈을 적재한다. PHP 등을
         사용하려면 이 부분에 설정되어 있어야 한다.

     -#ExtendedStatus On
       => server-status 핸들러가 호출될 때 아파치 서버 상태를 좀 더 상세히 체크할 때 쓴다.

    ### Section 2: 'Main' server configuration
     -User apache
      Group apache
       => apache라는 사용자와 그룹을 가진 사용자들의 요청에 의해 웹서버가 실행되게 된다. httpd
        가 다른 사용자 또는 그룹 권한으로 실행하게 하려면 우선은 httpd가 root사용자 권한으로
        실행되고 나서 설정한 다음에 사용자권한으로 전환한다.

     -ServerAdmin root@posein.com : 서버에 문제가 발생했을 경우 보낼 관리자의 이메일주소를 적
                                   는다.

     -ServerName www.posein.com:80 : 서버의 도메인이름을 적는다. 만약 도메인이 없을 경우에는
                                    IP를 적는다. 실제 이름이 아닌 가상의 이름도 가능하고,
                                    추가로 2.0버전부터는 도메인명 뒤에 포트번호를 명기하도록
                                    하고 있다.

     - UseCanonicalName On : 아파치가 자신의 URL 생성시 어떤 특정한 법칙에 따라 생성을 하도록
                            지정하는 지시자이다. On이면 서버이름과 포트를 이용한 명칭을 생성
                            하고, Off이면 클라이언트에게 제공하는 호스트이름과 포트를 생성하게
                            된다.

     -DocumentRoot "/usr/local/apache/htdocs": URL상의 서버 root문서가 위치하는 디렉토리를 적
                                              는다.

     - <Directory /usr/local/apache/htdocs>
           Options Indexes FollowSymLinks
           AllowOverride None
           Order allow,deny
           Allow from all
       </Directory>
        => 특정 디렉토리를 제어할 때 사용하는 지시자를 <Directory /> ... </Directory>의 형태로
          작성하며, 각각의 디렉토리에 관한 권한등의 여러 설정등을 한다.
          * Options
            NONE : 어떤 옵션도 이용할 수 없으므로 모든 접근을 거부
            ALL : MultiViews 옵션을 제외한 모든 옵션을 부여
            Indexes : URL에 지정된 디렉토리에(index.html 같은) 지정된 파일이 없을 경우 디렉토
                     리의 파일목록을 보여주는 옵션
            Includes : 서버측의 추가적인 정보를 제공(SSI:Server Side Includes)
            FollowSymLinks : 디렉토리의 심볼릭 링크 사용 가능
            ExecCGI : CGI 스크립트를 실행할 수 있도록 함
            IncludesNOEXEC : SSI는 허용하지만 #exec 명령과 CGI 스크립트 #include 불허
            MultiViews : All 옵션이 설정되었을 때만 지정된 목록의 multiviews를 허용하는 것으로
                        유사한 파일이름을 찾아주는 기능을 실행한다. 예를 들면 index라고만 입력하
                        더라도 index.*를 찾아서 보여준다.
          * AllowOverride: 사용자 인증에 관련된 지시자로 클라이언트가 웹서버의 특정 디렉토리에
                          접근할 때 해당 디렉토리에 있는 유저 인증 파일인 .htaccess 파일을
                          읽게 되는데, 여기를 None으로 설정하면 아파치 서버는 이 파일을 무시
                          하게 된다.
           None : AllowOverride를 사용하지않는다. 즉 유저 인증파일을 사용하지 않는다.
           All : httpd.conf파일의 AccessFileName 지시자로 설정한 파일을 사용하며 또한 지시자를
                사용할 수 있다.
           AuthConfig : AccessFileName 지시자에 명시한 파일에 대해서 사용자 인증 지시자 사용을
                       허락한다. AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName,
                       AuthType, AuthUserFile, require등을 사용할 수 있다.
           FileInfo : AccessFileName 지시자로 설정한 파일에 대해서 문서 유형을 제어하는 지시자
                     사용을 허락한다. AddEncoding, AddLanguage, AddType, DefaultType, ErrorDo
                     cument, LanguagePriority등을 사용할 수 있다.
           Indexes : AccessFileName 지시자로 설정한 파일에 대해서 디렉토리 Indexing을 제어하는
                    지시자 사용을 허락한다. AddDescription, AddIcon, AddIconByEncoding, AddIco
                    nByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgno
                    re, IndexOptions, ReadmeName등을 사용할 수 있다.
           Limit : AccessFileName 지시자로 설정한 파일에 대해서 호스트 접근을 제어하는 지시자
                  사용을 허락한다. Allow, Deny, order 등을 사용할 수 있다.
           Options : AccessFileName 지시자에 명시한 파일에 대해서 Options 그리고 XBiHack 등과
                    같은 지시자 사용을 허락한다. Options, XBitHack등을 사용할 수 있다.
          * Order
            => Order명령은 해당 디렉토리에 대한 IP, DNS 필터링의 순서를 설정한다. Allow는 호스
              트 접근을 허락하며, Deny는 접근을 불허한다. Allow from all은 모든 호스트로부터의
              접근을 허락한다는 뜻이며, Deny from all은 모든 호스트로부터의 요청을 거부한다는
              뜻이다.
                예) Order deny, allow
                    Deny from all
                    Allow from 호스트명

     - #<Directory /home/*/public_html>
       #    AllowOverride FileInfo AuthConfig Limit
       #    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
       #    <Limit GET POST OPTIONS PROPFIND>
       #        Order allow,deny
       #        Allow from all
       #    </Limit>
       #    <LimitExcept GET POST OPTIONS PROPFIND>
       #        Order deny,allow
       #        Deny from all
       #    </LimitExcept>
       #</Directory>
         => 개인 홈페이지 디렉토리에 대한 접근 권한을 설정한다. <Limit> ~ </Limit>로 각각의 접근
           을 제어할 수 있다.

     -UserDir public_html
       => 사용자의 개인 홈페이지의 문서가 위치하는 디렉토리명을 적는다. 기본값이 public_html
         이지만, 너무 길다고 생각되면 www나 web등으로 바꿔도 된다.

     -DirectoryIndex index.html index.php
       => 디렉토리의 인덱스파일(처음열리는 파일)로 사용할 파일이름을 적는다. 기본 index.html에
         index.htm, index.php, index.php3 index.shtml등을 추가하도록 한다.

     - AccessFileName .htaccess
        => 각각의 디렉토리의 접근을 제어하는 정보를 가진 파일 이름을 지정하며 웹 클라이언트들
          이 .htaccess파일을 볼 수 없도록 설정한다. 여기에서 사용하는 .htaccess는 권한정보를
          가지고 있으므로 보안유지 차원에서 접근을 허용해서는 안된다. 즉, 파일을 제어하려는
          디렉토리에 넣어 사용한다.

     - <Files ~ "^\.ht">
           Order allow,deny
           Deny from all
       </Files>
         => 웹 클라이언트들에게 .htaccess파일을 볼 수 있는지 여부를 결정한다.

     -TypesConfig /usr/local/apache/conf/mime.types
        => mine.types파일 또는 이에 해당하는 파일을 찾을 위치를 결정한다. MIME은 Multipurpose
          Internet Mail Extension의 약자로 클라이언트 브라우저에게 어떠한 유형의 자료를 전송
          할 것인지를 조절해 주는 기능이다.

     - DefaultType text/plain : 파일 확장자를 정의해 두는 것으로 MIME타입을 알 수 없는 문서에
                              대하여 사용할 기본 MIME타입을 설정한다. 기본값은 text/plain이며,
                              이 값으로 설정하면 Mime Type을 결정하지 못할때는 기본 텍스트문
                              서 결정한다. 주로 서버에 문서 파일이 많을 경우에 사용한다. 웹 브
                              라우저상에서 실행 프로그램이나 이미지 등 바이너리인 경우 웹브라
                              우저가 바이너리라고 해석하게 하기 위해서 "application/octet-str
                              eam" 과 같은 형식을 적어주어야 한다. 이것은 웹브라우저가 실행파
                              일 등을 텍스트문서로 착각하고 브라우저상에 표시하지 않게 하기
                              위함이다.

     - <IfModule mod_mime_magic.c>
           MIMEMagicFile /usr/local/apache/conf/magic
       </IfModule>
         => mod_mime_magic 모듈을 사용할 경우 해당 파일의 내용으로 파일 타입 힌트를 얻는 역할
           을 한다. MIMEMagicFile명령은 암시를 정의하는 모듈이 어디에 위치하고 있는지를 알려
           주는 것으로 이것을 사용하기 위해서는 해당 모듈을 탑재해야 한다.

     -HostnameLookups Off : 클라이언트에서의 접속 이름 또는 IP주소만을 기록할 지를 여부를 체크
                           한다. 예를 들면 posein.com은 On값이 되며, 192.168.0.1은 Off값이다.

     - ErrorLog /usr/local/apache/logs/error_log
       => 웹서버가 에러가 발생했을 경우 에러에 관한 기록파일을 설정한다. 참고로 <VirtualHost>
         지시자에서 ErrorLog 설정을 하지 않았다면 여기에서 언급한 설정을 따른다. 로그 파일의
         경우는 계속해서 사용량이 증가하므로 수시로 용량을 줄여야 한다.

     - LogLevel warn
        => 로그메시지의 크기를 제어하는 부분이다. 옵션에는 debug, info, notice, warn, error,
          crit, alert!, emerg 등이 있다.

     - LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
       LogFormat "%h %l %u %t \"%r\" %>s %b" common
       LogFormat "%{Referer}i -> %U" referer
       LogFormat "%{User-agent}i" agent
        => CustomLog 지시자에서 사용할 별명을 정의하는 곳으로 각각의 의미는 다음과 같다.
          %h : 호스트명
          %l : 리모트 로그이름
          %u : 사용자 인증에 사용된 유저명
          %t : 시간
          %r : 요청한 내용의 첫번째 줄
          %s : 서버상태
          $b : 전송량(헤더 포함) -바이트수
          %{헤더} : 요구된 헤더 내용
          %U : 요구한 URL

     - CustomLog /usr/local/apache/logs/access_log common
        => 클라이언트들이 웹서버에 접근한 정보를 기록해 주는 access_log 파일의 위치를 설정한
          다. <VirtualHost> 지시자에서 이 설정 부분이 없을 경우 여기서 설정한 위치로 모
          두 저장된다. 가상 호스트별로 따로 접근 로그파일을 만들고 싶으면 이 설정을 각각의
          <VirtualHost> 지시자 안에 넣으면 된다.

     - #CustomLog /usr/local/apache/logs/referer_log referer
       #CustomLog /usr/local/apache/logs/agent_log agent
         => 브라우저(agent)와 접속자(referer) 기록 파일을 갖고자 한다면 위 주석을 제거한다.

     - #CustomLog /usr/local/apache/logs/access_log combined
         => access, agent, referer 정보를 하나의 파일에 모두 저장하기를 원한다면 combined 옵션
           을 이용한다.


     - ServerTokens Full
       => 아파치에서 헤더에 의해 전송되는 정보를 어디까지 보여줄 것인가를 설정하는 지시자이다.
         * 값에 따른 정보 제공
          Prod[ductOnly] : 웹서버 종류만 표기된다. 예) Server:Apache
          Major : 아파치의 주버전 정보까지만 보여줌 예) Apache/2
          Minor : 아파치 하위버전 정보까지 보여줌 예) Apache/2.0
          Min[imal]: Prod 키워드 제공정보 + 웹서버 버전 예) Server:Apache/2.0.46
          OS: Min 키워드 제공 정보 + 운영체제 예) Server:Apache/2.0.46 (Unix)
          Full: OS 키워드 제공정보 + 설치된 모듈(응용프로그램) 정보
               예) Server: Apache/2.0.46 (Unix) PHP/4.3.2

     - ServerSignature On
        => 아파치 서버가 생성하는 페이지(에러문서, FTP 디렉토리 list, mod_status, mod_info,
          output, CGI 생성 문서 제외)에 서버 버전과 가상호스트 이름을 포함하는 행을 넣는 것을
          설정한다. 옵션에는 On | Off | Email 등이 있고 On으로 설정하면 서비스중인 가상호스트
          의 이름과 서버 버전을 포함한 라인을 보여주고, Email의 경우 ServerAdmin으로의 mailto:
          링크도 포함된다.

     - Alias /icons/ "/usr/local/apache/icons/"
        => 웹 문서 루트 디렉토리(DocumentRoot dir)외의 다른 디렉토리에서도 문서를 저장할 수
          있게 해 주는 별칭을 설정하는 부분으로 별칭의 설정은 Alias /별칭/ "path"하면 된다.
          디렉토리 설정은 앞에서 사용한 옵션을 사용하면 되고, 별칭은 하나 이상 여러 개를 만들
          어 사용 가능하기 때문에 필요한 만큼 만들어 사용하면 된다.

     - ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
        => Alias와 같은 기능을 하는 지시자로 CGI 스크립트파일이 있는 경로를 지정한다.

     - # Redirect permanent /foo http://www.example.com/bar
        => 하나의 도메인으로 메일 서버와 웹서버를 사용하는 경우에 유용하다. 즉 domain.com 을
          메일서버로 쓰고, www.domain.com을 웹서버를 쓰는 경우 www.domain.com만 입력하면 웹페
          이지가 열리고 domain.com을 입력하면 웹페이지가 안 열리는 경우 아래와 같이 입력하면
          된다.
            예) Redirect permanet /    http://www.domain.com

     - IndexOptions FancyIndexing VersionSort
        => 디렉토리 목록을 표시해 줄 때 표준으로 보여줄 것인지, 아니면 파일에 대한 약간의 정보
          를 추가해서 표시해 줄 것인지를 결정한다. 만약 표시한 파일이 존재하지 않을 경우 디렉
          토리와 파일들의 목록을 보여줄 때 디렉토리와 속성에 따른 아이콘, 파일 크기, 파일 시간
          을 사용할 지 여부를 설정한다. 추가로 VersionSort라는 것이 있는데 이것은 파일버전순으
          로 인덱스해주는 옵션이다.

     - AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

       AddIconByType (TXT,/icons/text.gif) text/*
       AddIconByType (IMG,/icons/image2.gif) image/*
       AddIconByType (SND,/icons/sound2.gif) audio/*
       AddIconByType (VID,/icons/movie.gif) video/*

       AddIcon /icons/binary.gif .bin .exe
       AddIcon /icons/binhex.gif .hqx
       AddIcon /icons/tar.gif .tar
       AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
       AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
       AddIcon /icons/a.gif .ps .ai .eps
       AddIcon /icons/layout.gif .html .shtml .htm .pdf
       AddIcon /icons/text.gif .txt
       AddIcon /icons/c.gif .c
       AddIcon /icons/p.gif .pl .py
       AddIcon /icons/f.gif .for
       AddIcon /icons/dvi.gif .dvi
       AddIcon /icons/uuencoded.gif .uu
       AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
       AddIcon /icons/tex.gif .tex
       AddIcon /icons/bomb.gif core

       AddIcon /icons/back.gif ..
       AddIcon /icons/hand.right.gif README
       AddIcon /icons/folder.gif ^^DIRECTORY^^
       AddIcon /icons/blank.gif ^^BLANKICON^^
         => IndexOptions에서 FancyIndexing으로 설정되어 있을 경우에 사용되며 각각의 파일 및
           확장자에 따른 아이콘의 모양을 정해준다.

     - DefaultIcon /icons/unknown.gif
         => 앞에서 설정되어 있지 않은 파일에 대하여 사용하는 아이콘이다.

     - #AddDescription "GZIP compressed document" .gz
       #AddDescription "tar archive" .tar
       #AddDescription "GZIP compressed tar archive" .tgz
         => 서버에서 만들어지는 인덱스에 있는 파일 뒤에 짧은 주석을 달 수 있도록 한다. 위의
           경우에는 확장자가 .gz이면 "GZIP compressed document"라는 설명을 보여주게 된다.

     - ReadmeName README
       HeaderName HEADER
        => 서버가 디렉토리 목록 뒤에 붙여넣을 README 파일의 이름을 설정하며, HeaderName은 디렉
          토리 인덱스 앞에 내용을 넣을 파일의 이름을 설정한다. 즉, 디렉토리 목록을 보여줄 때
         화면 아래부분에 간단한 설명이 들어갈 파일을 지정한다. 예를 들면, 서버는 처음 name.ht
         ml 파일을 찾고 존재하면 그 내용을 포함한다. 만약 파일이 존재하지 않는다면 name.txt를
         찾고 txt내용을 포함한다.

     - IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
        => 디렉토리를 인덱스할 때 파일을 보이지 않게 설정하는 부분이다.

     - AddEncoding x-compress Z
       AddEncoding x-gzip gz tgz
        => 일부 브라우저에서 전송을 받으면서 정보를 압축해제할수 있도록 허용할 때 사용하는 것
          으로 모든 브라우저에서 이 기능을 지원하지는 않는다.

     - AddLanguage da .dk
         => 문서의 언어를 표시한다. 즉, 내용 협상 과정을 통해 브라우저가 이해하는 언어의 문서를
           제공할 수 있다. 폴란드어의 경우 펄과 구분하기 위해 pl .po로 포기한다.

     - LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw
         => 내용 협상 과정에서 같은 순위를 가질 때 어느 언어에게 우선권을 부여할 것인지를 설정
           한다. 설정은 내림차순으로 나열한다.

     - AddDefaultCharset ISO-8859-1
        => 기본적으로 적용되는 웹문서의 언어를 지정한다. 만약 웹페이지에 한국어를 기본으로
          지정하려면 EUC-KR 이라고 설정한다.

     - AddCharset ISO-8859-1  .iso8859-1  .latin1
        => 추가로 지원하는 웹 문서의 언어를 설정한다.

     - AddType application/x-tar .tgz
       => 추가적으로 지원될 파일들을 적는다.
        예) php4를 사용할 경우
           AddType application/x-httpd-php .php .htm .html .inc .php4 .php3
           AddType application/x-httpd-php-source .phps
            => 즉 mime.types의 수정없이 mime을 설정가능하게 해준다.

     - #AddHandler cgi-script .cgi
        => 특정 파일 확장자나 처리기에 연결하거나 특정 파일 타입에 특정 동작 연결을 설정하는
          부분이다. 즉, 어떤 파일 확장자를 파일 종류와 무관하게 작동할 수 있게 "Hander"에 결
          합되도록 설정해 주는 것이다.

     - # Format: Action media/type /cgi-script/location
       # Format: Action handler-name /cgi-script/location
        => 매칭되는 파일이 불려질 때마다 해당 미디어 타입에 맞는 스크립트를 실행할 수 있으며,
          이 설정은 자주 사용되는 CGI 파일 프로세서에 대해 반복적으로 URL을 사용하지 않아도
          된다.

     - # Customizable error responses come in three flavors:
       # 1) plain text 2) local redirects 3) external redirects
       #
       # Some examples:
       #ErrorDocument 500 "The server made a boo boo."
       #ErrorDocument 404 /missing.html
       #ErrorDocument 404 "/cgi-bin/missing_handler.pl"
       #ErrorDocument 402 http://www.example.com/subscription_info.html

         => 존재하지 않는 페이지를 요청받을 경우 또는 해당 디렉토리의 퍼미션이 없을 경우 보여
           주는 에러 메시지설정이다. 관리자 임의로 다음 3가지 중 선택해서 출력해 줄 수 있다.
             1) plain text - 보통 텍스트 화면
             2) local redirects - 내부 URL로 방향 전환
             3) external redirects - 외부 URL로 방향 전환
           또한 각 에러에 대한 문서전달 방법을 예이다. 아파치 1.3버전에서는 큰따옴표(") 하나로
           오류 메시지를 전달하였으나 2.0버전에서부터는 양쪽으로 큰따옴표를 붙여 사용한다.

     - BrowserMatch "Mozilla/2" nokeepalive
       BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
        => HTTP 응답 방식을 수정한다. 첫번째 지시자는 Netscape 2.x와 유사한 브라우저에 대해
          KeepAlive기능을 사용하지 못하게 하는 설정이다. 두번째 지시자는 HTTP/1.1을 잘못 구현
          한 301,302(redirect)응답에 대해 KeepAlive를 제대로 지원하지 못하는 MS Explorer 4.0b2
          를 위한 설정 등이다.

     - BrowserMatch "RealPlayer 4\.0" force-response-1.0
       BrowserMatch "Java/1\.0" force-response-1.0
       BrowserMatch "JDK/1\.0" force-response-1.0
         => HTTP/1.1 응답도 제대로 처리하지 못해 HTTP/1.1 spec를 위반하는 브라우저에 대해
           HTTP/1.1응답을 하지 않게 하는 설정이다.

     - #<Location /server-status>
       #    SetHandler server-status
       #    Order deny,allow
       #    Deny from all
       #    Allow from .your-domain.com
       #</Location>
         => 서버 상태정보를 허용할 서버이름을 적어준다. 이 설정을 하면 웹브라우저를 이용하여
           http://localhost/server-status 라고 입력하면 웹서버의 상태를 파악할 수 있다.

     - #<Location /server-info>
       #    SetHandler server-info
       #    Order deny,allow
       #    Deny from all
       #    Allow from .your-domain.com
       #</Location>
         => 원격 서버의 환경 설정을 보고받을 수 있다. 주의할 점은 mod_info.c가 로드되어 있어야
           한다. http://localhost/server-info 라고 입력하면 서버의 환경 설정을 확인할 수 있다.

     - #    ProxyVia On
        => HTTP/1.1 "Via:"헤더를 처리할 지 여부를 설정하는 부분이다. 옵션에는 Off | On | Full
          | Block 등이 있으며 Full은 서버 버전을 포함하며, Block은 나가는 모든 자료에 "Via"를
          제거한다.

     - #    CacheRoot "/usr/local/apache/proxy"
       #    CacheSize 5
       #    CacheGcInterval 4
       #    CacheMaxExpire 24
       #    CacheLastModifiedFactor 0.1
       #    CacheDefaultExpire 1
       #    NoCache a-domain.com another-domain.edu joes.garage-sale.com
        => 캐쉬 기능을 enable하기 위해서는 #을 제거한다.


    ### Section 3: Virtual Hosts : 가상 도메인을 설정하는 부분으로 웹호스팅할 경우에 설정한다.
     -NameVirtualHost : 한 서버에서 여러도메인을 사용할 경우 설정해야 한다.
     예) 192.168.1.125라는 IP하나를 가지고 서버를 구축하여 abc.co.kr이라는 도메인을 웹호스팅
        할 경우의 설정
        NameVirtualHost 192.168.1.125
        ------------------------------------
       <VirtualHost 192.168.1.125>
          ServerAdmin admin@abc.co.kr
          DocumentRoot /home/abc/www
          ServerName www.abc.co.kr
          ServerAlias *.abc.co.kr                   // abc.co.kr앞에 붙는 모든 2차도메인을 모
                                                    //두 abc.co.kr이라는 홈페이지가 열리도록
                                                    //설정을 할 때 쓴다.
          ErrorLog logs/abc-error-log
          CustomLog logs/abc-access_log common
       </VirtualHost>

4. apache의 실행
(1) 데몬파일을 이용한 실행
  /usr/local/apache/bin/httpd stop 한 후에 /usr/local/apache/bin/httpd start한다.
   또는
  /usr/local/apache/bin/httpd restart
(2) 스크립트파일을 이용한 실행(권장)
  /usr/local/apache/bin/apachectl stop 한 후에 /usr/local/apache/bin/apachectl start한다.
   또는
  /usr/local/apache/bin/apachectl restart
(3) 부팅할 때마다 자동적으로 실행하도록 설정하기
  /etc/rc.d/rc.local파일에 /usr/local/apache/bin/apachectl start라고 추가한다.

5. httpd명령의 사용
(1) 사용법
   httpd [option] [command] [file_name]
(2) option
   -t : 환경파일인 httpd.conf의 파일설정을 점검한다.
   -f : 새로 설정한 conf파일이 있을 경우 그 설정파일로 아파치 데몬을 띄운다.
   -S : 현재 시스템에 설정되어 있는 가상 호스트를 보여준다.
   -l : 현재 컴파일된 모듈에 대한 목록을 보여준다.
(3) 사용예
   1) /usr/local/apache/bin/httpd -t  => 문법적으로 httpd.conf의 파일 설정을 점검한다.
      Syntax OK                       => 아무 이상이 없음을 나타낸다.
   2) /usr/local/apache/bin/httpd -f httpd_test.conf => httpd_test.conf파일의 설정대로 데몬을
                                                       띄운다.
   3) [root@linux245 root]# httpd -l
      Compiled in modules:
        core.c
        prefork.c
        http_core.c
        mod_so.c

(참고) apachectl 스크립트를 이용한 httpd.conf파일의 설정 점검
/usr/local/apache/bin/apachectl configtest

6. apache의 확인
(1) 데몬의 확인 : 아파치데몬이 떠 있는지 확인한다.
   [root@house apache]# ps -aux |grep httpd 또는 ps -aux |grep apache
    root      1515  0.0  1.2  3464 1652 ?        S    23:22   0:00 /usr/local/apache
    nobody    1516  0.0  1.6  3748 2064 ?        S    23:22   0:00 /usr/local/apache
    nobody    1517  0.0  1.3  3548 1720 ?        S    23:22   0:00 /usr/local/apache
    nobody    1518  0.0  1.3  3548 1720 ?        S    23:22   0:00 /usr/local/apache
    nobody    1519  0.0  1.3  3548 1720 ?        S    23:22   0:00 /usr/local/apache
    nobody    1520  0.0  1.3  3548 1720 ?        S    23:22   0:00 /usr/local/apache
    nobody    1523  0.0  1.3  3552 1740 ?        S    23:22   0:00 /usr/local/apache
     => 어떠한 명령을 가지고 실행했느냐에 따라 달라진다. 만약 정상적으로 작동한다면 아파치데몬
       의 리스트를 보여준다. 웹서비스 프로세스들은 초기에 구동된 httpd 데몬 1개만 root권한이고
       나머지는 nobody권한으로 데몬이 실행된다. 일반사용자들이 웹브라우저를 통해서 연결되는
       데몬은 nobody권한의 httpd이다.

7. 가상호스트(VirtualHost) 구성하기
(1) 설명: 서버를 구성하면 하나의 IP주소에 하나의 도메인이 부여되어 웹서버를 구성하게 된다.
          가상호스트란 하나의 IP주소를 가진 서버에 또 다른 여러 도메인이 부여되어 각각의 웹페
          이지를 보여주게 하는 것을 말한다.
(2) httpd.conf의 가상호스트 구성
   1) 개요: httpd.conf의 가상호스트는 이 파일의 마지막 부분인 'Section 3: Virtual Hosts'라는
           부분에서 설정하면 된다.
   2) 기본구성
    ㄱ. 기본예
       #NameVirtualHost *

       #<VirtualHost *:80>
       #    ServerAdmin webmaster@dummy-host.example.com
       #    DocumentRoot /www/docs/dummy-host.example.com
       #    ServerName dummy-host.example.com
       #    ErrorLog logs/dummy-host.example.com-error_log
       #    CustomLog logs/dummy-host.example.com-access_log common
       #</VirtualHost>
    ㄴ. 주요항목설명
      a. NameVirtualHost *
          => 하나의 IP주소로 이름기반 가상호스트를 할 경우에 사용한다. 기본적으로 주석처리가
            되어 있는데, 주석을 제거하고 *부분에 IP주소를 적으면 된다.
      b. <VirtualHost *> ~ </VirtualHost>
          => 가상호스트를 지정하는 태그이다. 이 태그안에 가상호스트관련 설정을 하면 된다.
      c. ServerAdmin webmaster@dummy-host.example.com
          => 해당도메인을 관리하는 관리자 이메일주소를 적는부분이다.
      d. DocumentRoot /www/docs/dummy-host.example.com
          => 기본 웹문서가 위치하는 디렉토리를 적는다.
      e. ServerName dummy-host.example.com
          => 도메인을 적는다.
      f. ErrorLog logs/dummy-host.example.com-error_log
          => 에러로그를 기록할 파일을 적는다.
      g. CustomLog logs/dummy-host.example.com-access_log common
          => 접속기록등 일반적인 로그를 기록할 파일을 적는다.
      h. ServerAlias *.example.com
          => 지정한 기본 도메인이외에 또 다른 호스트네임도메인을 적을 때 사용할 수 있다.
            조회하는 서브 도메인에 대하여 resolving이 되어야 한다.
            보통 ServerName항목과 연동해서 사용한다.
              예) ServerName    linux.co.kr
                  ServerAlias   www.linux.co.kr
(3) 실습
   1) 개요: 리눅스에서는 임의의 도메인을 가지고 DNS보다 먼저 참조하는 /etc/hosts를 이용하여
           가상호스트를 실습할 수 있다.
   2) 조건
    ㄱ. 서버로 사용할 IP주소를 192.168.10.120이라고 가정한다.
    ㄴ. 주 도메인을 www.linux.com이라 하고, 웹문서는 기본 웹문서가 위치하는 /usr/local/apache/
       htdocs에 위치시킨다.
    ㄷ. 추가로 구성할 도메인을 www.flower.com이라 하고, 이 도메인의 웹문서는 flower라는 계정
       사용자의 기본 홈디렉토리인 /home/flower/public_html로 지정한다.
    ㄹ. 로그는 각각의 도메인을 포함하여 구성한다. 즉 www.linux.com은 linux.com-access_log로
       하고, www.flower.com은 flower.com-access_log로 구성한다.
   3) 아래와 같이 미리 작업을 하도록 한다.
     [root@www root]# vi /etc/hosts
     # Do not remove the following line, or various programs
     # that require network functionality will fail.
     127.0.0.1       linux224        localhost.localdomain   localhost
     192.168.10.120  www.linux.com
     192.168.10.120  www.flower.com
     192.168.10.120  flower.com
(4) 구성하기
    [root@www root]# vi /usr/local/apache/conf/httpd.conf
    NameVirtualHost 192.168.10.120:80

    <VirtualHost 192.168.10.120:80>
    ServerAdmin webmaster@linux.com
    DocumentRoot /usr/local/apache/htdocs
    ServerName www.linux.com
    ServerAlias *.linux.com            // resolve가 되어야 한다.
    ErrorLog logs/linux.com-error_log
    CustomLog logs/linux.com-access_log common
    </VirtualHost>
    <VirtualHost 192.168.10.120:80>
    ServerAdmin flower@flower.com
    DocumentRoot /home/flower/public_html
    ServerName www.flower.com
    ServerAlias flower.com            // resolve가 되어야 한다.
    ErrorLog logs/flower.com-error_log
    CustomLog logs/flower.com-access_log common
    </VirtualHost>
(5) 테스트
    [root@www root]# /usr/local/apache/bin/httpd -S
    VirtualHost configuration:
    192.168.10.120:80      is a NameVirtualHost
                           default server www.linux.com (/usr/local/apache/conf/httpd.conf:947)
                           port 80 namevhost www.linux.com (/usr/local/apache/conf/httpd.conf:947)
                           port 80 namevhost www.flower.com (/usr/local/apache/conf/httpd.conf:954)

우주곰:지구곰이 아닙니다.
지구곰이 아닙니다.
Categories (190)
Information (5)
About uzoogom (5)
My Advanced Linux (73)
Learning Linux (96)
OperatingSystem (5)
Databases (4)
Tips! (1)
OpenSource (1)
«   2018/06   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
  1. 2012/12 (2)
  2. 2012/04 (3)
  3. 2012/03 (6)
  4. 2012/02 (6)
  5. 2012/01 (2)