Linux/CentOS2012. 3. 6. 18:16

1. 아파치를 시동하기까지

   1.1. 웹 서버는 뭐고 아파치는 또 뭐냐?

무료 홈페이지 계정에 자신이 만든 홈페이지를 만들어서 업로드하는 건 무척이나 짜증나는 일입니다. 업로드한 HTML 문서가 잘못되면 HTML 문서를 다운 받아 수정하고 업로드하고 또 실수하면 다시 수정해야 하거든요. HTML 문법을 잘 알면 이럴 필요까지는 없겠지만 웹 에디터를 이용해서 작업하는 분들은 여간 골치 아픈 게 아닙니다.

이럴 때 리눅스 서버에 웹 서버를 구축해서 테스트해 보는건 어떨까요? 웹 서버 아파치를 이용해서 전 세계에 공개하기 전에 랜 환경으로 홈페이지를 테스트해 보는 겁니다. 아파치라~! 갑자기 웬 인디언 이름이냐고요? 아파치는 세계에서 갖아 잘 나가는 웹 서버의 하나입니다. 가장 잘 나간다는 말은 곧 많은 사람들이 애요한다는 말이죠.

그러면 여기서 잠시 웹 서버는 무엇이고, 아파치는 무엇인지 알아봅시다. 리눅스 서버가 제공하는 서비스 가운데 가장 인기 있는 것이 바로 이 웹 서비스라고 한다면 호기심 많은 여러분이 그냥 지나칠 수는 없겠죠?


     1.1.1. 웹 서버란 무엇인가?

웹 서버는 웹 서비스를 하는 컴퓨터입니다. 너무 설명이 간단하다고요? 말 그대로이지만 좀더 쉽게 설명해 보죠.

우리가 인터넷을 항해하는 데 필수 조건인 배의 역할을 하는 게 무엇입니까? 네, 웹 브라우져죠. 인터넷 익스플로러든 넷스케이프 네비케이터든 어쨌든 이 웹 브라우저가 있어야 인터넷을 항해할 수 있습니다.

그렇다면 우리는 이 배를 타고 어디로 여행을 떠나는 것이죠? 그 목적지에 해당하는 곳이 바로 웹 서버입니다. 우리가 웹 브라우저의 주소 www.yahoo.co.kr이라고 입력하면 웹 브라우저는 이 주소에 해당하는 웹 서버에게 가서 서비스를 달라고 하죠.

그럼 그 요청을 받은 웹 서버는 클라이언트에게 서비스를 해주는 것입니다.

덧붙여서 HTTP(Hyper Text Transper Protocol)에 대해서 얘기하죠. 웹 브라우저의 주소를 입력하는 창을 주의 깊게 살펴보면 www.yahoo.co.kr이라고 입력하기 전에 앞서 http://라는 것이 붙는 걸 알 수 있습니다. 즉 웹브라우저는 해당 주소의 웹 서버에게 http라는 프로토콜로 서비스를 요청한다는 거죠.

우리가 이제까지 배운 내용에 따르면 서버의 서비스 요청에 응답하기 위해서 서버에는 데몬이라고 하는 서버 프로그램이 항상 떠 있다는 것을 알 수 있습니다. 이를테면 telnet 클라이언트 요청에 대해서 telnetd라는 데몬이, ftp 클라이언트 요청에 대해서 ftpd라는 데몬이 떠 있는 것처럼 웹 서비스에 대해서는 httpd 데몬이 떠 있습니다.

서버 컴퓨터에는 웹 서비스에 대해 httpd 데몬이 항상 떠 있다가 웹 브라우저로 들어오는 요청, 즉 www.yahoo.co.kr이라고 주소를 입력한 http로 요청이 들어오면 httpd 데몬이 반응해서 웹 서비스를 해주게 되는 것입니다.

조금 어려운 내용인가요?

이것은 우리가 인터넷을 사용할 때 간단하게 주소만 입력하면 그 주소에 해당하는 컴퓨터의 웹 서버가 반응해서 웹 브라우저에 웹 문서를 보여 준다는 것을 좀더 구체적으로 알아본 것뿐입니다. 다른 내용들 처럼 너무 깊이 알 필요는 없고요.

     1.1.2. 아파치는 또 무엇이란 말인가?

자아~ 이제 웹 페이지를 보여 주는 웹 서버에 대해서는 알았는데, 아파치라는 게 또 무언지 알아보도록 하죠. 사실 아파치 웹 서버는 무척 사연이 깊은 웹 서버랍니다.

아파치는 1995년 가장 인기 있었던 웹 서버 가운데 하나인 NCSA HTTPD 1.3 버전을 기반으로 탄생하였습니다. 이 NCSA HTTPD 1.3에 패치 파일을 제공하던 사람들이 모여서 아예 자기들의 웹 서버를 탄생시킨 가죠. 그래서 이름이 A PAtCH server라는 말을 줄여서 아파치(Apache)가 된 것입니다.

처음에는 별것 없었으나 기존의 NCSA 웹 서버에 더욱 향상된 기능들을 탑재하여 업그레이드된 아파치 웹 서버를 계속 발표하였습니다. 현재는 인터넷 웹 서버 가운데 최고의 인기를 구가하는 스타가 되어버렸습니다.

아파치 웹 서버가 스타가 된 이유로는 공짜라는 점 뿐만 아니라 다른 상용 웹 서버에 못지 않은 성능과 안정성, 그리고 지속적인 업그레이드 서비스를 제공해 준다는 점 등을 들 수 있습니다. 우리가 설치하려는 리눅스용 아파치 외에도 마이크로소프트의 서버 운영체제인 윈도우 NT, 심지어 윈도우 95용으로도 베타 버전이 나와 있다는 것은 운영체제를 막론하고 폭넓은 사랑을 받고 있다는 것을 입증합니다.


   1.2. 아파치 패키지 설치하기

아파치 패키지 역시 다른 패키지들과 마찬가지로 처음 리눅스를 설치하면서 일부러 설치하지 않는 경우를 제외하고는 기본적으로 설치되어 있습니다. 일단 내 리눅스 서버에 아파치 패키지가 설치되어 있는지 확인해 보겠습니다.

1. rpm 명령으로 패키지를 확인합니다. 패키지 질의는 -qa 옵션을 사용합니다. 설치된 패키지 가운데 apache라는 이름을 가진 패키지를 검색하기 위해 grep 명령을 동시에 내립니다. 패키지가 설치되어 있는 사애라면 다시 설치할 필요 없이 곧바로 설정 파일을 편집해도 됩니다.

      # rpm -qa | grep apache ☜
      apacheconf-0.8.1-1
      apache-1.3.20-16
      apache-devel-1.3.20-16
      #
     

2. 패키지가 설치되지 않았다면 다음과 같이 아무런 메시지가 출력되지 않습니다. 이렇게 메시지가 출력되지 않은 경우에는 설치CD로부터 아파치 패키지를 인스톨하면 됩니다.

      # rpm -qa | grep apache ☜
      
      #
     

3. 리눅스 설치 CD-ROM을 /mnt/cdrom에 마운트 합니다.

      # mount /dev/cdrom /mnt/cdrom ☜
      mount : block device /dev/cdrom is write-protected, mounting read-only
      #
     

4. CD-ROM 안에 있는 디렉토리 중에서 RPM 패키지들이 모여 있는 곳으로 이동합니다.

      [root@dlug root]# cd /mnt/cdrom ☜
      [root@dlug cdrom]# ls ☜
      RedHat
      boot.cat
      dosutils
      . . .
      [root@dlug cdrom]# cd RedHat/ ☜
      [root@dlug RedHat]# ls ☜
      RPMS  TRANS.TBL base
      [root@dlug RedHat]# cd RPMS/ ☜
      [root@dlug RPMS]# pwd ☜
      /mnt/cdrom/RedHat/RPMS
      [root@dlug RPMS]#
     

5. rpm명령의 -Uvh 옵션으로 아파치 패키지를 인스톨 합니다.

      # rpm -Uvh apache-1.3.20-16.i386.rpm ☜
      Preparing...             ################################################# [100%]
       1:Apache..              ################################################# [100%]
      #	   
     


   1.3. 아파치 기본 설정하기

이제 리눅스 서버에 아파치가 설치되었습니까? 리눅스를 처음 설칳랄 때부터 설치했든지, 설치 Cd로부터 설치했든지 이제 여러분의 리눅스 서버는 웹 서버로 다시 태어날 준비가 끝났습니다. 이제 아파치 설정 파일의 기본적인 내용을 수정하고 아파치 서버를 시동할 마지막 준비를 하겠습니다.

1. vi에디터로 /etc/httpd/conf/httpd.conf 파일을 편집하겠습니다.

      # vi /etc/httpd/conf/httpd.conf ☜
     

2. Section 1: Global Environment 영역을 살펴보겠습니다. 먼저 웹 서버의 운영방식을 결정하는 서버 타입(ServerType)입니다. 서버 타입에 대해서는 전에 여러 차례 말씀드린 적이 있습니다만 FTP서버처럼 Xinetd 데몬을 거치지 않고 바로 응답 할 수 있는 스탠드얼론 방식을 적용합니다.

       . . .
      #
      ### Section 1: Global Environment
      #
      # The directives in this section affect the overall operation of Apache,
      # such as the number of concurrent requests it can handle or where it
      # can find its configuration files.
      #
      #
      # ServerType is either inetd, or standalone.  Inetd mode is only supported on
      # Unix platform.
      #
      ServerType standalone
      #
       . . .
	 

3. ServerRoot에는 아파치 서버의 본체가 있는 디렉토리를 지정합니다. 이후 환경설정 파일들의 디렉토리에 대해서는 이 디렉토리로부터 상대경로가 지정됩니다.

       . . .
      #
      # ServerRoot: The top of thd directory tree under which the server's
      # configuration, error, and log files are kept.
      #
      # Note! If you intend to place this on an NFS (or otherwise network)
      # mounted filesystem then please read the LockFile documentation
      # (available at URL:http://www.apache.org/docs/mod/core.html#lockfile);
      # you will save yourself a lot of trouble.
      #
      # Do NOT add a slash at the end of the directory path.
      #
      ServerRoot "/etc/httpd"
      #
       . . .
	 

4. 최근의 아파치 웹 서버의 버전에서는 아파치 설정 파일을 httpd.conf 파일로 통합하고 있습니다. 반드시 다음과 같이 아파치 설정 파일을 Resource와 Access에 주석 처리하여 httpd.conf가 이 파일들의 영향을 받지 않ㄷ고록 합니다. 특히 이 부분을 주의해서 보세요.

      #
      # In the standard configuration, the server will process this file,
      # srm.conf, and access.conf in that order.  The latter two files are
      # now distributed empty, as it is recommended that all directives
      # be kept in a single file for somplicity.  The commented-out values
      # Below are the built-in defaults.  You can have the server ignore
      # these files altogether by using "dev/null" (for Unix) or
      # "nul" (for win32) for the arguments to the directives.
      #
      #ResourceConfig conf/srm.conf
      #AccessConfig conf/access.conf

      #
      # Timeout: The number of seconds before receives and sends time out.
      #
	 

5. 아래로 내려가서 Timeout 설정을 살펴봅니다. 이 부분은 클라이언트가 요청한 정보를 받을 때까지 소요되는 대기 시간의 최대값으로, 네트워크 속도가 나쁠수록 수치값을 높게 설정하는 것이 좋습니다.

       . . .
      #
      # Timeout: The number of seconds before receives and sends time out.
      #
      Timeout 300
      #
       . . .
	 

6. 다음은 MaxKeepAliveRequests입니다. 클라이언트가 접속된 사긴 동안 아파치 서버에 요청할 수 있는 최대의 서비스 개수를 지정해 줍니다. 0은 제한 없음을 의미하며, 높은 값이 서버의 성능 향상을 위해 좋습니다.

5. 아래로 내려가서 Timeout 설정을 살펴봅니다. 이 부분은 클라이언트가 요청한 정보를 받을 때까지 소요되는 대기 시간의 최대값으로, 네트워크 속도가 나쁠수록 수치값을 높게 설정하는 것이 좋습니다.

      #
      # MaxKeepAliveRequests: The maximum number of requests to allow
      # during a persistent connection. Set to 0 to allow an unlimited amount.
      # We recommend you leave this number high, for maximum performance.
      #
      MaxKeepAliveRequests 100
      #
	 

7. 다음은 Section2: Main server configuration로 바로 넘어갑니다. 우선 웹 서버로 들어올 수 있는 포트(Port)를 지정합니다. 기본으로 설정된 80번 포트가 웹 서비스에 대한 표준 포트입니다.

       . . .
      #
      # Port: The port to which the standalone server listens. For
      # ports < 1023, you will need httpd to be run as root initially.
      #
      Port 80
      #
       . . .
	 

8. root가 아닌 다른 사용자나 그룹으로 아파치 웹 서버를 시동하고자 할 때 아파치를 사용할 권한을 부여합니다. 절대로 User나 Group에 root를 명시하면 안 됩니다.

       . . .
      #
      # User/Group: The name (or #number) of the user/group to run httpd as.
      #  . On SCO (ODT 3) use "User nouser" and "Group nogroup".
      #  . On HPUX you may not be able to use shared memory as nobody, and the
      #    suggested workaround is to create a user www and use that user.
      # NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET)
      # when the value of (unsigned)Group is above 60000;
      # don't use Group nobody on these systems!
      User nobody
      Group #-1
      #
       . . .
	 

9. 내부 네트워크에서 리눅스 서버의 IP주소로 웹 서버에 접속할 수 있도록 이 부분을 변경하고 주석을 제거합니다 KRINC 같은 도메인 서비스 회사에서 도메인을 사서 리눅스 서버가 DNS 주소를 가지고 있다면 IP주소 대신 도메인 주소를 적어 줍니다.

       . . .
      #
      # Note: You cannot just invent host names and hope they work. The name you
      #  define here must be a valid DNS name for your host.  If you don't understand
      # this, ask your network administrator.
      # If your host doesn't have a registered DNS name, enter its IP address here.
      # You will have to access it by its address (e.g., http://123.45.67.89/)
      #
      ServerName 192.168.0.1

      #
       . . .
	 

10. 실제 웹 서비스로 사용될 HTML 문서가 위치하는 곳의 디렉토리를 지정합니다. HTML 문서의 루트 디렉토리가 되는 곳이죠. 나중에 여러분이 만든 HTML 파일은 여기로 업로드 하면 됩니다.

       . . .
      #
      # DocumentRoot: The directory out of which you will serve your
      # documents. By default, all requests are taken from this directory, but
      # symbolic links and aliases may be used to point to other locations.
      #
      DocumentRoot "/var/www/html"
      #
       . . .
	 

11. 다음은 디렉토리를 제어하기 위한 구문입니다. 크게 ~ 부분과 ~ 두 부분으로 나누어진 것을 확인할 수 있습니다. 전자는 리눅스 서버의 루트 디렉토리에 대한 설정으로 웬만한 사용자의 접근을 불허하는 반면, 후자 부분은 DocumentRoot인 /var/www/html 데릭토리에 대한 설정으로 사용자들이 웹 서버에 잇는 웹 문서를 읽을 수 있도록 설정되어 있습니다. 특히 전자의 루트 디렉토리에 대한 설정은 보안상 중요하므로 특별한 경우가 아닌 한 손대지 않도록 합니다.

       . . .
      #
      # First, we configure the "default" to be a very restrictive set of
      # permissions.
      #
      
	      Options FollowSymLinks
          AllowOverride None
      

      #
       . . .
      
       . . .
           Options Indexes Includes FollowSymLinks
       . . .
           AllowOverride None
       . . .
           Order allow,deny
           Allow from all
      
       . . .
	 

12. 주소 창에 웹 서버의 URL 주소만 지정하면 자동으로 index.html 파일을 볼수 있습니다. 이 DirectoryIndex에서 Index.html 파일이 웹 브라우저에 로드되도록 지정되어 있기 때문이죠. 이제 설정 내용을 확인했으면 ESC를 눌러 이동 모드로 전환한 다음 :wq 명령으로 종료하고 프롬프트 상태로 돌아갑니다.

       . . .
      # DirectoryIndex: Name of the file or files to use as a pre-written HTML
      # directory index.  Separate multiple entries with spaces.
      #
      
      DirectoryIndex index.html index.htm index.shtml index.php index.php4 index.php3 index.phtml index.cgi
      

      #
       . . .
	 


   1.4. 아파치 시동하기

이 정도 설정 내용이면 root에서 아파치를 실행할 수 있는 기본적인 여건은 마련되었습니다. 설정 내용을 바탕으로 아파치를 실행해 보겠습니다.

1. 아파치 웹 서버를 구동하기 전에 설정 파일에 이상이 없는지 확인합니다.

      # /usr/sbin/httpd -t ☜
      Syntax OK
      #
	 

2. 아파치 웹 서버 데몬을 시작합니다.

      # /etc/rc.d/init.d/httpd start ☜
      httpd (을)를 시작합니다:                            [  확인  ]
      #
	 

3. 아파치가 제대로 돌아가고 있는지 확인하는 방법은 status 옵션을 사용합니다.

      # /etc/rc.d/init.d/httpd status ☜
      httpd (pid 1048 1047 1046 1045 1044 1043 1042 1041 1040) 가 실행되고 있습니다..
      #
	 

4. ps 명령으로 웹 서버의 프로세스를 확인합니다.

      # ps -ef | grep httpd
      root      1040     1   0 02:52 ?              00:00:00 /usr/local/apache/bin/httpd
      nobody    1041  1040   0 02:52 ?              00:00:00 /usr/local/apache/bin/httpd
      nobody    1042  1040   0 02:52 ?              00:00:00 /usr/local/apache/bin/httpd
      nobody    1043  1040   0 02:52 ?              00:00:00 /usr/local/apache/bin/httpd
      nobody    1044  1040   0 02:52 ?              00:00:00 /usr/local/apache/bin/httpd
      nobody    1045  1040   0 02:52 ?              00:00:00 /usr/local/apache/bin/httpd
      nobody    1046  1040   0 02:52 ?              00:00:00 /usr/local/apache/bin/httpd
      nobody    1047  1040   0 02:52 ?              00:00:00 /usr/local/apache/bin/httpd
      nobody    1048  1040   0 02:52 ?              00:00:00 /usr/local/apache/bin/httpd
      root      1425  1243   0 03:00 pts/0          00:00:00 grep httpd
      #
	 

5. 리눅스가 부팅할 때마다 아파치 웹 서버가 시작되기 위해서는 ntsysv를 이용합니다.

      # ntsysv ☜
	 

6. 아파치 웹 서버를 가리키는 httpd에 체크하고 <확인> 단추를 누릅니다.

7. 모든 설정이 끝났으면 웹 브라우저를 이용해서 웹 서버에 접속해 봅니다. 웹 브라우저 모질라를 실행합니다. 내부 네트워크에서 주소 입력난에 리눅스 서버의 IP 주소인 192.168.0.1을 입력하거나 localhost를 입력합니다. 테스트용 HTML 문서가 나타나면 성공입니다.

8. 이번엔 클라이언트에서 웹 서버에 접속해 보겠습니다. 인터넷 익스플로러를 실행하고 주소를 입력하는 곳에 리눅스 서버의 IP주소인 192.168.0.1이나 localhost를 입력합니다. 리눅스 서버에서 확인했던 테스트용 HTML 문서가 나타나면 성공입니다.



   1.5. 자주 나오는 질문

1. 스탠드얼론 방식을 선택한 이유

스탠드얼론 모드와 Xinetd 모드를 선택할 수 있습니다만, 웹 서버 같은 서비스의 경우에는 클라이언트의 요청이 있을 때 바로응답해야 하기 때문에 스탠드얼론 모드로 서비스 하는것이 일반적입니다.

2. 포트 번호가 달라요

소스로부터 인스톨한 경우 포트 번호가 8080인 경우가 있습니다. 포트 번호 8080은웹 캐시, 즉 플록시 서버로 통하는 포트 번호를 의미하므로 반드시 80번으로 고쳐주기 바랍니다.

3. DocumentRoot 부분이 없어요

낮은 버전의 아파치에서는 /etc/httpd/conf/srm.conf 파일에서 DocumentRoot 부분을 지정하도록 되어 있습니다. srm.conf 파일을 확인해주세요.

4. 구문 에러가 발생합니다.

다음과 같이 구문(Syntax)이 틀리게 입력되어 있거나 설정된 경우입니다. 친절하게 207번째 줄의 LoadModules라는 철자가 틀렸으니 고치라는 안내까지 해주는군요.

      # /usr/sbin/httpd -t ☜
      Syntax error on line 207 of /etc/httpd/conf/httpd.conf :
      Invalid command 'LoadModules', perhaps mis-spelled or
      defined by a module not included in the server configuration
      #
	 

참고로 파일을 잘못 설정했을 때는 기본 설정 파일이 httpd.conf.default라는 이름으로 존재하므로 이 파일을 httpd.conf 파일로 바꾸어 다시 편집할 수 있습니다.


Posted by iWithJoy