본문 바로가기

IT, Computer/Linux

아파치 홈 디렉토리 설정 및 가상호스트설정

해당글은 여기에 이전에 작성된 APM설치글을 기준으로 경로가 작성되어있습니다.

이 글은 ip관련 가상호스트설정은 다루지 않습니다.

 

아파치는 소스설치시 기본 디렉토리위치는

'아파치지정설치위치(prefix)/htdocs/'로 정의됩니다. (저는 prefix를 /usr/local/apache로 설정)

yum설치일경우 '/var/www/html' 로 정의됩니다.

단일사이트를 계획중이라면 여기를 계속해서 이용해도되지만

주로 /home을 기준으로 유저를 만들어 유저별 페이지를 나눠 관리하는 편입니다.

 

여기 예시도 /home을 주축으로 하여 유저별로 관리하는식으로 만듭니다.

 

저는 goat라는 유저를 생성했으며 웹호스팅을 위해 미리 public_html이라는 디렉토리를 생성했습니다.

[goat@ns1 ~]$ mkdir -p ~/public_html

 

 

Apache 셋팅을 변경합니다.

# vi /usr/local/apache/conf/httpd.conf

적절한 위치에 /home/*/public_html 의 Directory 관련 문구를 추가하고

추가로 httpd-vhost구문을 찾아 #으로 이루어진 주석을 제거합니다.

.
.
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>
########이 부분을 추가할것##########
<Directory "/home/*/public_html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
###################################

#
# DirectoryIndex: sets the file that Apache will serve if a directory
.
.
# Virtual hosts
Include conf/extra/httpd-vhosts.conf # 기존에앞에있던 #(주석)을 제거한다!
.
.

# vi /usr/local/apache/conf/extra/httpd-vhosts.conf

제일 아래에 아래문구를 삽입합니다. (그 외 기본으로있는 VirtualHost 구문은 삭제 혹은 주석처리를 꼭 하십시오.)

.
.
<VirtualHost *:80>
 DocumentRoot "/usr/local/apache/htdocs"
    ServerName localhost
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/home/goat/public_html"
    ServerName goatasriel.com
    ServerAlias www.goatasriel.com
</VirtualHost>

이전글인 DNS서버만들기에서 goatasriel.com이라는 사설도메인을 만들었으니 그대로 이용할것입니다.

ServerAlias는 필수는 아닙니다.

 

아파치서비스를 (재)시작합니다.

# systemctl (re)start httpd

유저폴더 접속권한을 변경합니다.

# chmod 711 /home/goat

 

 

유저로 다시 접속한뒤 간단한 사이트를 하나 만듭니다.

# su goat

$ vi ~/public_html/index.html

wow

 

접속을 확인합니다.

접속이 vhost로 인해 각자 넘어가는것을 확인할 수 있습니다.

*goatasriel.com는 httpd-vhost를 통해 /home/goat/public_htm l로 접근했습니다.

*172.30.1.34는 httpd-vhost를 통해 /usr/local/apache/htdocs 로 접근했습니다.

 

 

 

 

 

추가글

userdir로 홈디렉토리 설정하기

userdir기능을 사용하면 /home/유저명/public_html 을 ip/~유저명/ 으로 접속이 가능해진다.

기존글처럼 진행하되

# vi /usr/local/apache/conf/httpd.conf 아래 두 구문 추가로 주석해제

Include conf/extra/httpd-userdir.conf 
LoadModule userdir_module modules/mod_userdir.so

기존글에 /home/*/public_html Directory구문은 삭제

#<Directory "/home/*/public_html">
#    Options Indexes FollowSymLinks
#    AllowOverride None
#    Require all granted
#</Directory>

 

 

도메인을 주목

*172.30.1.34/~goat/ 는 172.30.1.34/goat/public_html 과 같은 의미입니다.

*보안상 ~유저명 기능을 사용하고 싶지않다면 userdir기능을 안쓰는게 좋습니다.

 

 

 

추가 userdir 보안관련

userdir기능은 기본적으로 /home 을 루트디렉토리로 설정하려는 경향이있습니다.

userdir이 설정되어있고 httpd-vhost.conf 에 따로 localhost구문이 없고, httpd-vhost.conf 에서 warning이 발생한다면

localhost가 /home 을 가르키게됩니다.

vhost에서 warning이 발생하지않으면 가장위에있는 vhost로 프록시 시키며, vhost기능을 애초에 사용하지 않으면 document root가 접속이 되는걸로보아

위 사진처럼 /home으로 설정되는 현상은 버그인것 같습니다. 저 버그는 보안에 취약할 수 있으니 참고하시길 바랍니다.

주로 vhost가 warning이 뜨기 제일 좋은 조건이 기존에 있는 예제 virutalhost문구(dummy host~ 어쩌구어쩌구) 를 지우지 않을때 발생합니다.