apache config 구조와 기본적 지시어 알아보기

Myeongwon Choi·2021년 6월 7일
0

홈 서버

목록 보기
2/2
post-thumbnail

요즘에야 워낙 배포가 자동으로 되다 보니 엔지니어가 아파치 config까지 건들 일이 그렇게 많을거라고 생각하지는 않지만... 그래도 뭐랄까... 웹서버는 너무나도 쉽가 가져다가 쓰면서 정작 웹서버 설정 파일이 어떤 구조로 짜여 있는지도 모르고 있었던 거 같다. 컴통 시간에 정확히 웹 서버가 뭘 하는지에 대해서는 잘 이해했으니깐, 그 구현체 중 하나인 아파치 config 파일이 어떻게 되어 있는지 한 번 알아보고자 한다.

매뉴얼을 보자

사실 이런 포스팅을 하게 된 계기 중 하나도, 너무 무작정 따라하고만 살지는 않았는가 하는 생각에서 비롯된 것이다. ubuntu web server 구글에 검색하면, 아파치 설치하고 각종 설정까지 다 끝내는 코드들이 수만 개는 족히 나오지만, 그 어느 블로그에서도 각 명령어가 대체 무슨 역할을 하는 것인지, 이 설정 지시문은 어떤 역할을 하는 것인지 전혀 설명해주지 않았다.

그래서 여기서는 아파치 설치를 해서 서버 올리기까지 해 보되, 각각이 뭘 뜻하는지 한번 자세하게 알아보고 기록할 것이다.

,,,라고 하고 글을 쓰려고 했는데, 우분투 공식 홈페이지에 아파치 설치에 대한 설명이 괘나 상세하게 나와 있어서, 그 내용을 중심으로 작성할 것이다.

설치

sudo apt install apache2

로 아파치를 설치한다.

설정 파일

아파치 웹 서버를 설정하기 위해서는 설정 파일에 directives(지시문)을 작성하여 넣으면 된다. 근데 이제 설정 파일이 하나가 아니라, 여러 개로 쪼개져서 만들어져 있어서, 필요한 설정을 필요한 곳에 넣어야 한다.

설정 파일은 /etc/apache2/ 안에 위와 같은 디렉토리 구조를 가지고 만들어져 있는데, 각 설정 파일의 역할은 이렇다:

  • apache2.conf: 메인 설정 파일, 아파치 전체에 적용되는 설정을 포함한다.
  • ports.conf: 잘 알고 있지만 웹서버는 TCP를 리슨하는데, TCP 몇번을 리슨할지가 여기에 다 모여 있다.
  • conf-available과 conf-enabled: conf-available 안에는 설정 파일인 conf 파일들이 들어 있다. conf-enabled 안에다가 적용하고 싶은 설정을 심링크 해주면 그 설정이 활성화된다.
  • mods-available과 mods-enabled: 위와 비슷한데 모듈을 로드하고 설정하는데 필요한 설정 파일들이 들어 있다.
  • sites-available과 sites-enabled: 이 부분은 조금 중요한데, 아파치는 포트번호와 호스트네임에 따라서 마치 서버가 여러 개가 돌아가는 것처럼 각기 다른 설정을 주어 구분할 수 있는 기능을 가지고 있는데, 이걸 Virtual Host라고 한다. 이 폴더는 각 Virtual Host에 대한 설정들을 담고 있다.

위에서 적용을 하고 싶으면 심링크를 걸어주면 된다고 했는데, 이걸 수작업으로 할 필요는 없고 이걸 쉽게 할 수 있는 명령어도 존재한다. (a2ensite, a2dissite)

근데 이제 이런 구성이 꼭 필수적인 것은 아니고 그냥 편의상 기본적으로 나누어져 있는 것이다. 이런 계층 구조로 잘 만들어 놓았으므로 통상 이렇게 잘 사용한다. 설정을 적용하고자 할 때에는 서버를 restart한다.

기본 설정

Virtual Host

<VirtualHost> and </VirtualHost> are used to enclose a group of directives that will apply only to a particular virtual host. Any directive that is allowed in a virtual host context may be used. When the server receives a request for a document on a particular virtual host, it uses the configuration directives enclosed in the <VirtualHost> section.

그러니깐 VirtualHost 지시문 뒤에 주어진 패턴을 통해서 호스트를 매칭하는데, 매칭이 되면 그 블록 안에 있는 지시문을 이용한다는 것이다.

예를 들어서 기본으로 하나 주어지는 VirtualHost는 이렇게 돼 있다.

<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

이렇게 주어지면 이 서버에 80포트로 오는 HTTP 리퀘스트에 대해서 서버는 다 이 설정을 사용할 것이다. 설정이란 것도 보면 참 간단하다.

설정 내용

  • ServerAdmin: 에러 메시지에 표시될 서버 관리자의 메일 주소이다.
  • DocumentRoot: 그냥 간단하게 말하자면, HTTP 리퀘스트가 왔을 때 호스트네임을 이 디렉토리로 바꾼 담에 파일을 가져다주겠다는 거다. 예를 들어서 google.com/index.html로 리퀘스트가 갔고, 위와 같이 설정되어 있다면 /var/www/html/index.html이 서브되는 것이다. 아! 참 간단하다.
  • Require: https://httpd.apache.org/docs/2.4/ko/mod/mod_authz_core.html 참조. 이건 엄청 복잡하다.
  • Directory:

사실 이외에도 정말 많지만 나머지를 찾아보는 것은 여러분의 몫으로 남겨 두겠다.

결론

그냥 아무 생각 없이 블로그에서 하라는 대로 복붙하고 넘어갔던 설정 파일 하나에도 이렇게 많은 철학과 시스템과 원리가 숨어 있고, 서버를 만든 프로그래머들은 거기서 그치지 않고 우리에게 매뉴얼과 도큐멘트를 하사해 주셨다. 그럼 나와 같은 미련한 중생들은 나보다 어쩌면 더 이걸 잘 모를 지도 모르는 블로거들의 글을 찾아보고 배울 것이 아니라, 어디서든 공식 문서를 참고하고 또 참고해야 할 것이라고 본다.

참조

https://httpd.apache.org/docs/2.4
https://ubuntu.com/server/docs/web-servers-apache

profile
잡식 개발자

0개의 댓글