여러 호스트 구축

동일한 IP(example.com)에서 여러 호스트(a.example.com, b.example.com ...) 생성은 다음과 같다.

 

* 플랫폼 : Apache2

* 위치 : /etc/apache2/sites-available

 

Step 1. {Site_name}.conf (ex. test_page.conf)

* 수정한 부분 : {Folder_name}

$ sudo vim {Site_name}.conf

<VirtualHost *:80>
        DocumentRoot /var/www/{folder_name}
        <Directory /var/www/{folder_name}/>
                Options None
                AllowOverride All
        </Directory>
</VirtualHost>

 

Step 2. 000-default.conf

* 수정한 부분 : {New_Domain_name}, {Folder_name}

$ sudo vim 000-default.conf

<VirtualHost *:80>
        ServerName {New_Domain_name}
        DocumentRoot /var/www/{Folder_name}
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

 

Step 4. 끝

$ sudo service apache2 restart

 

SSL (Let’s Encrypt 기준)

* 수정한 부분 : {Folder_name}, {New_Domain_name}, {Domain_name}

 

- 설치

$ sudo apt install certbot python3-certbot-apache

 

- 도메인별로 인증서 추가

* 도메인 제거 : $ sudo letsencrypt revoke --cert-path /etc/letsencrypt/archive/{Domain_name}/cert1.pem

$ sudo letsencrypt certonly -d {New_Domain_name}

$ sudo vim 000-default-le-ssl.conf

<VirtualHost *:443>
        ServerName {New_Domain_name}
        DocumentRoot /var/www/{Folder_name}
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        Include /etc/letsencrypt/options-ssl-apache.conf
        SSLCertificateFile /etc/letsencrypt/live/{New_Domain_name}/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/{New_Domain_name}/privkey.pem
</VirtualHost>

 

- 등록된 인증서 조회

$ sudo certbot certificates

 

- 인증서 갱신

$ sudo certbot renew

 

- 인증서 자동 갱신

$ sudo crontab -e

[추가] 0 5 * * 6 certbot renew --post-hook "service apache2 reload"

 

- 인증서 삭제

$ certbot delete --cert-name {Domain_name}

 

타 사이트 리다이렉트

* 수정한 부분 : {New_Domain_name}, {Other_Domain_name}

$ sudo vim 000-default.conf

<VirtualHost *:80>
        ServerName {New_Domain_name}
        Redirect permanent / {Other_Domain_name}
</VirtualHost>

 

HTTPS 리다이렉트 (HTTP → HTTPS)

* 추가한 도메인 안에 넣으면 된다.

* 수정한 부분 : {New_Domain_name}

$ sudo vim 000-default.conf

Redirect / http://{New_Domain_name}
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

 

폴더 권한 부여

$ sudo /etc/apache2/apache2.conf

<Directory {Folder_name}>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

 

Apache2와 Nginx 비교

1. <VirtualHost *:80> ... </VirtualHost> = server { .. }

2. DocumentRoot = root

3. <Directory ...> ... </Directory> = location / { ... }

 

보안

- 서버 정보 숨기기

$ sudo vim /etc/apache2/conf-available/security.conf

[수정] OS → Prod

ServerTokens Prod

 

- 디렉토리 인덱싱 및 심볼릭 링크 차단

$ sudo vim /etc/apache2/apache2.conf

[수정] Indexes FollowSymLinks → None

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

 

링크 걸때 주의할 점

- 잘못된 예시 : sudo ln -s default /etc/nginx/sites-enabled/

- 올바른 예시 : sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/

 

'Web' 카테고리의 다른 글

NodeJS Setting AtoZ  (0) 2021.06.17
Ubuntu Apache2 구조  (0) 2020.04.13
HTTP → HTTPS Redirect  (0) 2020.03.22