먼저, 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 룰이 적용되는 것을 아래의 그림처럼 확인할 수 있다.
'리눅스:Ubuntu > 개발 관련' 카테고리의 다른 글
Ubuntu 20.04 에서 Apache2 Vhost 설정(추가 정리) (0) | 2021.10.05 |
---|---|
Ubuntu 20.04에서 Apache2, 포트 변경, php 서버 구축하기. (0) | 2020.11.10 |
[Error] SSH 접속 시 Permission denied (publickey) (1) | 2020.10.24 |
[Error] sshd: no hostkeys available -- exiting. (0) | 2020.10.24 |
Ubuntu 20.04에 CMake 3.18.4 설치하기! (0) | 2020.10.15 |