서문
아파치 웹 서버는 세계에서 가장 광범위하게 사용되고 있는 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은 본인에 해당하는 값으로 바꾸는 거 잊지 마세요.
지금까지 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 설정이 어떤 로그들을 얼마나 저장할지 설정하는 것도 가능합니다.