1. httpd 란?
시스템이 웹 서비스를 할 수 있도록 해주는 데몬입니다. 이러한 데몬에는 apache, NCSA, netscape 등등이 있습니다. 여기서는 가장 널리 쓰이고 있는 apache web daemon의 설치와 설정에 대해서 알아봅니다.
2. apache source 구하기
Apache web daemon의 소스는 www.apache.org에 가면 최신 버젼을 다운 받을 수 있습니다.
3. 컴파일과 설치하기
1.3.x 버젼에 오면서 컴파일과 설치가 쉬워졌습니다. configure를 실행한 후 make를 하여 컴파일 합니다.
# ./configure
# make
컴파일이 무사히 끝났다면 루트 권한으로 make install 해서 설치합니다.
# make install
configure에서 명시적으로 설치될 경로를 설정하지 않았다면 /usr/local/apache에 apache가 설치되게 됩니다.
4. httpd 설정하기
이제 apache httpd의 설정에 들어갑니다. 설정 파일은 /usr/local/apache/etc 에 있습니다.(/usr/local/apache에 apache가 설치되었다고 가정.) 설정 파일은 세개로 나뉘어 있는데 다음과 같습니다.
httpd.conf - httpd의 시스템 관련 부분 설정
access.conf - httpd를 통해 액세스 할 수 있는 경로와 수위 설정
srm.conf - httpd 환경 설정
각 설정 파일에서 중요한 설정 부분을 알아 봅니다.
httpd.conf
ServerType
standalone/inet
standalone으로 설정하면 데몬이 독립적으로 돌아가며, inet으로 설정하면 inetd에 의해 호출되어 돌아가게 됩니다.
(/etc/inetd.conf에 설정 필요.) 일반적으로 standalone으로 하는 것이 무난하며, inet으로 설정할 경우 apache의 기능 일부를 사용할 수 없습니다.
Port
Port는 외부에서 서비스 신청이 들어올 때 신청을 받는 곳입니다. 1024보다 작은 포트를 사용하기 위해서는 httpd를 처음에 루트 권한으로 실행합니다.일반적으로 80 또는 8080 포트를 사용합니다.
HostnameLookups
on/off
이 기능은 IP를 hostname으로 바꿀 지를 결정합니다. off일 경우 request를 했던 시스템의 IP가 log에 기록되지만, on으로 설정을 변경하면 시스템의 hostname이 기록되게 됩니다. 이 기능은 또한 httpd가 cgi등에 넘겨주는 환경변수에도 영향을 줍니다. on일 경우 REMOTE_HOST변수가 유효하지만 off일 경우 REMOTE_ADDR변수만 유효합니다.
User
nobody
외부의 request에 대해 실행되는 httpd의 child process의 소유자를 뜻합니다. 보안상 아무런 권한이 없는 nobody 또는 그에 상응하는 ID를 줍니다.
Group
nobody
User와 마찬가지로 아무런 권한이 없는 group ID를 부여합니다.
ServerAdmin
webadmin@yourhost.domain.com
웹 서버 관리자의 e-mail 주소를 적습니다.
ServerRoot
/usr/local/apache
apache 웹 서버가 설치된 경로를 뜻합니다.
ErrorLog
/usr/local/apache/var/log/error_log
웹 서비스 중 발생하는 에러를 로그로 남길 경로를 설정합니다.
LogLevel
warn
로그로 남길 에러의 수준을 결정합니다. 수준은 syslog 에서 쓰이는 모든 경우가 가능합니다.(debug, info, notice, warn, error, crit, alert, emerg)
access.conf
access.conf의 형식은 다음과 같습니다.
< Directory {path}>
Options {options}
[AllowOverride {options}]
[order allow,deny]
[allow from {hostname or IP address}]
[deny from {hostname or IP address}]
정의 적용 범위는 path에 적어준 경로의 하위 모든 디렉토리에 해당합니다. 그러므로 가장 상위 디렉토리에 대한 설정을 먼저 해 준 후, 차례로 하위 디렉토리들에 대한 설정을 해 줍니다. Options는 option들을 설정해 주는 부분이며 AllowOverride는 path에 지정된 디렉토리 내에 .htaccess와 같은 파일에 의해 access 설정이 override될 수 있는지를 결정합니다.
path
access관련 설정을 할 경로를 적습니다.
options
옵션에는 다음과 같은 것들이 있습니다.
All
None, MultiViews를 제외한 모든 옵션
Indexes
URL을 디렉토리까지만 주었을 경우, 웹 서버는 기본적으로
설정된 파일(e.g. index.html)을 찾습니다. 만약 이 파일이 존재하
지 않을 경우 Indexes설정이 되어 있으면 디렉토리의 내용을 형식을
갖춘 모양으로 출력해 줍니다.
Includes
server side include 기능을 사용할 수 있도록 설정
FollowSymLinks
심볼릭 링크를 따라가도록 설정
ExecCGI
cgi를 실행할 수 있도록 설정
MultiViews
브라우저에서 보내오는 환경 변수들(e.g. Content-type, Content-language, Content-encoding...)에 따라 서버가 보내는 내용을 달리 할 수 있도록 합
니다.
SymLinksIfOwnerMatch
심볼릭 링크 파일의 소유자와 심볼릭 링크가 가리키는 파일의 소유자가
같을 경우에만 링크를 따라가도록 합니다.
None
어떠한 기능도 허용하지 않도록 설정
order
allow를 먼저 체크할 지 deny를 먼저 체크할 지 결정합니다.
allow
접근을 허용할 host의 hostname 또는 IP address를 적습니다.
여러 host를 지정할 경우 host 수 만큼 allow from {hostname}의
형식으로 적어 줍니다.
deny
접근을 거부할 host의 hostname 또는 IP address를 적습니다.
예)
Options FollowSymLinks
AllowOverride None
Options FollowSymLinks Includes Indexes
AllowOverride None
order allow,deny
allow from all
deny from ugly.kids.com
Options ExecCGI
AllowOverride None
order allow,deny
allow from all
deny from hackers.club.com
Options All
AllowOverride None
order deny,allow
deny from all
allow from pretty.girl.net
주) access.conf의 끝부분에는 다음과 같은 설정이 있습니다.
#
#deny from all
#ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
#
이것은 apache 1.1이전 버젼에 있던, phf cgi 프로그램의 버그를 이용한 해킹 시도 체크하기 위해 설정해 놓은 부분입니다. 주석표시를 제거해 주면 외부에서 phf로 시작되는 cgi 프로그램을 request할 경우 apache daemon이 access를 거부하고 http://phf.apache.org/phf_abuse_log.cgi를 호출하도록 합니다. 여기서 Location은 DocumentRoot에 대한 상대적 경로를 지정할 때 쓰이는 태그입니다.
srm.conf
DocumentRoot
/usr/local/apache/share/htdocs
hostname만 적었을 때 호출되는 페이지의 경로를 뜻합니다. 즉,
http://vishnu.snu.ac.kr 이라고 주소를 적었을 때 나타나게 될
페이지의 경로입니다.
UserDir
public_html
일반 사용자가 자신의 홈페이지를 만들고자 할 때 홈페이지를
뜻하는 디렉토리의 이름을 적습니다. 일반적으로 public_html이
많이 쓰입니다.
DirectoryIndex
index.html
명시적으로 html파일의 이름을 주지 않고 디렉토리 이름만 주었을
경우 디렉토리 내에게 기본적으로 찾는 파일의 이름을 적습니다.
일반적으로 index.html이 많이 쓰입니다.
AccessFileName
.htaccess
access.conf에서 설정한 options을 override할 때 쓰이는
파일명을 적습니다. (access.conf에서 AllowOverride에서
override할 수 있도록 설정된 option에 대해서만 override가
가능합니다.)
DefaultType
text/plain
httpd는 기본적으로 파일의 확장자와 파일 내부에 있는
ContentType 태그를 통해 파일의 종류를 파악합니다. 만약
특별히 이런 내용이 주어져 있지 않다면 DefaultType으로 그
파일을 읽어들입니다. default로 설정되어 있는 text/plain은
일반적인 ascii파일처럼 읽어들인다는 뜻입니다.
srm.conf에서는 cgi, ssi를 사용하기 위해 설정해 주어야 하는 부분도 포함하고 있습니다.
# To use CGI scripts:
# AddHandler cgi-script .cgi
cgi를 사용하기 위해서는 AddHandler앞의 주석표시를 없앱니다. 참고로 cgi-script .cgi는 확장자가 cgi인 파일을 cgi스크립트로 인식하겠다는 뜻입니다.
# To use server-parsed HTML files
# AddType text/html .shtml
# AddHandler server-parsed .shtml
ssi기능을 사용하기 위해서는 AddType, AddHandler앞의 주석표시를 제거해
줍니다. 위 두 라인이 가지는 의미는 다음과 같습니다. 확장자가 shtml인 파일을 html 문서 파일로 인식하고, 확장자가 shtml인 파일에 대해서는 ssi 기능이
사용되었는지 파싱하여 처리하라는 뜻입니다. 만일 일반적인 html문서(확장자가 html인 문서)에 대해서도 웹 서버가 파싱처리를 하기를 원한다면 다음 줄을
추가해 줍니다.
AddHandler server-parsed .html
5. httpd 띄우기
이제 모든 설정이 끝났으면 apache daemon을 띄우는 일만 남았습니다. 1.3.x버젼에 오면서 daemon을 시작하고 멈추고, 또 재시작하는 일이 매우 쉬워졌습니다. daemon을 시작하고자 하면 다음과 같이 합니다.
# /usr/local/apache/sbin/apachectl start
비슷한 방법으로 daemon을 재시작하고 멈출 수 있습니다. 여기서 재시작의 의미는 daemon에 HangUp(HUP) signal을 주는 것을 뜻합니다.
# /usr/local/apache/sbin/apachectl restart (재시작)
# /usr/local/apache/sbin/apachectl stop (정지)
6. debug
대부분 설정에 문제가 있어서 daemon이 제대로 실행되지 않으므로, error_log를 잘보고 적절히 설정 파일을 수정해주면 문제를 해결할 수 있습니다.
시스템이 웹 서비스를 할 수 있도록 해주는 데몬입니다. 이러한 데몬에는 apache, NCSA, netscape 등등이 있습니다. 여기서는 가장 널리 쓰이고 있는 apache web daemon의 설치와 설정에 대해서 알아봅니다.
2. apache source 구하기
Apache web daemon의 소스는 www.apache.org에 가면 최신 버젼을 다운 받을 수 있습니다.
3. 컴파일과 설치하기
1.3.x 버젼에 오면서 컴파일과 설치가 쉬워졌습니다. configure를 실행한 후 make를 하여 컴파일 합니다.
# ./configure
# make
컴파일이 무사히 끝났다면 루트 권한으로 make install 해서 설치합니다.
# make install
configure에서 명시적으로 설치될 경로를 설정하지 않았다면 /usr/local/apache에 apache가 설치되게 됩니다.
4. httpd 설정하기
이제 apache httpd의 설정에 들어갑니다. 설정 파일은 /usr/local/apache/etc 에 있습니다.(/usr/local/apache에 apache가 설치되었다고 가정.) 설정 파일은 세개로 나뉘어 있는데 다음과 같습니다.
httpd.conf - httpd의 시스템 관련 부분 설정
access.conf - httpd를 통해 액세스 할 수 있는 경로와 수위 설정
srm.conf - httpd 환경 설정
각 설정 파일에서 중요한 설정 부분을 알아 봅니다.
httpd.conf
ServerType
standalone/inet
standalone으로 설정하면 데몬이 독립적으로 돌아가며, inet으로 설정하면 inetd에 의해 호출되어 돌아가게 됩니다.
(/etc/inetd.conf에 설정 필요.) 일반적으로 standalone으로 하는 것이 무난하며, inet으로 설정할 경우 apache의 기능 일부를 사용할 수 없습니다.
Port
Port는 외부에서 서비스 신청이 들어올 때 신청을 받는 곳입니다. 1024보다 작은 포트를 사용하기 위해서는 httpd를 처음에 루트 권한으로 실행합니다.일반적으로 80 또는 8080 포트를 사용합니다.
HostnameLookups
on/off
이 기능은 IP를 hostname으로 바꿀 지를 결정합니다. off일 경우 request를 했던 시스템의 IP가 log에 기록되지만, on으로 설정을 변경하면 시스템의 hostname이 기록되게 됩니다. 이 기능은 또한 httpd가 cgi등에 넘겨주는 환경변수에도 영향을 줍니다. on일 경우 REMOTE_HOST변수가 유효하지만 off일 경우 REMOTE_ADDR변수만 유효합니다.
User
nobody
외부의 request에 대해 실행되는 httpd의 child process의 소유자를 뜻합니다. 보안상 아무런 권한이 없는 nobody 또는 그에 상응하는 ID를 줍니다.
Group
nobody
User와 마찬가지로 아무런 권한이 없는 group ID를 부여합니다.
ServerAdmin
webadmin@yourhost.domain.com
웹 서버 관리자의 e-mail 주소를 적습니다.
ServerRoot
/usr/local/apache
apache 웹 서버가 설치된 경로를 뜻합니다.
ErrorLog
/usr/local/apache/var/log/error_log
웹 서비스 중 발생하는 에러를 로그로 남길 경로를 설정합니다.
LogLevel
warn
로그로 남길 에러의 수준을 결정합니다. 수준은 syslog 에서 쓰이는 모든 경우가 가능합니다.(debug, info, notice, warn, error, crit, alert, emerg)
access.conf
access.conf의 형식은 다음과 같습니다.
< Directory {path}>
Options {options}
[AllowOverride {options}]
[order allow,deny]
[allow from {hostname or IP address}]
[deny from {hostname or IP address}]
정의 적용 범위는 path에 적어준 경로의 하위 모든 디렉토리에 해당합니다. 그러므로 가장 상위 디렉토리에 대한 설정을 먼저 해 준 후, 차례로 하위 디렉토리들에 대한 설정을 해 줍니다. Options는 option들을 설정해 주는 부분이며 AllowOverride는 path에 지정된 디렉토리 내에 .htaccess와 같은 파일에 의해 access 설정이 override될 수 있는지를 결정합니다.
path
access관련 설정을 할 경로를 적습니다.
options
옵션에는 다음과 같은 것들이 있습니다.
All
None, MultiViews를 제외한 모든 옵션
Indexes
URL을 디렉토리까지만 주었을 경우, 웹 서버는 기본적으로
설정된 파일(e.g. index.html)을 찾습니다. 만약 이 파일이 존재하
지 않을 경우 Indexes설정이 되어 있으면 디렉토리의 내용을 형식을
갖춘 모양으로 출력해 줍니다.
Includes
server side include 기능을 사용할 수 있도록 설정
FollowSymLinks
심볼릭 링크를 따라가도록 설정
ExecCGI
cgi를 실행할 수 있도록 설정
MultiViews
브라우저에서 보내오는 환경 변수들(e.g. Content-type, Content-language, Content-encoding...)에 따라 서버가 보내는 내용을 달리 할 수 있도록 합
니다.
SymLinksIfOwnerMatch
심볼릭 링크 파일의 소유자와 심볼릭 링크가 가리키는 파일의 소유자가
같을 경우에만 링크를 따라가도록 합니다.
None
어떠한 기능도 허용하지 않도록 설정
order
allow를 먼저 체크할 지 deny를 먼저 체크할 지 결정합니다.
allow
접근을 허용할 host의 hostname 또는 IP address를 적습니다.
여러 host를 지정할 경우 host 수 만큼 allow from {hostname}의
형식으로 적어 줍니다.
deny
접근을 거부할 host의 hostname 또는 IP address를 적습니다.
예)
Options FollowSymLinks
AllowOverride None
Options FollowSymLinks Includes Indexes
AllowOverride None
order allow,deny
allow from all
deny from ugly.kids.com
Options ExecCGI
AllowOverride None
order allow,deny
allow from all
deny from hackers.club.com
Options All
AllowOverride None
order deny,allow
deny from all
allow from pretty.girl.net
주) access.conf의 끝부분에는 다음과 같은 설정이 있습니다.
#
#deny from all
#ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
#
이것은 apache 1.1이전 버젼에 있던, phf cgi 프로그램의 버그를 이용한 해킹 시도 체크하기 위해 설정해 놓은 부분입니다. 주석표시를 제거해 주면 외부에서 phf로 시작되는 cgi 프로그램을 request할 경우 apache daemon이 access를 거부하고 http://phf.apache.org/phf_abuse_log.cgi를 호출하도록 합니다. 여기서 Location은 DocumentRoot에 대한 상대적 경로를 지정할 때 쓰이는 태그입니다.
srm.conf
DocumentRoot
/usr/local/apache/share/htdocs
hostname만 적었을 때 호출되는 페이지의 경로를 뜻합니다. 즉,
http://vishnu.snu.ac.kr 이라고 주소를 적었을 때 나타나게 될
페이지의 경로입니다.
UserDir
public_html
일반 사용자가 자신의 홈페이지를 만들고자 할 때 홈페이지를
뜻하는 디렉토리의 이름을 적습니다. 일반적으로 public_html이
많이 쓰입니다.
DirectoryIndex
index.html
명시적으로 html파일의 이름을 주지 않고 디렉토리 이름만 주었을
경우 디렉토리 내에게 기본적으로 찾는 파일의 이름을 적습니다.
일반적으로 index.html이 많이 쓰입니다.
AccessFileName
.htaccess
access.conf에서 설정한 options을 override할 때 쓰이는
파일명을 적습니다. (access.conf에서 AllowOverride에서
override할 수 있도록 설정된 option에 대해서만 override가
가능합니다.)
DefaultType
text/plain
httpd는 기본적으로 파일의 확장자와 파일 내부에 있는
ContentType 태그를 통해 파일의 종류를 파악합니다. 만약
특별히 이런 내용이 주어져 있지 않다면 DefaultType으로 그
파일을 읽어들입니다. default로 설정되어 있는 text/plain은
일반적인 ascii파일처럼 읽어들인다는 뜻입니다.
srm.conf에서는 cgi, ssi를 사용하기 위해 설정해 주어야 하는 부분도 포함하고 있습니다.
# To use CGI scripts:
# AddHandler cgi-script .cgi
cgi를 사용하기 위해서는 AddHandler앞의 주석표시를 없앱니다. 참고로 cgi-script .cgi는 확장자가 cgi인 파일을 cgi스크립트로 인식하겠다는 뜻입니다.
# To use server-parsed HTML files
# AddType text/html .shtml
# AddHandler server-parsed .shtml
ssi기능을 사용하기 위해서는 AddType, AddHandler앞의 주석표시를 제거해
줍니다. 위 두 라인이 가지는 의미는 다음과 같습니다. 확장자가 shtml인 파일을 html 문서 파일로 인식하고, 확장자가 shtml인 파일에 대해서는 ssi 기능이
사용되었는지 파싱하여 처리하라는 뜻입니다. 만일 일반적인 html문서(확장자가 html인 문서)에 대해서도 웹 서버가 파싱처리를 하기를 원한다면 다음 줄을
추가해 줍니다.
AddHandler server-parsed .html
5. httpd 띄우기
이제 모든 설정이 끝났으면 apache daemon을 띄우는 일만 남았습니다. 1.3.x버젼에 오면서 daemon을 시작하고 멈추고, 또 재시작하는 일이 매우 쉬워졌습니다. daemon을 시작하고자 하면 다음과 같이 합니다.
# /usr/local/apache/sbin/apachectl start
비슷한 방법으로 daemon을 재시작하고 멈출 수 있습니다. 여기서 재시작의 의미는 daemon에 HangUp(HUP) signal을 주는 것을 뜻합니다.
# /usr/local/apache/sbin/apachectl restart (재시작)
# /usr/local/apache/sbin/apachectl stop (정지)
6. debug
대부분 설정에 문제가 있어서 daemon이 제대로 실행되지 않으므로, error_log를 잘보고 적절히 설정 파일을 수정해주면 문제를 해결할 수 있습니다.