본문 바로가기
HW 프로그래밍/라즈베리파이

아파치2 설정

by N2info 2020. 3. 5.

기존 디렉토리 구조

/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 관련 모드들이 있음
           Apache2 관련 모드들 중에 실제로 활성화된 것들은 심볼릭 링크로 연결된 파일들이 있는 곳으로,
           a2enmod / a2dismod 등의 명령어를 통해 수정된다.

출처: https://sacstory.tistory.com/entry/Apache2-설정-관련 [나긋한 개발자]

웹서비스를 위한 서비스설정 방법

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

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

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

따라서 첨부된 해당 파일을 /var/www/debug 내에 넣으면 된다.

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

  • *.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

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

출처: https://sacstory.tistory.com/entry/Apache2-설정-관련 [나긋한 개발자]