[Ubuntu] 아파치 Virtual Host 설정하기[Ubuntu] 아파치 Virtual Host 설정하기

Posted at 2019. 3. 25. 02:31 | Posted in Linux/Ubuntu
반응형






※ 해당 포스팅은 Ubuntu 18.04 LTS, 버전에서 작업을 진행하였습니다.




참고 : https://webdir.tistory.com/178

참고 : https://webdir.tistory.com/196

참고 : https://seyul.tistory.com/28





 $ sudo a2enmod rewrite

 








■ 버츄얼 호스트란?



Web Server에는 기본적으로 존재하는 Host가 있으며, 이를 Main Host라고 합니다.

하나의 Web Server에는 Main Host 외에 별도의 디렉토리를 가진 여러개의 Host를 설정하여


버츄얼 호스트(virtualhost)를 설정을 통해 1개의 서버에서 여러개의 웹사이트를 운영할수 있다.






■ 버츄얼 호스트 설정하기





가장 먼저 버츄얼 호스트를 사용하여 연결할 작업 디렉토리를 하나 만들어 보자



 $ mkdir /home/사용자계정/virtual




먼저 폴더를 하나 새로 만든다.


폴더를 생성하는데 성공했다면




 $ sudo chmod -R 755 /home/사용자계정/virtual




해당 폴더를 사용하여 접근권한을 좀 풀어주으로서


외부(웹브라우저를 통한 사용자의 접속)을 허가해 준다.








우분투에 설치한 Apache의 설정들 /etc/apache2/ 위치에 존재하고 있다.


이중 버추얼 호스트를 추가하기 위해서는 sites-available, sites-enaabled 디렉토리의 새로운 설정파일을 추가해 주어야 한다.


먼저 기본 설정파일인 000-default.conf 파일을 한번 살펴보자.




 $ cat /etc/apache2/sites-available/000-default.conf





아파치를 기본적으로 설치하게 되면 기본적인 작업 디렉토리는 /var/www/html 경로에 설정되는데.


위에서 살펴본 000-default.conf 내용에 DocumentRoot /var/www/html이 설정되어 있는 기본 설정인 것을 알 수 있는데


이제 버추얼 호스트를 설정하기위해 000-default.conf와 같은 설정 파일을 하번 만들어 보자



 $ sudo vim /etc/apache2/sites-available/virtual-custom.conf

# 아파치가 80포트로 들어오는 모든 IP주소에 대해 가상호스트의 요청을 처리

# DHCP에 의해 동적 할당된다면 IP 주소가 수시로 변경될 수 있기 때문에 *를 사용

<VirtualHost *:80>

# 클라이언트에게 보여주는 호스트 이름을 지정한다.

ServerName virtual.com

# 호스트의 추가적인 별칭을 지정한다. 이름을 줄때 와일드카드 문자 *와 ?를 사용할 있다.

ServerAlias test.virtual.com *.virtual.com

# 웹문서 로딩시 에러가 발생한 경우 에러페이지에 나타나는 관리자 메일 주소이다.

ServerAdmin saak@wickedmiso.com

    

# 서버의 웹 문서가 있는 경로를 지정한다. 경로의 마지막에 "/"를 추가하면 안된다.

DocumentRoot /home/wicked/receive

    

# <Directory> ~ </Directory> 지시자는 지정한 디렉토리 이하의 모든 웹 문서들에 대하여

# 어떤 서비스와 기능을 허용 / 거부할 것인지를 설정하는 매우 중요한 지시자이다.

# 현재 루트( / ) 디렉토리에 대해 심볼릭 링크를 허용하고 .htaccess 파일의 사용을 거부한다.

# <Directory> 지시자의 설정은 개인에 따라 다르니 각자 목적에 맞게 설정해야 한다.

<Directory /home/wicked/receive>

    

# ① Options 지시자는 지정한 디렉토리 이하에 모든 파일과 디렉토리들에 적용할 접근제어를 설정한다.

Options Indexes MultiViews

            

② AllowOverride 지시자는 어떻게 접근을 허락할 것인가에 대한 설정한다.

AllowOverride None

            

 Require 지시자는 서버의 특정 영역에 접근할 수 있는 사용자를 지정하여 권한을 부여한다.

Require all granted

</Directory>

</VirtualHost>





① Options


Options 지시자는 지정한 디렉토리 이하에 모든 파일과 디렉토리들에 적용할 접근 제어를 설정한다.

디렉토리 목록을 보여줄지, CGI를 허용할 것인지 등드의 것들의 설정을 여기서 하게 된다.


가상호스틀 사용하는 경우나 하위디렉토리에서 위와 같은 루트(상위 디렉토리)에 대한 설정이 어떻게 적용되어 있던간에 가상호스트 안이나 하위 디렉토리에 다시 Options 값을 지정할 수 있다.

이때 상위 디렉토리의 다른 옵션은 변경하지 않고 특정 옵션만 제거하거나 추가할 때 + 나 - 를 Options 값 앞에 붙여 사용하기도 한다.


Options -FollowSymLinks는 상위 디렉토리 설정에서 허가된  FollowSymLinks를 제거하게 되며, Options + Indexes는 상위 디렉토리 설정에 없는 Indexes 설정을 추가한다.



 설정값

 기능

 None

 · 모든 허용을 하지 않는다. 즉 None 설정으로 이외의 다른 설정들은 모두 무시한다.

 All

 · MultiViews를 제외한 모든 옵션 설정을 허용한다.

 · Options 값이 공백일때도 All과 같다(Options (없음))

 Indexes

 · 웹 서비스의 디렉토리 접근시에 DirectoryIndex에서 지정한 파일(Index.html 등)이 존재하지 않을 경우

   디렉토리내의 파일 목록 리스트를 웹 브라우저로 보여준다.

 · 서버 보안을 위해 실 서비스에서는 사용하지 않는것이 좋다.

 Includes

 · SSI 사용을 허옹하는 설정이다.

 · 단 mode_include.c 라느 모듈은 반드시 필요하므로 기본적으로 로드되어 있다.

 IncludesNOEXEC

 · SSI사용은 허용되지만 #exec 사용과 #include는 호용되지 않는다.

 · 즉 SSI를 사용하면서 시스템에 위함헌 SSI의 실행태그는 허용하지 않는다.

 FollowSymlinks

 · 심볼릭 링크를 허용한다.

 · 이 옵션을 지정하면 웹 브라우저에서 링크 파일의 경로까지도 확인 할 수 있게된다.

 · 보안상 이 값은 설정하지 않는 것이 좋다. 

 ExecCGI

 · PERL등과 같은 CGI 실행을 허용하기 위한 설정이다.

 · 원래는 아파치에서 CGI 사용은 ScriptAlias로 지정된 위치에서 사용하는 것이 기본이다.

 · 하지만 ScriptAlias가 지정되지 않은 디렉토리에 이 옵션이 지정되어 있다면

   지정된 디렉토리내에서는 CGI 사용히 허용된다.

 · 물론 이 경우에도 "AddHandler cgi-script" 지시자에서 정의한 확장자만 유효하다.

 MultiViews

 · 웹 브라우저의 요청에 따라 적절한 페이지를 보여준다.





② AllowOverride


AllowOverride 지시자는 어떻게 접근을 허락할 것인가에 대한 설정이다.


특정 디렉토리에 대한 방문자들의 접근방식을 어떤 박식으로 인증하여 허용할 것인가의 문제라고 할 수 있다.


AllowOverride에서 설정하는 값들은 중복해서 설정될 수 있으며 그때마다 가장 최근에 설정된 값이 항상 우선적용된다.



설정값

기능

 None

 · 이 값이 설정되면 AccessFileName에 지정된 파일을 엑세스 이전파일로 인식하지 않는다.

 · 즉 AccessFileName의 값이 대부분 .htaccess 이므로 이를 무시하게 된다.

 · 아주 제한적인 접근만을 허용할때 사용하는 값이다.

 All

 · 이전의 인증방식에 대하여 새로운 접근인증방식을 우선 적용하도록 Override를 허용한다.

 AuthConfig

 · AccessFileName 지시자에 명시한 파일에 대하여 AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile,

   AuthName, AuthType, AuthUserFile, require 등과 같은 클라이언트 인증지시자의 사용을 허용한다.

 · 즉 htpasswd 유틸리티를 이용하여 특정 디렉토리의 접근은 AccessFileName에 명시한 파일(.htaccess)로

   제어하고자 할 때에 해당 디렉토리내에 이 값을 주로 사용한다.(디렉토리 인증설정)

 FileInfo

 · AccessFileName 지시자에 명시한 파일에 대하여 AddEncoding, AddLanguage, AddType,

   DefaultType, ErrorDocument, LanguagePriority 등과 같은 문서 유형을 제어하는 지시자 사용을 허용한다.

 Indexes

 · AccessFileName 지시자에 명시한 파일에 대하여 AddDescription, AddIcon, AddIconByEncoding,

   AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions,

   ReadmeName 등과 같은 디렉토리 Indexing을 제어하는 지시자 사용을 허용한다.

 Options

 · AccessFileName 지시자에 명시한 파일에 대하여 Options 그리고 XBitHack등과 같은

   특정 디렉토리옵션을 제어하는 지시자 사용을 허용한다.

 Limit

 · AccessFileName 지시자에 명시한 파일에 대하여 allow, deny, 그리고 order 등과 같은

   호스트 접근을 제어하는 지시자 사용을 허용한다.





③ Require


설정값

 all granted

 · 모든 접근에 대해 제한을 두지 않는다.

 all denied

 · 모든 접근을 제한한다.

 env env-var

 · 해당 환경 변수만 접근을 허용한다.

 method http-method

 · 해당하는 HTTP 메소드(GET / POST등)만 허용한다.

 expr expression

 · 표현식이 참일때만 접근을 허용한다.

 user userid

 · 사용자 아이디에 해당할때만 접근을 허용한다.

 group group-name

 · 그룹에 해당하는 그룹만 접근을 허용한다.

 valid-user

 · 허가된 사용자만 접근을 허용한다.




와 같이 설정을 해준다. /etc/apache2/sites-enaabled/ 경로에 설정한 파일의 심볼릭 링크를 생성해 준다.


ln -s /etc/apache2/sites-available/원본파일의 경로 /etc/apache2/sites-available/생성할 심볼릭 링크 경로



 $ sudo ln -s /etc/apache2/sites-available/virtual-custom.conf /etc/apache2/sites-enabled/virtual-custom.conf

 $ ls /etc/apache2/sites-enabled/ -al



위와같이 virtual-custom.conf 심볼릭 링크가 생성된 것을 확인 할 수 있다.


이제 아파치를 재시작 하여주자



 $ sudo service apache2 restart



아파치를 재시작하고 브라우저를 통해 설정한 ServerName 값으로


접속이 되는 것을 확인하면 모든 설정이 완료된 것이다.








반응형
//