layout : post
title : "vhost"
category : apache
아파치의 vhost 기능을 사용하여 하나의 도메인으로 여러 서비스 제공
인증서 발급 - 도커 사용
docker run -it --rm --name certbot \
-v '/etc/letsencrypt:/etc/letsencrypt' \
-v '/var/lib/letsencrypt:/var/lib/letsencrypt' \
certbot/certbot certonly -d '*.example.com' --manual --preferred-chain "ISRG Root X1" --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory
- it : interactive + tty. 터미널을 통해 컨테이너와 상호작용 위해 필요
- rm : 컨테이너 종료시 삭제
- v '…' : 인증서가 저장될 경로를 볼륨으로 설정
- d '.example.com' : 인증서를 발급받을 도메인 (. 의경우 와일드 카드)
- manual --preferred-challenges dns : DNS를 통해 도메인을 인증
- server https://~~~ : 발급을 요청할 let's encrypt 서버 주소
이메일 주소 입력 및 약관 확인 동의
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.example.com with the following value:
코드
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
도메인의 txt 레코드 설정
호스트 이름 : _acme-challenge.example.com
레코드 값 : 코드
이후 적용 되었는지 확인
dig txt _acme-challenge.example.com
ANSWER SECTION 부분에 설정 값이 출력 되는 것을 확인한 후 진행, 발급 완료시 아래 디렉토리에 생성
/etc/letsencrypt/live/example.com/
vhost 설정
- Apache의 SSL 모듈 활성화
sudo a2enmod ssl
2.http -> https 리다이렉트를 위하여 설정파일 생성
/etc/apache2/sites-available/http설정파일.conf
http설정파일.conf 내용
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R,L]
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
(REwritedEngine 사용하는 경우)
sudo a2enmod rewrite
- 각 도메인 별로 /etc/apache2/sites-available/에 설정 파일을 만든다.
ProxyPass에는 로컬에서 실행 중인 서버포트 입력해준다.
(로컬에서 https 사용하면 에러 발생)
(NameVirtualHost는 인증서에 등록된 도메인과 같아야 여러개 호스트 사용가능)
(서브 도메인의 경우 ServerName에 admin.example.com과 같이 사용)
(proxy 사용 위해서
sudo a2enmod proxy
sudo a2enmod proxy_balancer
sudo a2enmod proxy_http
)
<VirtualHost *:443>
NameVirtualHost example.com:443
ServerName example.com
SSLProxyEngine on
ProxyPass / http://localhost:51000/
ProxyPassReverse / http://localhost:51000/
#자체인증서 사용 하는 경우
#SSLProxyCheckPeerExpire off
#let's encytp 사용하는 경우 cert.pem -> fullchain.pem
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
ErrorLog ${APACHE_LOG_DIR}/error.log
</VirtualHost>
- 사용하려는 설정 파일들을 아파치에서 사용하도록 등록
a2ensite example-ssl.conf
- /etc/apache2/에 있는 ports.conf에 NameVirtualHost *:443 추가
Listen 80
<IfModule ssl_module>
Listen 443
NameVirtualHost *:443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
- 아파치 재시작
service apache2 restart
spring boot 위한 p12 추가
OOOO에는 server.ssl.key-alias 와 같은 이름으로 설정
패스워드입력창이 이후 나오면 spring properties와 맞춰준다.
openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name OOOO -CAfile chain.pem -caname root
인증서 3개월 후 재발급
docker run -it --rm --name certbot \
-v '/etc/letsencrypt:/etc/letsencrypt' \
-v '/var/lib/letsencrypt:/var/lib/letsencrypt' \
certbot/certbot renew --manual --preferred-chain "ISRG Root X1" --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory
수동 발급
docker run -it --rm --name certbot \
-v '/etc/letsencrypt:/etc/letsencrypt' \
-v '/var/lib/letsencrypt:/var/lib/letsencrypt' \
certbot/certbot certonly --manual --preferred-chain "ISRG Root X1" --preferred-chain "ISRG Root X1" --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory
crontab 사용하여 자동화
crontab -e
이후 에디터 선택 현재날짜 기준 3개월
0 0 23 MAR,JUN,SEP,DEC * sh /home/ubuntu/crontab/renew.sh >> /home/ubuntu/crontab/res.log
리다이렉션
RedirectMatch /(.*)$ http://server-talk.tistory.com/$1
기간확인
echo | openssl s_client -connect <your-hostname>:443 2>/dev/null | openssl x509 -noout -dates
공사중 띄우기
ssl 사용하는 경우 site-available(파일.conf)
sudo a2enmod rewrite
RewriteEngine 활성화 시켜준 다음
#점검 on / off
RewriteEngine Off
#공사중 페이지로 전송
RewriteRUle ^ /uc.html [L]
'IT > apache' 카테고리의 다른 글
2021-01-06-보안 (0) | 2023.02.27 |
---|
댓글