본문 바로가기

리눅스/리눅스 - 데비안 계열

[데비안] Apache2 설정

반응형

기본 디렉토리 구조



Debian 8.5 기준에서 Apache2의 기본 디렉토리 구조는 아래와 같다.


/var/www : 웹서비스를 할 컨텐츠가 위치하는 기본 경로로, 다른 위치에 설정도 가능하나, 이곳에서 서비스를 제공하는 것을 권장한다.

/etc/apache2 : Apache2 관련 프로그램 디렉토리로 apache2와 관련된 설정파일 apache2.conf, 포트 관련 ports.conf 파일 등이 있다.

/etc/apache2/sites-available : 웹서비스를 할 컨텐츠 경로 및 권한 등의 설정 값이 있으며 디폴트 설정값으로 000-default.conf 파일이 있다. 그 외 웹서비스를 할 컨텐츠마다 *.conf로 명명된 설정된 파일을 생성해주면 된다.

/etc/apache2/sites-enable : sites-available에 설정된 파일들 중 실제로 활성화된 것들은 심볼릭 링크로 연결된 파일들이 있는 곳으로, a2ensite / a2dissite 등의 명령어를 통해 수정된다.

/etc/apache2/mods-available : Apache2 관련 모드들이 있다.

/etc/apache2/mods-available : Apache2 관련 모드들 중에 실제로 활성화된 것들은 심볼릭 링크로 연결된 파일들이 있는 곳으로, a2enmod / a2dismod 등의 명령어를 통해 수정된다.




간단한 웹컨텐츠 생성 및 Apache2 서비스 설정 예시



아래의 절차를 밝으면 Apache2의 설정이 끝나고 웹서비스를 개시 할 수 있다.

웹컨텐츠 생성과 웹서비스 개시까지 아래의 절차를 밝으면 쉽게 할 수 있다.


  1. 서비스 할 웹컨텐츠 생성
  2. *.conf 파일 생성
  3. 생성된 *.conf 파일에 사이트 설정과 관련된 내용 저장
  4. a2ensite *.conf 로 설정된 값을 a2ensite 명령어를 통해 Apache2가 인식할 수 있도록 sites-enable 디렉토리에 심링크 추가
  5. service apache2 reload 명령어로 추가된 심링크가 서비스 될 수 있도록 Apache2 reload


  • 웹컨텐츠 생성

웹컨텐츠를 만들고, 서비스 할 경로에 웹컨텐츠를 놓으면 된다.

여기서는 간단한 디버깅을 위한 컨텐츠를 예시로 하기 위해 index.html, phpinfo.php, mysql.php 파일을 생성하여 /var/www/debug 디렉토리를 서비스 경로로 설정했다.

따라서 첨부된 파일 3개를 /var/www/debug 내에 넣으면 된다.

(mysql.php의 경우 mysql 또는 mariadb를 설치한 경우에만 필요하며, 해당 파일 내의 DB ID와 PW 설정이 필요하다)


index.htmlmysql.phpphpinfo.php



  • *.conf 파일 생성

파일 명은 *.conf 의 명명법으로 파일을 생성해야한다.


예를 들어 last.com의 사이트를 만들었다면 last.conf 식인데, 파일 이름은 달라도 상관없지만, 한눈에 보고 이해하기 쉽게 하기위해 서비스하는 사이트명을 쓰는 것이 좋다.

(www.last.com.conf 처럼 만들어도 되니 마지막에 .conf만 잘 붙여주면 된다.)

여기서는 디버깅을 위해 간단하게 debug.conf 라고 파일명을 짓는다.


  • 생성된 *.conf 에 사이트 설정과 관련된 내용 저장

*.conf 파일을 만들었으면 호스트 및 포트, 서비스 디렉토리, 보안 권한 등등 여러가지 설정 내용을 추가하고 저장한다.

예1) 은 가상호스트를 사용하지 않고 다이렉트로 연결하는 방법을 사용한 것이다.

해당 도메인 뒤에 /debug를 붙여야 한다. (예 last.com/debug)

예2) 는 가상호스트를 사용한 것으로 도메인 이름을 파싱하는 방법으로 서비스하는 것으로 외부에서 DNS 서비스를 설정 했을 경우에 가능한 방법이다.

자세한 내용은 아래 부분의 VirtualHost 부분을 참고하도록 한다.



예1

Alias /debug /var/www/debug

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


예2

<VirtualHost *:80>
ServerName 127.0.0.1
DocumentRoot /var/www/debug
</VirtualHost>

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



  • a2ensite *.conf 명령어로 심링크 추가

추가된 *.conf 파일들은 설정값이 저장된 파일일 뿐 Apache2가 사용 할 수 있는 상태는 아니다.

사용 가능하도록 하기 위해서는 아래의 명령어를 통해 Apache2가 인식 할 수 있도록 명령어를 통해 심링크를 추가해줘야 한다.

a2ensite debug.conf


만약, 잠시 중단하거나 필요가 없는 경우에는 아래의 명령어로 비활성화 하도록 하면 된다.

a2dissite debug.conf


  • service apache2 reload 명령어로 서비스중인 Apache2 인식하고 서비스 하도록 reload

Apache2가 서비스중인 경우에는 reload를 통해서 설정된 파일을 인식하고 서비스하도록 아래의 명령어를 사용하도록 한다.

service apache2 reload



아래와 같이 아주 간단한 사이트이면서, php 정보와 mysql 정보를 볼 수 있는 웹컨텐츠를 하나 생성했다.






VirtualHost 설정



가상 호스트는 하나의 IP를 통해서 다수의 사이트를 제공 하는 방법이다.

3가지의 방법이 있는데, 이중 첫 번째와 두 번째의 경우 테스트는 가능하나, 실제 웹서비스를 하기 위해서는 외부에서 DNS 서비스를 해주는 업체를 통해 등록을 해야한다.



1. 하나의 메인 도메인을 사용해 다중 서브 도메인 통한 웹서비스 제공

메인 도메인 last.com의 서브 도메인은 아래와 같다.

my.last.com

admin.last.com

user.last.com


메인 도메인 last.com 앞에 my, admin등 필요에 따라 DNS를 추가하여 설정하면 된다.


Apache2의 *.conf 내용은 아래와 같이 설정하면 된다.


<VirtualHost *:80>
ServerName my.last.com
DocumentRoot /var/www/last/my
</VirtualHost>


<VirtualHost *:80>
ServerName admin.last.com
DocumentRoot /var/www/last/admin
</VirtualHost>


<VirtualHost *:80>
ServerName user.last.com
DocumentRoot /var/www/last/user
</VirtualHost>


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



2. 서로 다른 도메인을 통한 웹서비스 제공


last.com

first.com

middle.com


서로 다른 도메인을 DNS에 등록하고 아래와 같이 Apache2의 *.conf 파일에 설정을 하면된다.



<VirtualHost *:80>
ServerName last.com
DocumentRoot /var/www/last
</VirtualHost>


<VirtualHost *:80>
ServerName first.com
DocumentRoot /var/www/first
</VirtualHost>


<VirtualHost *:80>
ServerName middle.com
DocumentRoot /var/www/middle
</VirtualHost>


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


도메인 관련 설정의 경우 실제 웹서비스를 하기 위해서는 외부 DNS 서비스 업체에 DNS 설정을 등록해야 한다.

다만, 내부적으로 테스트는 가능한데, 이 경우 윈도우(클라이언트)에서는 hosts 파일을 수정하면 된다.


Windows\System32\drivers\etc 위치에 hosts 파일이 있는데, 아래와 같이 설정하면 된다.


127.0.0.1 my.last.com

127.0.0.1 admin.last.com

127.0.0.1 user.last.com


웹브라우저에서 my.last.com 으로 이동하는 경우 윈도우에서 자체적으로 DNS를 설정하여 보내므로 Apache2는 유입된 URL을 파싱하여 매칭하는 DocumentRoot 경로에 있는 웹컨텐츠를 보여주게 된다.



3. 서로 다른 포트 제공


특정 포트를 설정하는 경우에 여러 사이트를 제공 할 수 있으며, 외부 DNS 등록 절차 필요 없이 사용 할 수 있다.

다만, URL 뒤에 포트번호를 적어야 하므로, 불편함이 생긴다.


last.com

last.com:8080

last.com:9999



<VirtualHost *:80>
ServerName last.com
DocumentRoot /var/www/last
</VirtualHost>


<VirtualHost *:8080>
ServerName last.com
DocumentRoot /var/www/last8080
</VirtualHost>


<VirtualHost *:9999>
ServerName last.com
DocumentRoot /var/www/last9999
</VirtualHost>


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



같은 도메인이지만, 포트 번호마다 서로 다른 웹컨텐츠를 제공 할 수 있으므로, 일반적인 내용은 80포트로, 그외 특정 사용자를 위한 내용이라면 특정 포트로 접속하도록 할 수 있는 방법이다.


/etc/apache2 디렉토리 내에 ports.conf에 추가된 8080 포트와 9999 포트를 추가하고, 가상 호스트를 사용하므로 NameVirtualHost를 추가한다.



Listen 80

Listen 8080

Listen 9999


NameVirtualHost *:80

NameVirtualHost *:8080

NameVirtualHost *:9999



이제 같은 도메인인 last.com이지만 뒤에 :8080 또는 :9999 등을 추가하는 경우 다른 웹서비스를 제공하는 것을 볼 수 있다.




Module 설정



Apaceh2에서 제공하는 module이나 추가된 module를 사용 할 수 있다.

모듈 중에 자주 사용되는 rewrite 모듈을 예로 들면 아래의 명령어를 통해 모듈을 활성 및 비활성화 시킬 수 있다.



a2enmod rewrite

a2dismod rewrite



반응형