본문 바로가기

HOW TO HACK/Basics

해커라면 알아야 할 리눅스 기초-18 : 리눅스 아파치(Apache) 설정하기


# 본 게시글은 작성자 본인의 스터디한 내용을 바탕으로 작성된 글입니다.


# 본 게시글에는 일부 잘못된 정보가 포함되어있을 수 있습니다.


# 이 글을 열람하는 것은 위 사항에 동의하는 것으로 간주합니다.


# 잘못된 정보에 대한 예의바른 태클 및 지적질 적극 환영합니다.


안녕하세요. Mr. Rootable입니다.

예전에 "해커라면 알아야 할 리눅스 기초-10 : 아파치 웹서버(Apache Web Sever) 설치" 라는 주제로 포스팅을 했었는데 

문득 제 블로그로의 검색어 유입 통계를 들여다보니 "리눅스 아파치", "리눅스 아파치 설치" 등의 키워드가 상위에 랭킹되어있더라구요. 사실상 예전에 올렸던 글의 내용은 거의 설치만 하고 끝내서 좀 부실하다고 느껴왔던터라 키워드 랭킹을 보고 얼굴이 후끈후끈 달아올라오더군요. ㅋㅋㅋㅋ

그래서 준비했습니다.

이번에는 리눅스에서 아파치를 설정하는 법을 다뤄볼까 합니다. 



펭귄녀석들.. 귀엽네요 ㅋ

아파치 설치는 위의 링크된 글을 참고하시면 됩니다.


Step 1 : 아파치 서비스 시작


그럼, 설치를 잘하셨을거라고 믿고 아파치 서비스를 실행해보도록 하겠습니다.

터미널을 여시고, 아래 명령어를 실행해줍니다.


# service apache2 start



아파치가 잘 실행되었는지 브라우저를 열고 주소입력창에 localhost 혹은 127.0.0.1로 접속해서 확인해봅시다.



아파치 기본 페이지가 뜨는 것을 보니 정상적으로 실행되었네요.



Step 2 : 아파치 설정파일 확인


여러분이 저와 같은 시스템 환경이라면(혹은 우분투, 데비안 계열의 리눅스) 아파치 설정파일은 /etc/apache2 디렉토리에 있습니다. CentOS는 /etc/httpd/conf/httpd.conf 파일이 설정파일입니다. 

저는 칼리리눅스이니 /etc/apache2 디렉토리로 이동을 해서 디렉토리안에 어떤 것들이 있는지 확인해보죠.


# cd /etc/apache2

# ls



스크린샷과 같이 몇몇 파일과 디렉토리가 있네요. 이 중에서 눈여겨봐야 할 것들은 apache2.confports.conf, 그리고 sites-available 디렉토리입니다. 

apache2.conf 파일을 열어 직접 보도록 하죠.


# leafpad /etc/apache2/apache2.conf



apache2.conf 파일을 보시면 맨 첫줄에 아파치 서버 설정 파일이라고 나와있네요.

네~ 아파치 설정에 있어 아주 중요한 파일이며, 아파치 웹서버 운영에 있어 모든 설정이 이 파일안에 있다고 보시면 됩니다.


  • ServerRoot 디렉토리

서버루트 디렉토리는 가장 최상위 디렉토리를 말합니다. 서버루트 디렉토리는 apache2.conf 파일에서 볼 수 있습니다. 

사실 우리는 이미 알고 있습니다. Step 1에서 이동했던 디렉토리.. /etc/apache2 디렉토리!! 

이 디렉토리가 서버루트 디렉토리입니다. (CentOS는 /etc/httpd 입니다.)

그럼 apache2.conf 파일에서 한번 확인해볼까요?

apache2.conf 파일에서 제일 먼저 눈에 들어오는 것은 디렉토리 구조를 그려놓은 부분입니다.

아래와 같이 /etc/apache2 디렉토리의 구조를 보여주고 있죠.



디렉토리 구조상 최상위에 어떤 디렉토리가 있죠? 네~ /etc/apache2 입니다.

근데 이 부분은 설정부분이 아니고요, 설정된 부분은 따로 있습니다.

apache2.conf 파일에서 스크롤을 좀 내리다보면 ServerRoot 라는 문구가 보일 겁니다.

찾기 기능으로 serverroot를 찾아보셔도 됩니다.

그럼 아래와 같이 ServerRoot의 디렉토리가 /etc/apache2로 설정되어있음을 확인할 수 있습니다.



  • Timeout

타임아웃(Timeout)은 서버와 클라이언트가 서로 연결된 후 서로간의 아무런 메세지가 오고가지 않을 때 연결을 끊을 시간을 설정하는 항목입니다. 시간단위는 초단위입니다.

네트워크의 속도와 반비례하게 설정하시는게 좋습니다.

네트워크 속도가 좋으면 낮게, 속도가 나쁘면 높게 설정하시고, 환경 및 제반여건에 따라 설정하세요.

기본값은 300초로 지정되어있습니다.



  •  KeepAlive 

KeepAlive는 아파치 프로세스가 한 사용자의 요청을 지속적으로 처리할지,말지를 결정하는 항목입니다.

기본값은 On 입니다.



  • MaxKeepAliveRequests

위에서 설명드린 KeepAlive의 값이 On일 때 의미가 있는 항목입니다.

KeepAlive값이 On이면 아파치의 특정 프로세스는 한 사용자의 요청을 지속적으로 처리를 하게 됩니다.

이 때, MaxKeepAliveRequests로 그 횟수를 제한할 수 있습니다.

즉 MaxKeepAliveRequests에 설정된 횟수만큼만 처리를 하겠죠?

설정된 횟수를 초과하게 되면 아파치의 다른 프로세스가 바통을 넘겨받아 해당 사용자의 요청을 처리합니다.

기본값은 100이고, 0으로 설정하면 무제한입니다.



  • KeepAliveTimeout

역시 KeepAlive 항목이 On일 때 의미가 있는 항목입니다. 이 항목에 설정된 시간동안 서버와 클라이언트간 메세지가 없다면 연결을 끊게 되어있습니다. 기본값은 5초네요.



그 외 몇몇 항목들은 건너뛰고, 중요한 항목만 좀 더 살펴보겠습니다.

건너뛴 항목은 궁금하시면 직접 관련 서적이나 웹페이지를 통해 확인해보시길 권장합니다.



Step 3 : 사용자, 그룹 설정


apache2.conf 파일의 중간부분쯤에 보면 아래 스크린샷과 같은 부분이 있습니다.



바로 사용자(User)와 그룹(Group)을 설정하는 부분인데요.

설정파일에 쓰여 있듯이 서버루트 디렉토리내의 envvars 파일에 있는 변수들로 셋팅이 이뤄집니다.

envvars는 environment variables를 뜻합니다. 



envvars 파일을 보시면 apache2.conf 파일의 User와 Group에 사용된 변수의 값을 확인할 수 있습니다.



Step 4 : 로그 설정


apache2.conf 파일에서 로그파일과 관련된 설정을 하는 항목은 아래와 같은 항목이 있습니다.


  • HostnameLookups 

이 항목의 설정에 따라 로그를 남길 때 IP주소로 남길지, 도메인명으로 남길지 결정할 수 있습니다. 이 항목의 값이 On일 경우에는 웹서버에 접근하는 클라이언트의 모든 IP주소에 대해 DNS 질의를 통해 도메인명으로 로그를 쌓고, Off인 경우에는 IP주소로만 로그를 쌓습니다. 기본값은 Off 이며, 아무래도 성능을 고려했을 때는 Off로 설정하시는 것이 좋습니다.



  • ErrorLog

에러로그(error_log)가 저장될 위치를 설정하는 항목입니다.



  • LogLevel

에러로그(error_log)에 기록할 내용을 설정하는 부분으로 이 항목에 설정된 값에 따라 에러로그가 얼마나 자세하게 기록될지 결정됩니다. 



기본값은 warn 이며, 설정할 수 있는 값은 아래와 같은 것들이 있습니다.


none : 모든 메세지 기록

* : 모든 메세지 기록

emerg : 매우 긴급하고 위험한 메세지 혹은 전체공지가 필요한 메세지 기록

alert : 바로 조치가 필요한 상황의 메세지 기록

cirt : alert보다는 약하지만 치명적인 시스템 문제가 발생한 상황의 메세지 기록

warn : 주의(warning) 단계의 메세지 기록, 기본값

notice : 단순 알림 메세지 기록

info : 프로그램의 정보 등 메세지 기록

debug : 디버깅 메세지 기록



Step 5 : Site Available 디렉토리


위에서 말씀드리길 눈 여겨 볼 것 중에 site_available 디렉토리를 말씀드렸습니다.

이 디렉토리는 아주아주 중요한 디렉토리로 이 디렉토리 하위에 있는 default 파일은 아파치로 웹사이트를 운영하기 위해 필요한 루트 디렉토리 및 여러 홈디렉토리를 설정할 수 있는 파일입니다.

그럼 default 파일을 한번 보도록 할게요.

근데 제가 설치한 아파치에는 파일명이 default가 아니라 000-default.conf네요.



보시다시피 VirtualHost *:80으로 모든 IP(*)의 요청에 대해 80포트를 통해 가상호스트를 하게 되어있습니다. 가상호스트에 대해서는 나중에 다루도록 할게요. 주석(#) 처리된 부분을 제외하고 바로 아래 줄을 보시면 webmaster@localhost 계정으로 기본 메일이 설정되어 있습니다.

또한 웹사이트의 콘텐츠는 DocumentRoot로 설정되어 있는 /var/www/html 디렉토리에 모두 저장됩니다.

이 DocumnetRoot 부분은 중요한 부분이니 꼭 기억하시길 바랍니다.



Step 6 : 포트(Port) 설정


눈여겨 볼 것 중 마지막!! 바로 ports.conf입니다. 

apache2.conf 파일을 보시면 아래와 같이 ports.conf 파일이 include 되어 있는 것을 볼 수 있습니다.

 


ports.conf 파일을 열어봅시다.



80포트를 통해 리스닝하도록 설정되어있음을 볼 수 있습니다.



Step 7 : 아파치 서비스 재시작


아파치 설정값 혹은 다른 설정값을 변경하신 후에는 아래 명령어를 통해 반드시 아파치 서비스를 재시작해주셔야 반영됨을 유의하세요.


# service apache2 restart


지금까지 아파치 설정에 대해 알아봤습니다. <끝>