Apache2 VirtualHost 설정 스크립트 공유

Apache2 설정하기 - Virtualhost 자동설정


테스트서버로 이용하던 서버가 복구하기 어려울만큼 지저분해져서 아침에 새로 세팅했다.
간단한 테스트 목적이라 무료로 인스턴스를 생성할 수 있는 오라클 클라우드를 이용중인데 이에 대한 것은 다음에 포스팅을 하도록 하겠다.

새로 세팅하면서 기존에 테스트하던 Virtualhost를 새로 작성해야 했는데, 백업파일도 지워서 그런지 좀 귀찮더라. 그래서 내친김에 Virtualhost를 설정하는 스크립트를 만들었다.


그래서 virtualhost(가상호스트)가 뭔데?

VirtualHost의 개념

VirtualHost란 하나의 웹 서버에서 여러 개의 웹 사이트를 운영할 수 있도록 하는 기능이다. VirtualHost는 보통 ServerName을 기준으로 분류를 한다. (가끔 포트로 구분하긴 하는데 많이 쓰이는 방법은 아니다.)
ServerName VirtualHost는 클라이언트의 요청에 포함된 Host 헤더를 보고 어떤 웹 사이트에 접속할 것인지를 결정한다. 예를 들어, www.example.com과 www.example.net이라는 두 개의 도메인을 하나의 웹 서버에서 운영하고 싶다면, 다음과 같이 VirtualHost 태그를 사용하여 ServerName마다 설정할 수 있다.

1
2
3
4
5
6
7
8
9
<VirtualHost *:80>
  ServerName www.example.com
  # 여기에 www.example.com에 대한 설정을 작성합니다.
</VirtualHost>
 
<VirtualHost *:80>
  ServerName www.example.net
  # 여기에 www.example.net에 대한 설정을 작성합니다.
</VirtualHost>
cs

이 정도면 대충 어떤건지 감이 잡히리라 생각한다.

자주 쓰이는 VirtualHost의 설정 내용

위 예시에서 생략한 설정내용 중 자주 쓰이는 것은 아래와 같다.

1
2
3
4
5
ServerName: 서버 도메인
ServerAlias: 서버 도메인 별명
DocumentRoot: 웹 문서가 위치한 경로
ErrorLog: 에러 로그 경로
CustomLog: 접속 로그 경로
cs

실제 virtualhost 적용 모습

이중 ServerAlias는 두개 이상의 도메인을 연결할 때 쓰이기 때문에 필요에 따라 지워도 무방하다.

설정 스크립트가 왜 필요할까?

서비스별로 차이는 있겠지만 내가 관리하는 서버들은 여러 사이트를 한 서버에 올려두고 사용하는 경우가 많다.
기존에 세팅해둔 파일을 복사해서 사용해도 되긴 하지만, 설정 내용을 매번 고쳐야하고 간혹 실수라도 하면 사이트 구동이 정상적으로 되지 않기 때문에 항상 조심스럽다.
이때 설정 스크립트를 사용한다면 실수도 줄어들고 확실하게 세팅이 가능하기 때문에 가능하다면 스크립트를 이용해서 설정하는 것이 좋다.

스크립트설정과 설명

아래 스크립트는 직접 만들고 테스트를 거친 다음 사용중인 스크립트이다.

사용 OS : Ubuntu 22.04 LTS
Apache2 버전 : 2.4 이상 구동 확인
필수사항 : Apache2.4 이상 반드시 설치되어있어야 함
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/bin/bash
 
# ServerName을 입력받음
echo "ServerName을 입력하세요."
read server_name
 
# 입력하지 않으면 스크립트 종료
if [ -"$server_name" ]; then
    echo "ServerName을 입력하지 않았습니다. 스크립트를 종료합니다."
    exit 1
fi
 
# 이미 존재하는 virtualhost 파일인지 확인
if [ -"/etc/apache2/sites-available/$server_name.conf" ]; then
    echo "이미 존재하는 도메인입니다. 아래는 변경될 세팅내용입니다."
 
# 세팅 될 내용 보여주기    
    cat <<EOF
<VirtualHost *:80>
    ServerName $server_name
    #DocumentRoot /home/{user}
    ErrorLog ${APACHE_LOG_DIR}/$server_name-error.log
    CustomLog ${APACHE_LOG_DIR}/$server_name-access.log combined
</VirtualHost>
EOF
 
# 계속 진행할 경우 위에 보여준 세팅으로 덮어쓰기
    echo "계속 진행하시겠습니까? (y/n)"
    read answer
    if [ "$answer" != "${answer#[Yy]}" ]; then
        if [ -"/etc/apache2/sites-enabled/$server_name.conf" ]; then
            echo "이미 심볼릭 링크가 존재합니다."
        else
            ln -/etc/apache2/sites-available/$server_name.conf /etc/apache2/sites-enabled/
        fi
    else
        echo "스크립트를 종료합니다."
        exit 1
    fi
else
 
# 새로운 설정 파일 작성    
    echo "새로운 설정 내용입니다."
    cat <<EOF > /etc/apache2/sites-available/$server_name.conf
<VirtualHost *:80>
    ServerName $server_name
    #DocumentRoot /home/{user}
    ErrorLog ${APACHE_LOG_DIR}/$server_name-error.log
    CustomLog ${APACHE_LOG_DIR}/$server_name-access.log combined
</VirtualHost>
EOF
 
# 설정 내용 보여주기
cat <<EOF
<VirtualHost *:80>
    ServerName $server_name
    #DocumentRoot /home/{user}
    ErrorLog ${APACHE_LOG_DIR}/$server_name-error.log
    CustomLog ${APACHE_LOG_DIR}/$server_name-access.log combined
</VirtualHost>
EOF
 
# 심볼릭 링크 생성
    if [ -"/etc/apache2/sites-enabled/$server_name.conf" ]; then
        echo "이미 심볼릭 링크가 존재합니다."
    else
        ln -/etc/apache2/sites-available/$server_name.conf /etc/apache2/sites-enabled/
    fi
 
fi
 
# 설정완료 메세지. DocumentRoot가 주석처리 되어 있기 때문에 수정해서 사용해야 함
echo "설정이 완료되었습니다. DocumentRoot를 수정한 후 사용해주세요."
 
cs

설정 내용을 보여주는 부분을 조금 더 수정하고 싶긴하지만 기능상 문제는 아니기 때문에 그냥 넘어간다.

마치며

이번 포스팅은 VirtualHost에 대한 간단한 설명과 편하게 설정할 수 있는 스크립트 파일을 공유하였다.
다음 포스팅은 'OS(우분투) 설치 후 초기 세팅'에 대해 작성준비중인데 스크립트를 실행하면 초기세팅이 완료되는 스크립트를 제작, 테스트하고 있다.
조만간 포스팅 할 수 있을 것 같으니 기대 부탁드린다.


글 쓰는 Jiniwar


댓글

이 블로그의 인기 게시물

crontab 설정방법과 로그 확인하는 법

Microsoft Defender 방화벽 설정 또는 해제하는 방법

한국 군비지출 세계 9위