강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

SULINUX를 웹서버로 사용하기 2편

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문



제목 : SULINUX를 웹서버로 사용하기 2편




ㅇ 제작 : 리눅스포털(www.superuser.co.kr) 수퍼유저코리아 서버관리팀


ㅇ SULINUX  홈페이지 : www.sulinux.net

ㅇ 리눅스포털 홈페이지 : www.superuser.co.kr



1-4. 웹서버 동작의 모니터링


웹서버 관리자라면 현재 작동하고 있는 웹서버의 상태를 알 필요가 있다. 아파치에서는 이러한 웹서버 정보를 제공해주는 mod_status 모듈을 가지고 있다. 현 서버의 상태를 HTML방식으로 출력해주고 만약 필요하다면 서버상태 페이지를 자동으로 갱신시켜 계속 웹 서버 상태를 살펴볼 수도 있다. mod_status모듈은 기본 모듈이므로 사용자가 제거하지 않았다면 이미 추가되어 있을 것이다. 만일 포함되어 있지않거나 주석처리(#)가 되어 있다면 주석을 제거하고 또는 아파치를 다시 설치 할것을 권고한다. 단, status를 사용하기 위해서는 데몬모드로 아파치가 작동하고 있어야만 한다. 아파치를 standalone방식이 아닌 inetd모드로 작동시켰다면 mod_status를 사용할수 없다.


 다음으로 웹서버에서 /server-status요청을 처리할 수 있도록 하기 위해 httpd.conf 파일에 다음과 같은 내용을 포함시켜준다. httpd.conf의 약 994번째줄부분이 기본적으로 주석처리가 되어 있는 있는데 이를 제거한 뒤 적절히 수정해주면 된다.


PIC3EB.gif   PIC3EC.gif

[그림] 기존 주석처리 화면        [그림]수정후 화면


Allow from 부분에는 접근하고자는 클라이언트(PC)의 IP 주소를 지정한다. 여기서는 192.168.1.100라는 클라이언트만 접근이 허용된다는 말이다. IP 주소 대신 도메인이 올수도 있으며 네트워크 그룹이 올수도 있다. 예를 들면 192.168.1. 이라고 설정하면 192.168.1.* 에 해당하는 모든 컴퓨터들이 접속이 가능하게된다. 환경설정을 변경했으면 앞에서 설명한 것 처럼 웹서버 프로세스를 다시 시작하도록 해야한다.(/etc/init.d/httpd restart) 웹서버가 다시 시작되었으면 웹브라우저를 통해 "httpd://아파치가동작중이서버의 IP주소/server-status"로 접속하면 서버의 동작상태를 확인할 수 있다.

PIC3ED.gif

[그림] 웹브라우저로 점검한 결과

1-4-1. 웹서버 로그파일의 분석


웹서버의 작동 상태에 대한 모니터링은 mod_status 모듈을 통해 할 수 있다고 했다. 그런데 웹서버 관리자라면 웹서버의 운영현황, 즉 도대체 얼마나 많은 사용자가 접속해 어떤 페이지의 내용을 주로 보았는지, 그리고 어떤 사이트에서 주로 접속했는지, 나아가 시간대별로는 어떤 시간대에 가장 많은 사용자가 접속했는지 등등의 정보에 대해서도 궁금할 것이다. 이러한 정보는 웹서버의 로그파일의 하나인 access_log 파일에 저장된다. 따라서 이 파일을 분석하면 원하는 정보를 얻을 수 있다.


PIC3EE.gif

[그림] /usr/local/apache/logs/access_log 내용


access_log 파일은 /usr/local/apache/logs 디렉토리에 있는데 위의 그림에서 보듯이 한줄에 하나씩 사용자 요청에 대한 처리 기록이 남아 있다. 로그파일의 각 항목은 다음과 같은 정보를 가지고 있다.


access_log 파일의 구조


PIC3EF.gif

① 접속한 클라이언트의 IP주소, 혹은 도메인 이름

② 웹서버 사용자 인증시 사용자명을 기록한다만 보통은 인증을 사용하지 않기때문에 '-'로 표시한다.

③ 클라이언트의 접속 시간정보

④ 클라이언트 요청 종료(GET, POST)

⑤ 클라이언트 요청한 홈페이지 자료

⑥ 프로토콜 종류 및 버전

⑦ 처리상태(200:정상처리, 404:파일이 존재하지 않음)

⑧ 전송 데이터 크기


물론 웹서버의 access_log 파일만 분석하면 홈페이지의 운영현황에 대한 상세한 정보들을 얻을 수 있다. 이러한 정보들을 분석해 마케팅 정책 및 향후 홈페이지 운영 정책에 이용할 수 있다. 하지만 텍스트로만 된 로그파일을 가지고 분석하기가 쉽지 않을 것이다.

따라서 이러한 로그파일을 분석해 자세한 통계자료와 각종 그래프 자료를 제공하는 프로그램을 직접 제작하거나 이마 나와있는 패키지들을 구입해 사용한다면 좀더 쉽게 웹사이트에 대한 분석을 할 수 있을 것이다. 웹사이트를 검색해보면 수많은 제품들이 존재하는 것을 알수 있을 있을 것이다.


1-5. 웹서버에서의 사용자 인증


웹은 인터넷의 발달과 함께 했기 때문에 그 기본적인 취지는 정보의 공유와 공개에 있다고 할 수 있다. 하지만 웹서비스는 이제 인터넷뿐만 아니라 인트라넷 환경에서도 널리 사용되고 있기 때문에 웹서버을 통해 기업내부의 중요한 정보들을 교환하는 경우도 점차 확산되고 있다. 또한 웹을 이용하여 상업적인 정보들을 제공하는 서비스들도 생겨나고 있는데 누구나 기업내부의 웹서버나 상업용 사이트에 아무런 제재없이 마음대로 접속할 수 있다면 많은 문내가 발생할 것이다.따라서 웹서버에서는 사용자 인증기능을 통해 지정된 사용자 이외의 접근을 차단하는 방법을 제공한다. 아파치 웹서버는 웹의 표준인증뿐만 아니라 다양한 방식의 사용자 정보 파일을 참조할 수 있는 기능을 제공하고 있다. 사용자 인증은 별도의 프로그래밍을 통해 제작할 수 잇지만 웹서버에서 제공되는 기능을 사용하게 되면 웹서버에서 제공하는 사용자 인증 창을 통해 로그인할 수 있게 된다.

아파치 웹서버에서 사용자 인증과 관련된 부분은 크게 두 곳이다. 앞에서 언급했지만 전반적인 보안을 설정하는 httpd.conf 파일과 디렉토리별 접근제한을 설정하는 .htaccess파일이 그것이다.

여기서는 기본 홈페이지를 모든 사람에게 공개하고 /member라는 디렉토리 이하의 내용은 회원에 가입한 사람들에게만 공개하는 경우를 설정해본다. 사용자 인증과 관련된 설정은 httpd.conf에서만 하고 해당 디렉토리에서 .htaccess 파일을 사용하지 않는 것이 좋다. 각 디렉토리별로 .htaccess 파일을 생성하고 접근 관련옵션을 지정하게 되면 일관된 서버 운영이 어려워지고 보안문제를 야기 시킬 수 있기 때문이다. 따라서 .htaccese 파일에서 AllowOverride를 None으로 해주고 모든 설정은 httpd.conf에서 하는것이 좋다.


PIC3F0.gif

[그림] httpd.conf에 설정하는 방법


PIC3F1.gif

[그림] .htaccess에서 설정하는 방법


옵 션

설    명

AuthType

Basic과 Digest라는 방식이 있으나 모든 브라우저에서 지원하도록 하기 위해서는 Basic을 선택해야한다.

AuthName

현재 디렉토리 제한에 대한 설정과 관련된 고유이름이라고 생가가하면 된다. 다른 디렉토리 접근제한과 구분될 수 있는 이름을 사용하면 된다. 이렇세 해주면 웹브라으저에서 브라우저를 종료하기 전에는 처음 로그인한 정보를 기억하고 있다가 다시 패스워드를 묻지 않게 된다.

AuthUserFile

사용자 인증에 사용랗 패스워드 파일을 지정하는 부분이다. 보통 .htpasswd라는 파일을 사용한다. .htpasswd파일은 유닉스의 passwd파일처럼 암호화된 사용자 패스워드 파일이다.

AuthGroupFile

사용자들을 그룹으로 묶어서 관리하고자 할 때 사용된다. 필요없다면 /dev/null로 링크해둔다.

LIMIT

사용자 요청에 대한 제한 방식을 지정한다. GET 또는 POST를 지정하거나 2개를 한꺼번에 지정해도 된다. require에서 valid-user를 사용하게 되면 등록된 사용자 중 인증된 모든 사용자에 대해 허락한다는 것이고, 특정 사용자의 ID를 나열하게 되면 지정된 사용자들만 인증 후 사용할 수 있도록 하겠다는 것이다.


httpd.conf 파일을 수정했으면 이제 사용자 인증에 필요한 .htpasswd를 생성해보자. .htpasswd는 htpasswd라고 하는 유틸리티 프로그램을 이용해서 생성시킬수 있다. 또는 기존 리눅스의 /etc/passwd 파일을 .htpasswd파일로 복사하고 다음과 같이 사용자 ID와 패스워드 필드까지만 사용하고 뒷부분을 지워준 다음 지정된 디렉토리에 넣어주어도 된다.


PIC3F2.gif

[그림] .htpasswd 파일의 내용


.htpasswd 파일의 생성 및 사용자 관리


htpasswd 명령은 아파치를 설치하고 나면 /usr/local/apache/bin에 설치가 된다. 사용법은 간단하며 -c 옵션을 통해 새롭게 파일을 생성할 수 있다. 만일 .htpasswd 파일이 있는 디렉토리에 -c 옵션 없이 사용하면 기존파일에 사용자를 추가한다.


htpasswd [-c] [.htpasswd 파일 경로] [사용자명]


이제 인증에 필요한 것은 모두 수정하였다. 마지막으로 남은 것은 환경설정을 다시 해주었기 때문에 웹서버를 재기동해주는 일이다.(/etc/init.d/httpd restart)


1-6. 아파치를 이용한 웹 호스팅 서버스의 구현


웹 호스팅 서비스는 하난의 서버에서 서로 다른 도멘인을 가진 여러 개의 웹사이트를 운영하는 서비스를 말한다. 현재 국내 대부분의 호스팅업체에서는 웹 호스팅 서비스를 제공하고 있으며 자체적으로 서버를 관리하거나 전용선을 사용할 형편이 안 되는 단체나 기업, 개인들이 웹 호스팅을 이용해 마치 자신들의 서버가 있는 것철럼 인터넷을 통해 홈페이지를 운영하고 있다.

웹 호스팅 서비스는 꼭 이러한 목적 이외에도 기업체나 학교 등에서 제한된 자원을 가지고 효과적인 웹서버를 운영하기 위한 목적으로도 활용된다. 본래 하나의 서버 컴퓨터에는 하나의 웹서버 프로그램이 동작할 수 잇다. 만일 하나의 컴퓨터에서 두 개의 웹사이트를 운영하려면 서로 다른 포트를 사용해야 한다. 물론 이때는 서로 같은 IP주소나 호스트 이름을 사용해야 한다.

또한 이전에는 하나의 컴퓨터에서 2개 이상의 IP주소를 사용하기 위해서 물리적으로 2개 이상 랜카드가 필요했다. 하지만 지금은 IP Aliasing이라는 기법을 통해 별도의 랜카드 없어도 2개 이상의 IP 주소를 하나의 리눅스 박스에서 사용할 수 잇다. 웹호스팅은 바로 IP Aliasing과 웹서버 셋팅의 Virtual host라는 항목을 적절히 튜닝하여 운영하는 서비스이다.

먼저 웹 호스팅 서비스를 위한 셋팅을 하기 전에 시스템의 IP주소를 하나 더 만들어야 한다.


1-6-1. DNS 설정


앞서 우리는 동일한 도메인으로 IP주소만 달리 하는 설정법을 알아보았다. 하지만 지금 우리는 웹호스팅 서비스를 위한 설정을 하려는 것이고 웹호스팅 서비스는 호스트 이름만 아니라 도메인 자체가 달라야 한다. 그러면 도메인은 과연 어떻게 2개로 설정할 수 있을까? 도메인은 당연히 DNS와 연관이 있다.


작업시나리오

① A라는 회사가 aaa.co.kr이란 도메인를 가지고 있을때

  웹호스팅을 하고자 한다.

 

② B라는 회사가 A사에 웹호스팅을 신청하고 bbb.co.kr이라는

  도메인을 사용하고 한다.

 

③ A사는 bbb.co.kr이라는 도메인을 KRNIC에 신청하고

  Primary DNS를 자신들의 DNS 서버와 동일하게 지정한다.


이제 KRNIC에 등록된 bbb.co.kr의 Primary DNS인 A사의 DNS 서버에 bbb.co.kr도멘인을 처리해줄 수 있도록 다음과 같이 DNS 관련 설정을 변경해보자. DNS와 관련된 내용은 본서의 별도 페이지를 할애하여 다루고 있으니 참고하기 바란다.


named.conf 파일수정


PIC3F3.gif


zone 파일 편집(/var/named/bbb.zone)


PIC3F4.gif


이렇게 DNS와 관련된 파일의 설정이 끝나면 변경된 내용을 적용하기 위해 named데몬을 다시 시작해주어야 한다. named데몬을 다시 실행하는 명령어는 /etc/init.d/named restart 이다.


1-6-2. 가상 호스트의 설정


이제 IP 주소도 설정하고 새로운 도메인도 준비되었다. 남은 것은 웹서버에서 이들 두 홈페이지를 하나의 서버에서 각기 다른 도메인 이름으로 동작하도록 해주는 부분이다. 아파치 서버에서는 이를 가상 호스트(Virtual host)라고 하고 httpd.conf의 맨 마지막 부분에 설정할 수 있도록 되어 있다.

SULinux에서는 제공하는 ssu 유틸리티를 이용하면 간단히 가상호스트 설정을 할수 있다. 자세한 내용은 ssu의 “6-3-6. 아파치 가상도메인 설정 방법”을 참고하기 바란다.

PIC3F5.gif

[그림] httpd.conf에 가상 호스트 설정의 예


가상 호스트 설정은 비교적 간단해서 위에서 보는 것처럼 새로운 도메인에 대한 정보와 HTML이 보관되어 있는 DocumentRoot 등의 정보만 넣어주면 된다.

1-7. 아파치에서 프록시 서버 구현하기


아파치 서버의 특징 중 하나가 바로 프록시 서버이다. 프록시 서버는 다음과 같은 목적에서 사용될 수 있다.


캐시서버

가장 일반적인 프록시 서버의 사용형태이다. 웹브라우저의 환경설정에서 프록시 서버를 지정해 놓으면 사용자가 웹브라우저를 통해 다른 사이트에 접속할 때 먼저 프록시 서버에 캐시된 내용을 찾아보게 된다. 만일 캐시된 내용이 있다면 인터넷을 통해 접속하지 않고 캐시의 내용을 받아오게 됨으로써 네트워크 트래픽을 줄일 수 있다. 그렇게 되면 빠른 속도의 웹서핑이 가능해진다.


게이트웨이 서버

프록시 서버는 내부 네트워크의 요청을 받아 캐시된 내용이 없으면 해당 URL에 요청하고 그 내용을 캐시한 뒤 처음 요청한 사용자에게 전달해준다. 따라서 하나의 서버에 두 개의 랜카드를 설치하여 한쪽은 인터넷과 연결하고 다른 한쪽은 내부 네트워크와 연결해 프록시 서버를 동작시킨다. 그렇게 되면 내부 네트워크에서 인터넷 공인 IP들을 가지고 있지 않다 하더라도 인터넷에 연결된 듯한 효과를 얻을 수있다.


프록시 서버는 웹서버와 별도로 동작을 하고 8080포트를 사용하는 것이 일반적이다. 하지만 아파치서버는 기본적으로 프록시 서버의 기능도 가지고 있으며 웹서버스 포트인 80번 포트를 공유해서 사용할 수 있다.


1-7-1. 프록시 서버 설정


프록시 모듈의 추가


프록시 서버 역시 아파치 서버의 확장 기능이므로 모듈을 추가해야만 사용할 수 있다. 프록시 모듈은 mod_proxy이며, 디폴트로 설정이 되어 있지 않기 때문에 아파치 소스 디렉토리에서 Configuration파일을 다음과 같이 수정한 다음 다시 컴파일을 해주어야 한다.


httpd.conf 파일의 수정


모듈이 추가되어으면 httpd.conf 파일에서 아파치 서버가 동작시 프록시 기능을 수행 할 수 있도록 관련된 설정을 해주어야 한다.

다음과 같은 항목들에 대해 주석을 제거하고 적절한 값을 주면 된다.


ProxyRequests On

➡ 프록시 서버 기능 수행

CacheRoot /home/httpd/proxy

➡ 캐시파일의 보관 디렉토리 지정

CacheSize 1024

➡ 캐시 용량(단위 Kbyte)

CacheGcInterval 4

➡ Garbage Collection 간격, 단위 시간

CacheMaxExire 24

➡ 캐시 저장 시간

CacheLastModifiedFactor 0.1

➡ Expire 기간산정을 위한 요소

CacheDefaultExpire 1

➡ 캐시 디폴트 Expire 시간

NoCache aaa.com bbb.com

➡ 캐시하지 않을 사이트 지정

CacheRoot : 캐시 파일들이 보관될 디렉토리를 지정한다.

CacheSize : Kbyte 단위로 사용하는 시스템 하드디스크의 용량에 따라 적절한 수준으로 설정한다. 여기서는 테스트를 위해 1024로 설정했다.

NoCache : 캐시하지 않을 사이트를 지정한다. 빈번하게 갱신되어 캐시가 별 의미를 갖지 못하는 등의 특수한 사이트를 지정한다.


프록시 서버의 고급기능 활용


앞에서 살펴본 기본기능 이외에 다음과 같은 고급기능들이 있으므로 필요에 따라 사용하면 도움이 될 것이다. 다음 기능들은 httpd.conf 파일에 예제로 표시되어 있지 않다.


프록시 서버의 고급옵션

ProxyRemote http://www.aaa.co.kr/ http://mirror.aaa.co.kr

ProxyPass /mirror http://mirror.aaa.co.kr

ProxyBlock www.hacker.com www.sex.com


ProxyRemote : 특정 서비스를 원격 호스트로 넘기는 기능이다. 예에서는 www.aaa.co.kr이라는 서비스를 요청할 경우 mirror.aaa.co.kr으로 대치하는 기능을 한다.

ProxyPass : 로컬 디렉토리의 원격 호스트로의 매핑 기능으로 예에서는 /mirror라는 로컬 요청을 http://mirror.aaa.co.kr이라는 서버로 전환하는 기능을 한다.

PorxyBlock : 프록시 서비스 금지 사이트를 지정한다. 접속해서는 안될 사이트에 대한 리스트를 지정해주면 된다.


1-7-2. 프록시 서버의 동작확인 및 활용


프록시 서버에 관련된 항목들의 설정이 끝났으면 “/etc/init.d/httpd restart” 명령으로 웹서버를 다시 기동하도록 한다.

아무런 에러 메시지 없이 서버가 실행되면 클라이언트 웹브라우저를 통해 프록시 서버의 동작여부를 확인해보도록 하자.


먼저 클라이언트 웹브라우저의 프록시 설정부분을 아파치 웹서버가 동작하고 잇는 리눅스 서버로 지정하고 포트는 80번(일반적으로 다른 포트를 사용하지만 아파치는 웹 서비스와 동일한 포트를 지원한다)으로 지정한 뒤 인터넷 사이트에 접속해 보고 정상적으로 접속이 되면 프록시 서버가 잘 동작하고 있는 것이다.


클라이언트 프록시 설정


넷스케이프나 인터넷 익스플로러의 실행 화면에서 메뉴를 선택하여 프록시 설정을 해준다.


또한 웹서버의 httpd.conf파일의 CacheRoot 항목에 설정된 디렉토리에 가보면 알파벳과 숫자로 구성된 디렉토리들이 생성되어 있음을 확인할 수 있을 것이다. 이들 디렉토리에는 웹서버가 사이트에 대한 정보를 인덱스화해서 관리하기 위한 디렉토리 구조와 파일들이 자동으로 생성되어 있는 것을 볼수 있다.

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,042 명
  • 현재 강좌수 :  35,846 개
  • 현재 접속자 :  100 명