본문 바로가기

목록이 없습니다.

[apache2] virtualhost로 여러 사이트 배포하기

Server/Ubuntu

    spring framework가 올라가있는 소스를 배포할 때 보통 Tomcat을 올려 Maven을 통해 배포하는데 최근에 서버를 이전하면서 나누어져있던 어플리케이션들을 통합하는 작업이 있었습니다. 각 어플리케이션들의 도메인이 전부 달랐지만 한 서버에 어떻게 해야할지 고민이 될텐데 이럴 때 Tomcat 앞에 Apache를 두어 가상호스트(VirtualHost)를 통해서 iptables 설정 없이 라우팅을 해주면 됩니다.

     


    해당 작업은 root 권한으로 수행해주기 위해서 root 사용자로 변경해줍니다.

     

    $ su root

     

    apache 설치

    우선 apache를 설치해줍니다.

    # apt-get update
    # apt-get install apache2

     

    정상적으로 설치되었다면 서버 ip로 접속해보면 아파치기본화면이 보입니다.

    자주 사용되는 Apache 설정 파일들이 어디에 위치해있는지 그리고 로그, 기본적인 시작, 종료 명령어를 정리해둡니다.

     

    # 아파치 설정 디렉토리
    /etc/apache2
    
    # 아파치 기본 설정 파일
    /etc/apache2/apache2.conf
    
    # 아파치 포트 설정 파일
    /etc/apache2/ports.conf
    
    # virtual host 관리 디렉토리
    /etc/apache2/sites-available/
    
    # virtual host를 이용하기 위한 설정 디렉토리
    /etc/apache2/sites-enabled/
    
    # 모듈 설정 디렉토리
    /etc/apache2/mods-available/
    /etc/apache2/mods-enabled/
    
    # 로그
    /var/log/apache2
    
    -- apache2 시작 (root권한)
    # service apache2 start
    
    -- apache2 중지 (root권한)
    # service apache2 stop
    
    -- 버전 확인
    # apachectl -version
    
    -- 모듈 사용 설정 확인
    # apachectl -M

     

    우리가 설정해야할 VirtualHost작업은 proxy를 사용하기 때문에 a2enmod 명령어를 통해 몇가지 모듈을 활성화해주어야 합니다. (root 권한)

     

    # a2enmod rewrite
    # a2enmod proxy
    # a2enmod proxy_http

     

    그리고 위에서 정리했던 virtual host 관리 디렉토리에 들어가서 default 파일을 수정해줍니다.

    (버전에 따라서 default 파일이 다를 수 있습니다. 현재는 000-default.conf)

     

    000-default-conf 파일을 열면 기본적으로 VirtualHost가 하나 있을텐데 그 아래에 추가해주시거나 기본 설정은 무의미하다면 저처럼 다 지우고 설정해주시면 됩니다.

     

    아래와 같이 VirtualHost는 3가지 상황이 있습니다.

    • apache 내부 경로 설정
    • 내부 WAS 연동 (여기서는 Tomcat)
    • 내부 WAS 연동 + SSL

    순서대로 정리해봅니다.

     

    apache 내부 경로 설정

    <!-- 값 설명 -->
    <VirtualHost *:80>
    	ServerName 서버이름(요청받을 도메인)
        ServerAlias 서버별칭(추가도메인 : 생략가능)
    	DocumentRoot root경로
    	<Directory root경로></Directory>
     </VirtualHost>
     
     <!-- 예제 -->
     <VirtualHost *:80>
    	ServerName test.co.kr
        ServerAlias www.test.co.kr
    	DocumentRoot /var/www/html/test
    	<Directory /var/www/html/test></Directory>
     </VirtualHost>

    내부 경로로 연결해주는건 프록시도 사용하지 않고 그저 Directory만 설정해주면 됩니다. 제일 간단하죠.

     

    기본 연동

    <!-- 값 설명 -->
    <VirtualHost *:80>
    	ServerName 서버이름(요청 받을 도메인)
        ServerAlias 서버별칭(추가도메인:생략가능)
    	ProxyRequests 프록시요청여부 (On, Off)
    
    	<Proxy *>
    		Order deny,allow
    		Allow from all
    	</Proxy>
    
    	ProxyPass 요청root경로 proxy로 전달할 경로(도메인 및 포트)
    	ProxyPassReverse 요청root경로 revers proxy로 전달할 경로(도메인 및 포트)
    </VirtualHost>
     
    <!-- 예제 -->
    <VirtualHost *:80>
    	ServerName test.co.kr
    	ProxyRequests Off
    
    	<Proxy *>
    		Order deny,allow
    		Allow from all
    	</Proxy>
    
    	ProxyPass / http://test.co.kr:18080/
    	ProxyPassReverse / http://test.co.kr:18080/
    </VirtualHost>

    tomcat을 18080으로 띄워두고 위와같이 설정해주면됩니다.

     

    SSL 연동

    <!-- 값 설명 -->
    <VirtualHost *:443>
            ServerName 서버이름(요청받을 도메인)
            ServerAlias 서버별칭(추가도메인 : 생략가능)
    
            SSLEngine SSL엔진 설정여부(On, Off)
            SSLCertificateKeyFile   key.pem 파일 경로
            SSLCertificateFile      perm 파일 경로
            SSLCACertificateFile    crt.pem 파일 경로
    
            ProxyRequests 프록시 요청 여부(On, Off)
    
            <Proxy *>
                Order deny,allow
                Allow from all
            </Proxy>
    
            ProxyPass 요청root경로 proxy로 전달할 경로(도메인 및 포트)
    		ProxyPassReverse 요청root경로 revers proxy로 전달할 경로(도메인 및 포트)
    </VirtualHost>
    <VirtualHost *:80>
            ServerName 서버이름(요청받을 도메인)
            ServerAlias 서버별칭(추가도메인 : 생략가능)
            Redirect permanent 요청root경로 리다이렉팅할 root경로
    </VirtualHost>
     
    <!-- 예제 -->
    <VirtualHost *:443>
            ServerName test.co.kr
            ServerAlias www.test.co.kr
    
            SSLEngine on
            SSLCertificateKeyFile   /etc/apache2/ssl/test.key.pem
            SSLCertificateFile      /etc/apache2/ssl/test.perm
            SSLCACertificateFile    /etc/apache2/ssl/test.crt.pem
    
            ProxyRequests Off
    
            <Proxy *>
                Order deny,allow
                Allow from all
            </Proxy>
    
            ProxyPass / http://www.test.co.kr:9080/
            ProxyPassReverse / http://www.test.co.kr:9080/
    </VirtualHost>
    <VirtualHost *:80>
            ServerName test.co.kr
            ServerAlias www.test.co.kr
            Redirect permanent / https://www.test.co.kr/
    </VirtualHost>

    SSL 인증서를 붙인 경우에는 80포트로 들어오는 경우 433포트로 리다이렉팅해주는 로직과 SSL 엔진 작동여부 및 SSL과 관련된 파일들의 경로를 추가해주면 됩니다.