[ Apache ]
- 공개형 웹 서버 프로그램이지만, 매우 강력하고, 다양한 대부분의 플랫폼을 지원.
- 모듈 추가로, 확장기능 추가가 용이하다.
웹 서버의 동작 방식
정적 ( html 등... )
- 웹 브라우저(클라이언트)가 http ( 80번 포트. 디폴트 ) 로 연결하여 사용자 index.html 을 요청
해당 웹서버는 클라이언트(브라우저)가 요청한 파일을, 자기 시스템에서 검색하여 읽고, 브라우저에게 제공.
즉, 단순 송수신. 단순 출력
동적 ( php, jsp, asp 등.. )
- 웹 브라우저(클라이언트)가 http ( 80번 포트, 디폴트) 로 연결하여 동적인 페이지 index.php 를 요청
해당 웹서버는 php 를 자체 실행 후, 클라이언트가 요청한 변수(매개변수)를 넘겨준다.
그리고 , 그 생성된 변수의 결과를 읽고, 클라이언트의 브라우저에 전송한다.
[ 아파치 패키지 ]
아파치는 리눅스 서버의 기본 프로그램이다. httpd 데몬으로 동작한다.
실행되지 않을시 기본프로그램에 포함되어 있는지, 설정을 확인한다.
ex) /etc/rc.d/init.d/httpd [start/stop/restart/status]
[ 환경설정 ] - /etc/httpd/conf/httpd.conf
- 시작전에 설치cd 의 패키지 디렉토리에서 httpd 관련 모든 패키지를 설치한다.
환경설정파일의 기준은 CentOS 6.3(Final) 을 기준으로 설명.
1. ServerTokens
41 # Don't give away too much information about all the subcomponents
42 # we are running. Comment out this line if you don't mind remote sites
43 # finding out what major optional modules you are running
44 ServerTokens OS
웹 브라우저에 에러구문, 또는 표기구문에 출력되는 내용이다.
값은 Full / OS / Minor / Min / Major / Prod 를 줄 수 있다. 보통 일반적인 웹 서버는 Full을 사용한다.
Full - 아파치 서버버젼, 운영체제, 모듈 정보 등을 모두 출력.
OS - 운영중인 아파치와 리눅스 서버버젼만을 출력.
2. Listen
128 # Listen: Allows you to bind Apache to specific IP addresses and/or
129 # ports, in addition to the default. See also the <VirtualHost>
130 # directive.
131 #
132 # Change this to Listen on specific IP addresses as shown below to
133 # prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
134 #
135 #Listen 12.34.56.78:80
136 Listen 80
Listen 80 -> 80번 포트로 들어오는 모든 소리에 귀를 기울인다.
포트 포워딩의 개념이다.
웹 사이트를 리뉴얼 하거나, 공사중에 테스트로 가동시키고, 일반인은 접근하지 못하게 하고 싶을 때,
해당 포트만 열어두면 된다. ( 둘 중 하나는 주석처리하고 하나만 열어야 한다 )
ex)기본 접속( 80포트로 접속이 불가하고 8080 포트만 테스트용으로 열기 )
Listen 192.168.132.129:8080
#Listen 80
3. DocumentRoot
#
# 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"
아주 중요한 , 해당 사이트의 index.html 가 위치하는 장소. 즉 해당 유저의 웹 서비스 개시 홈디렉토리 경로.
root의 웹서버 기본 경로는 /var/www/html 로 지정되어 있다. 추가 사용자를 주기 전에 해당 메인(서버)도 웹설정된
경로가 지정되어 있어야 한다.
웹 서비스는 홈디렉토리 내부에 반드시 기본설정으로 public_html 디렉토리가 있어야 한다. ( 그 안에 index.html )
4. UserDir ( co.kr/~user1/ )
<IfModule mod_userdir.c>
#
# UserDir is disabled by default since it can confirm the presence
# of a username on the system (depending on home directory
# permissions).
#
UserDir disabled
#
# To enable requests to /~user/ to serve the user's public_html
# directory, remove the "UserDir disabled" line above, and uncomment
# the following line instead:
#
#UserDir public_html
</IfModule>
UserDIR = 개별유저의 홈디렉토리를 사용할 것인가( 디폴트 : NO )
Userdir public_html = 개별유저를 사용할 시 index.html(웹 브라우저에 개시될 최초의 메인화면) 디렉토리 위치
ex) root 웹서버를 사용하지 않고 user1 이라는 사용자를 웹 서비스로 출력하고싶다.
위의 두 주석을 바꿔준다.
#UserDir disabled
UserDir public_html
DocumentRoot "/home/user1/public_html" - user1 의 홈 디렉토리
이렇게 하면 index.html 가 보이지 않고 Fobbiden 에러가 난다면 정상.
문제점을 찾아보도록 한다.
( 유저 홈디렉토리의 권한이 700으로 되어있다. )
현재 이 방법은 거의 사용하지 않는다.
5. Alias ( 별칭 )
~계정명 을 사용하지 않고 순수한 디렉토리명 ( www.myungin.co.kr/user1/ ) 을 사용하고 싶을 때 사용
#위의 UserDir 두 부분을 모두 주석처리 한다.
그 사이에 다음을 입력한다.
Alias /user1/ "/home/user1/public_html/"
후방의 디렉토리 표시 "/" 와 , 매개변수의 "/" 마무리를 반드시 매칭시켜줘야 한다.
그렇지 않으면 퍼미션 에러가 날 것이다.
Alias 의 / / 는 디렉토리의 경로가 아닌 "문자" 대체 인식의 성격이 강하다.
도메인의 메인 디렉토리에 사용하기보다는, 다른 용도에 주로 쓰이고 있다.
6. Virture Host ( 가상 호스트 도메인 )
위의 방법은 해당 도메인의 특정 계정만을 이용하는 방법이다.
가상호스트는 한 도메인으로 여러 사용자를 계정단위로 운용할 수 있다.
같은 아이피라도, 호스트의 명칭이나 포트에 따라
www.myungin.co.kr 로 접속하면 루트사용자의 홈디렉토리 index.html가
user1.myungin.co.kr 로 접속하면 user1의 홈디렉토리 index.html가 출력될 것이다.
ex ) kin.naver.com // mail.naver.com 같은 호스트(www) 부분을 대체하는 디렉토리명을 말한다.
현재 가장 널리 쓰이고 있다. 우리는 해당 부분이 단순 홈디렉토리가 아닌 "계정" 그 자체를 의미한다는 것을
이제 이해해야 한다. 계정이 아닌 디렉토리라고 한다면, 해당 디렉토리에 어떤 사용자 권한을 지정하는 순간,
해당 사용자는 해당 디렉토리 전체를 손댈 수 있기 떄문에 보안에 매우 취약해진다.
계정단위로 관리하는 것이 훨씬 합리적이다.
가상호스트 구성하면 위에서 했던 모든 설정보다 우선시되어 실행된다.
(위의 설정들은 기본으로 돌려놓자)
(1) 네임서버 조회 - 에러출력 - 정상
(2) 가장 아랫 부분 Virture Host 의 모든 주석을 제거하고 해당 부분만 남긴다. (복사해서 써라! 백업 )
(가장 기본 구성)
#<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>
을
<VirtualHost *:80>
DocumentRoot /www/docs/dummy-host.example.com
ServerName dummy-host.example.com
</VirtualHost>
로 다른 부분 지우고, 두 개를 만든다.
( 이유는 www 호스트와 user1 호스트 두 개를 동시에 운용하기 때문이다. )
다음과 같이 구성한다. ( root 계정은 사용할 수 없다 )
<VirtualHost 192.168.132.129:80> // 메인 네임서버의 아이피를 입력
DocumentRoot /home/main/html/public_html // 해당 호스트(계정)의 메인경로
ServerName www.myungin.co.kr // 해당 호스트의 메인 주소.
</VirtualHost>
<VirtualHost 192.168.132.129:80>
DocumentRoot /home/user1/public_html // 중요.
ServerName user1.myungin.co.kr // 중요.
</VirtualHost>
실제로 실습시엔 위에 // 주석 금지입니다. 에러남 ;;
여기까지 한다면, www는 보이지만 user1은 여전히 안 되는 사실을 알 수 있다.
(퍼미션 문제는 더 이상 생략)
설정 저장 후, /var/named 의 네임서버 환경설정 파일을 연다.
(기존 구성했던 네임서버명.zone , 아이피.zone )
추가 도메인을 입력한다.
myungin.co.kr.zone
www IN A 192.168.132.129
user1 IN A 192.168.132.129
하단에 www외에 user1이라는 호스트 정방향도 추가해준다.
192.168.132.zone 파일도 설정해 주어야 한다.
아주 최소한의 구동가능한 버추어 호스트 세팅 완료.
'ETC' 카테고리의 다른 글
CentOS 에서 그누보드 설치시 퍼미션 오류 문제 (0) | 2013.05.13 |
---|---|
Mysql 기본 Charset 변경 (0) | 2013.05.13 |
[ Basic ] Run Level과 Process 확인하기 (0) | 2013.04.23 |
[ Basic ] Mount 와 Fdisk (1) | 2013.04.22 |
[ Basic ] Package 와 Tar (0) | 2013.04.22 |