우분투 18.04에 아파치 웹 서버 설치하는 방법

우분투 18.04에 아파치 웹 서버 설치하는 방법

서문

아파치 웹 서버는 세계에서 가장 광범위하게 사용되고 있는 HTTP 서버입니다. 다이나믹 모듈 로딩, 강력한 미디어 지원 및 다른 유명 소프트웨어와의 통합 기능을 포함하고 있습니다.

이 가이드에서는 아파치 웹 서버를 우분투 18.04에 설치하는 법을 배워볼 것입니다.

꼭 필요한 것

이 가이드를 시작하기 전에, 우분투 18.04가 설치된 서버에 sudo 권한을 가진 일반 유저 계정을 하나 가지고 있어야 합니다. 당연히 인터넷 접속도 있어야겠죠.

Step 1 – 아파치 설치

아파치 서버는 우분투의 기본 소프트웨어 저장소에 포함되어 있습니다. apt 같은 패키지 관리 툴을 이용해서 쉽게 설치할 수 있습니다.

우선 로컬 패키지 데이터를 최신 데이터를 반영하도록 해보죠.

$ sudo apt update

그 다음엔, 아파치2를 설치해 봅시다.

$ sudo apt install apache2

apt가 아파치와 필요한 모든 패키지들을 같이 설치할 겁니다.

Step 2 – 방화벽 설정하기

아파치를 테스트하기 전에, 외부에서 디폴트 웹 포트로 들어오는 접근을 허용하기 위해서 방화벽 설정이 필요합니다. 미리 우분투 서버에 UFW 방화벽이 설치되고 설정이 제대로 되어 있는지는 확인 해 보시기 바랍니다.

아파치 서버를 설치할 때, UFW에 아파치 서버의 방화벽 정보가 포함된 어플리케이션 프로파일들이 같이 설치되기 때문에 간단히 활성화, 비활성화 시켜서 사용하실 수 있습니다.

다음 명령어로, ufw의 어플리케이션 프로파일 목록을 확인해 봅시다.

$ sudo ufw app list

그럼, 어플리케이션 리스트를 볼 수 있습니다.

Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH

보시다시피, 아파치 서버를 위한 어플리케이션 프로파일이 3개 있습니다.

  • Apache: 이 프로파일은 일반적인 암호화되지 않은 웹 트래픽을 위한 80번 포트를 허용합니다.
  • Apache Full: 이 프로파일은 80번 포트와 암호화된 웹트래픽을 위한 443번 포트를 허용합니다.
  • Apache Secure: 이 프로파일은 오직 443번 포트만을 허용합니다.

위 중에서 가장 제한적인 프로파일을 선택해서 활성화하기를 추천합니다. 우리는 SSL를 설치하지 않았기 때문에, 우리가 필요한 건 80번 포트에 대한 허용 뿐입니다. 즉, Apache 프로파일이면 충분합니다.

$ sudo ufw allow 'Apache'

다음 명령어로 제대로 활성화 됐는지 확인할 수 있습니다.

$ sudo ufw status

실행 결과를 보시면 Apache 프로파일이 활성화 된 것이 보입니다. 즉, HTTP 트래픽이 허용된 상태입니다.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Apache                     ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Apache (v6)                ALLOW       Anywhere (v6)

Step 3 – 웹 서버 설치 점검하기

아파치의 설치가 끝나면, 우분투 18.04는 아파치를 시작시킵니다. 웹서버는 이미 실행 중인 상황입니다.

‘systemd’를 이용해서 웹서버 서비스가 제대로 실행중인지 확인해 보겠습니다.

$ sudo systemctl status apache2
Output
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: active (running) since Tue 2020-05-12 12:41:23 UTC; 5min ago
 Main PID: 2142 (apache2)
    Tasks: 64 (limit: 1153)
   CGroup: /system.slice/apache2.service
           ├─2583 /usr/sbin/apache2 -k start
           ├─2585 /usr/sbin/apache2 -k start
           └─2586 /usr/sbin/apache2 -k start

실행 결과에서 보시다시피, 웹서버 서비스는 정상적으로 시작된 것으로 보입니다. 하지만 조금 더 명확히 확인하기 위해서는 아파치 서버로부터 웹페이지를 실제로 요청해 보는게 좋습니다.

IP 주소를 입력해서 아파치 랜딩 페이지에 접속해서 아파치 서버가 제대로 작동되고 있는지 확인할 수 있습니다. 만약 웹 서버의 IT 주소를 모른다면 다음의 명령어로 확인할 수 있습니다.

$ hostname -I

IP 주소를 확인하셔서 웹 브라우저에 입력하시면 다음과 같은 우분투 18.04 아파치 기본 페이지를 보게 될 겁니다.

이 페이지는 아파치 서버가 정상적으로 작동하고 있다는 표시입니다. 그리고 중요한 아파치 설정파일들과 디렉토리 등의 기본적인 정보도 포함하고 있습니다.

Step 4 – 아파치 웹서비스 프로세스 관리

이제 웹서버가 정상적으로 작동중이니, 기본적인 관리 명령어들을 알아보겠습니다.

웹 서버를 중지 시키기 위해 다음 명령어를 사용합니다.

$ sudo systemctl stop apache2

중지된 웹 서버를 시작시키기 위해서 다음 명령어를 사용합니다.

$ sudo systemctl start apache2

웹 서버를 중지시키고 다시 시작시키기 경우 다음 명령어를 사용합니다.

$ sudo systemctl restart apache2

단순히 설정의 변경만 있는 경우, 다음 명령어로 웹 서버의 중지 없이 설정 파일을 다시 로드할 수 있습니다.

$ sudo systemctl reload apache2

기본적으로, 아파치 웹 서버는 시스템이 시동될 시 자동으로 실행되도록 설정되어 있습니다. 자동 실행을 중지하려면 다음 명령어를 사용할 수 있습니다.

$ sudo systemctl disable apache2

다시 설정할 경우, 아래 명령어를 사용할 수 있습니다.

$ sudo systemctl enable apache2

Step 5 – 가상 호스트 설정

아파치 웹 서버를 사용할 때, 하나의 서버에서 여러개의 독립적인 웹 사이트를 서비스해야 할 때가 있습니다. 이럴 때 가상 호스트를 설정해서 각각의 도메인에 대한 처리를 설정할 수 있습니다. 여기선 편의를 위해 test_domain.com이라는 도메인 이름을 사용합니다. test_domain.com을 본인의 도메인으로 변경하시기 바랍니다.

아파치 웹 서버를 설치하면 /var/www/html 디렉토리를 루트로 사용하는 디폴트 서버가 설정되어 있습니다. 사이트 하나만을 서비스하려면 괜찮지만, 여러개의 사이트를 서비스하려면 문제가 될 수 있습니다. 그래서 도메인마다 독립적인 디렉토리를 갖는게 좋습니다. 여기선 /home/username/www/test_domain.com 디렉토리를 생성해서 루트로 사용하도록 하겠습니다. username은 sudo권한을 사용할 수 있는 본인의 계정명입니다.

아래 명령어로 디렉토리를 만들어 봅시다.

$ sudo mkdir /home/username/www/test_domain.com

다음으로, 소유 권한을 부여해봅시다. $USER는 접속한 유저 환경 변수입니다.

$ sudo chown -R $USER:webadmin /home/username/www/test_domain.com

실행 권한도 한번 확인하는게 좋습니다. 다음 명령어를 실행합시다.

$ sudo chmod -R 755 /home/username/www/test_domain.com

루트 디렉토리에 샘플 index.html을 만들어서 테스트에 사용해 봅시다. 아래 명령어로 에디터를 엽니다.

$ nano /home/username/www/test_domain.com/index.html

그리고 아래 내용의 html코드를 붙여넣고 저장합시다.

<html>
    <head>
        <title>test_domain.com 접속</title>
    </head>
    <body>
        <h1>성공!  test_domain.com 가상 호스트 설정이 잘 되었습니다.</h1>
    </body>
</html>

이제 아파치 웹 서버가 test_domain.com을 위한 루트 디렉토리에 접근할 권한을 줘야 합니다. 설정파일 /etc/apache2/apache2.conf 에 해당 내용을 넣어야 합니다.

아래 명령어로 설정 파일을 엽니다.

$ sudo nano /etc/apache2/apache2.conf

설정 파일 내 기본 문서 디렉토리 /var/www/에 대한 설정 부분을 찾습니다.

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

그리고 그 밑에 우리가 생성한 디렉토리에 대한 내용을 붙여넣습니다. username과 test_domain.com은 본인에 해당하는 값으로 바꾸는 거 잊지 마세요.

Options Indexes FollowSymLinks AllowOverride None Require all granted

지금까지 test_domain.com 도메인을 위한 루트 디렉토리를 생성했고 아파치 웹서버가 접근 가능하게 설정했습니다. 이제는 가상 호스트 설정 파일을 생성해서 아파치 웹 서버가 test_domain.com 도메인에 대한 접근이 왔을 때 우리가 생성한 루트 디렉토리로 보낼 것을 설정해야 합니다.

가상 호스트 설정 파일은 /etc/apache2/sites-available/ 디렉토리에 있습니다. 여기에 test_domain.com 도메인을 위한 설정파일을 만들어 보도록 하죠.

아래 명령어를 실행합니다.

$ sudo nano /etc/apache2/sites-available/test_domain.com.conf

에디터로 아래 설정 내용을 붙여넣습니다. ServerName에 test_domain.com 도메인명을 넣고 DocumentRoot에 우리가 생성한 문서 루트 디렉토리를 넣으면 됩니다.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName test_domain.com
    ServerAlias www.test_domain.com
    DocumentRoot /home/username/www/test_domain.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

ServerAdmin에는 관리자의 이메일 주소를 넣으면 됩니다. 아파치 웹 서버는 ServerName와 ServerAlias에 등록된 도메인 값과 같은 요청이 오면 DocumentRoot에 등록된 디렉토리에서 index 파일을 찾아서 실행합니다.

위에 파일을 저장하고 종료합시다.

이제 아파치 웹 서버에 위에 생성한 가상 호스트 설정 파일을 추가해야 합니다. a2ensite 명령어를 사용해서 활성화 시킵시다. 참고로, 비활성화 시킬 때는 a2dissite 명령어로 가능합니다.

$ sudo a2ensite test_domain.com

자 이제 설정에 대한 에러가 없는지 확인해 봅시다.

$ sudo apache2ctl configtest

문제가 없다면, 아래 결과를 보게 될 겁니다.

Syntax OK

아래 명령어로 아파치 웹 서버를 재시작 해봅시다.

$ sudo systemctl restart apache2

자, 이제 모든 설정이 끝났습니다. 웹 브라우저에 http://test_domain.com을 넣어서 정상적으로 실행이 되는지 확인합시다. 설정의 문제가 없다면 성공 메시지가 포함된 페이지를 보게 될 겁니다.

※ 추가 정보

아파치 웹 서버를 성공적으로 설치 했으니 관련된 디렉토리와 파일들에 대한 공부를 하는 것도 중요합니다.

문서 디렉토리

위에서 언급한 /var/www/html 디렉토리가 기본적인 문서 디렉토리입니다. 기본적인 루트 디렉토리도 물론 변경 가능하고 가상 호스트를 위한 루트 디렉토리 설정도 가능합니다.

서버 설정 관련

  • /etc/apache2 아파치 웹 서버의 설정 디렉토리입니다. 모든 아파치 웹 서버 설정 파일들이 여기에 있습니다.
  • /etc/apache2/apache2.conf 아파치 웹 서버의 메인 설정 파일입니다. 아파치 웹 서버의 글로벌 설정을 여기서 변경할 수 있습니다.
  • /etc/apache2/ports.conf 이 파일은 아파치 웹 서버가 요청을 기다리는 포트를 설정할 수 있습니다. 기본적으로 80번 포트가 설정되어 있고, SSL 연결을 지원할 수 있는 모듈이 활성화 되어 있을 시 443번 포트도 설정됩니다.
  • /etc/apache2/sites-available/ 이 디렉토리는 각각의 도메인을 위한 가상 호스트 파일들이 저장되는 곳입니다. 기본적으로 이 곳에 가상 호스트 파일을 생성한다고 설정이 적용되는 것이 아닙니다. a2ensite 명령어를 사용해서 가상 호스트 파일을 활성화 시키면 그 파일은 sites-enabled 디렉토리에 링크가 되게 되고 그때 설정이 적용되게 됩니다.
  • /etc/apache2/sites-enabled/ 이 디렉토리는 a2ensite 명령어로 활성화된 가상 호스트들의 설정 파일이 저장되는 곳입니다. 아파치 웹 서버는 reload 하거나 restart 할 때 이 디렉토리에 포함된 설정 파일들만 적용하게 됩니다.
  • /etc/apache2/conf-available/, /etc/apache2/conf-enabled/ 이 디렉토리들은 디테일한 아파치 웹 서버 설정이 쪼개져 있습니다. 문자셋, 자바스크립트, 로컬라이즈 에러 파일, cgi 설정등을 포함하고 있습니다. 그리고 위에 sites-available, sites-enabled에는 포함되지 않는 가상 호스트들을 위한 설정도 포함할 수 있습니다. a2enconf, a2disconf 명령어로 활성화, 비활성화 할 수 있습니다.
  • /etc/apache2/mods-available/, /etc/apache2/mods-enabled/ 이 디렉토리들은 아파치 웹 서버에서 사용하는 디테일한 모듈에 대한 설정이 쪼개져 있습니다. 세션, 인증, 캐쉬 등의 모듈 설정을 할 수 있습니다. 모듈들은 a2enmod, a2dismod 명령어를 이용해서 활성화, 비활성화 할 수 있습니다.

서버 로그 관련

  • /var/log/apache2/access.log 기본적으로 웹 서버로 오는 모든 요청이 이 곳에 저장되게 됩니다. 물론 설정을 통해, 다른 파일에 저장하도록 설정하는 것도 가능합니다.
  • /var/log/apache2/error.log 기본적으로 웹 서버에서 발생되는 모든 에러가 이 곳에 저장합니다. 아파치의 LogLevel 설정이 어떤 로그들을 얼마나 저장할지 설정하는 것도 가능합니다.

답글 남기기