Apache2 Setting AtoZ
여러 호스트 구축
동일한 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 |