728x90
반응형

먼저, Vhost란 Virtual Host의 줄임말이다.

원래 Apache를 설치하면 /var/www/html 디렉토리에 있는 웹 문서를 로드하여 웹 서버를 서비스하는데, 이 상태는 하나의 host가 서비스되는 것이다. 아래와 같이 말이다.

 

그러나 Vhost 를 이용하면 달라진다. 아래의 그림처럼 디렉토리 별로 완전히 다른 호스트로 구분되어, 하나의 웹 서버에 여러 호스트를 운영할 수 있는 것이다.

이 때, 호스트의 분기는 rewrite 등의 모듈을 함께 이용하기 때문에 rewrite까지 이번 포스팅에서 다룰 것이다.

VHOST 설정

VHOST 설정을 위해서는 각 가상 호스트 별로 설정 파일을 마련해야한다. 바로 다음과 같은 경로에!

sudo vim /etc/apache2/sites-available/001-phindol.conf

001-phindol.conf 라는 설정 파일을 만듦으로써 하나의 가상 호스트를 생성하는 것이라고 보면 되겠다. phindol은 임의 이름이다.

sites-available 를 헤깔리면 안된다. 이 .conf 파일의 내용은 아래와 같다. 각 지시자들은 검색을 통해서 확인하도록 한다.

<###VirtualHost *:80###>
    ServerName phindol.com
    ServerAlias *.phindol.com
    ServerAdmin ysho0707@gmail.com
    DocumentRoot /var/www/html/phindol.com
    # chmod -R 755 path

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

    <###Directory /var/www/html/phindol.com###>
        Options All
        AllowOverride All
        Require all granted
# rewrite 명령어
# sudo a2enmod rewrite
# sudo systemctl restart apache2
        RewriteEngine on
        RewriteCond %{REQUEST_URI} ^(.*)\.(html|htm|php|lib|act|pcls|pexe)$
        RewriteRule . /var/www/html/phindol.com/System/enter.php [L]
    <###/Directory###>
<###/VirtualHost###>

(###은 알아서 지우도록 하자)

참고)
/var/www/html/sub에 해당하는 부분에서 Permission 에러가 난다면 위의 주석 처리된 chmod 755 권한으로 갱신한다.

위에서 sites-available 디렉토리 내에 생성을 했다면 다음은 sites-enabled 디렉토리 내에 심볼릭 링크를 생성해야한다.

아래와 같이 하며 명령어는 다음과 같다.

sudo ln -s /etc/apache2/sites-available/001-phindol.conf /etc/apache2/sites-enabled/001-phindol.conf

sites-available 디렉토리 내의 conf 파일과 동일한 이름으로 심볼릭 링크를 지어준다.

vhost를 추가할 때에는 아래의 명령으로 추가됨을 반영하자.

sudo a2ensite phindol(sites-available, enable등에서 지정했던 이름 ex] 001-phindol.conf 에서의 phindol)

 

윈도우 host 파일 설정

conf 파일의 설정을 봤다면 알겠지만 취급할 virtual host의 도메인은 "phindol.com" 이다.

그러나 우리는 해당 도메인을 구매하여 구비하지 않았기 때문에 실제로 테스트를 할 수 없다. 이러한 경우 윈도우의 host 파일을 수정하여 나의 컴퓨터 내에서 해당 도메인에 대한 접속을 바꿔주는 것이다.

C:\Windows\System32\drivers\etc

위 경로를 관리자 권한으로 열고, 아래의 그림처럼 수정한다. ( 탭 단위로 구분한다 )

우분투 20.04에서 테스트 할 경우 127.0.0.1 이 먹히지 않는 경우가 있어 확인해 봤더니 다음과 같은 이유였다.

그리고 나서 아파치를 재시작한다.

#은 지우고 실행한다.

성공적인 결과가 말을 해주고 있다.

왼쪽은 http://localhost/ 도메인으로 vhost 설정이 되지 않은 메인 host이고 오른쪽은 vhost 설정이 된 가상 host이다. vhost 설정을 하면서 rewrite라고 하는 주소를 고쳐쓰는 모듈을 설정했는데 왼쪽과 오른쪽에서 rewrite 모듈이 실행 안되고/되고 의 결과를 본다면, vhost 설정을 통해 하나의 아파치 웹 서버에서 서로 독립적인 사이트처럼 실행된다는 사실을 확인할 수 있다.

로그 폴더의 생성

vhost 설정 중 log 각 vhost 마다 로그 폴더를 따로 두었는데, 이에 따른 생성 및 권한 설정을 해야한다.

sudo mkdir /var/log/apache2phindol

Rewrite 모듈 설정

Rewrite는 Request를 정해진 Rule에 의해서 다른 URL or File로 보내는 모듈을 뜻한다. 

예를 들어, 다음 그림과 같다고 보면 된다.

그렇다면, redirect와 다른 점은 무엇일까?

redirect 는 클라이언트 사이드에서 처리가 이루어지며, 클라이언트의 주소 표시줄에 변경된 주소가 표시된다.
rewrite 는 서버 사이드에서 처리가 이루어지며, 클라이언트의 주소 표시줄에 변경된 주소가 표시되지 않는다.

위의 vhost .conf 파일 설정 중 rewrite 부분을 다시 확인 한다면,

이 부분이다. 각 지시자들에 대한 설명은 검색을 통해 확인한다.

RewriteEngine ~ RewiteRule 까지가 본인이 정한 Rewrite 룰인 것이다. 저 룰이 실행되려면 다음과 같은 명령을 명령 라인에 실행한 뒤 아파치를 재실행 하면 된다.

sudo a2enmod rewrite # rewrite 모듈 활성

이후에 apache 재실행을 하면 phindol.com 에 대해서만 rewrite 룰이 적용되는 것을 아래의 그림처럼 확인할 수 있다.

728x90
반응형

+ Recent posts