Nginx 설치
sudo apt-get install nginx
상태 확인 : sudo service nginx status
시작 : sudo service nginx start
재시작 : sudo service nginx restart
중지 : sudo service nginx stop
설정 리로드 : sudo service nginx reload
Certbot
Certbot은 Let's Encrypt 인증서를 쉽게 발급하고 갱신할 수 있도록 도와주는 도구라고 한다.
Let's Encrypt는 무료로 SSL/TLS 인증서를 발급해주는 인증 기관으로, HTTPS를 사용하는 웹사이트에서 보안 통신을 위해 사용된다. Certbot을 이용하면 명령어를 통해 인증서를 발급하고 갱신할 수 있으며, 이를 통해 HTTPS를 적용하는 과정을 간편하게 처리할 수 있다. Certbot은 Apache, Nginx와 같은 웹 서버와 함께 사용할 수 있으며, 다양한 운영 체제와 호환됩니다. 진행하고 있는 프로젝트에서 Nginx를 사용하며, https를 적용하기 위해 Certbot을 사용하기로 하였다.
| Ubuntu 18.04 이상에서는 Python 3 버전
$ apt-get update
$ sudo apt-get install certbot
$ apt-get install python3-certbot-nginx
| /etc/nginx/conf.d/voda.conf (voda는 필자의 프로젝트 명. 초기값으로 default.conf로 되어있다)
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
server_name 도메인명;
}
이 Nginx 설정 파일은 서버에 HTTP 프로토콜을 통한 요청이 들어왔을 때, /var/www/html 경로의 파일을 반환하는 설정이다. listen 80 default_server와 listen [::]:80 default_server는 각각 IPv4와 IPv6 프로토콜을 사용하여 80번 포트에서 들어오는 요청을 처리한다는 의미이다.
root /var/www/html은 Nginx가 서비스하는 웹 페이지의 루트 디렉토리를 /var/www/html로 설정하였다. 이 디렉토리 안에는 Nginx가 서비스하는 웹 페이지의 파일들이 위치하게 됩니다.
server_name 도메인명는 이 설정 파일이 적용되는 서버의 도메인 이름이나 IP 주소를 설정합니다. 이 설정 파일이 적용된 서버에서 해당 도메인으로 들어오는 요청을 처리합니다.
| NGINX 플러그인으로 인증서를 생성
$ sudo certbot --nginx -d 도메인
| 인증서 완료
Congratulations! You have successfully enabled <https://example.com> and <https://www.example.com>
-------------------------------------------------------------------------------------
IMPORTANT NOTES:
Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com//privkey.pem
Your cert will expire on 2017-12-12.
server {
root /home/ubuntu/test/frontend/dist;
index index.html;
listen 80;
listen [::]:80;
server_name 도메인명;
if ($host = 도메인명) {
return 301 https://$host$request_uri;
} # managed by Certbot
return 404; # managed by Certbot
}
server {
root /home/ubuntu/test/frontend/dist;
index index.html;
listen [::]:443 ssl http2 ipv6only=on; # managed by Certbot
listen 443 ssl http2; # managed by Certbot
server_name 도메인명;
ssl_certificate /etc/letsencrypt/live/도메인명/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/도메인명/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
location / {
proxy_pass http://도메인명;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
이것은 Nginx 웹 서버의 설정 파일이다. 이 파일은 두 개의 서버 블록을 포함하고 있다.
첫 번째 서버 블록은 HTTP 요청을 처리한다. root 지시어를 사용하여 웹 서버의 루트 디렉토리를 /home/ubuntu/test/frontend/dist로 설정하고 index 지시어를 사용하여 인덱스 파일을 index.html로 설정한다. listen 지시어를 사용하여 80 포트와 [::]:80 (IPv6) 포트에서 들어오는 연결을 수신하도록 설정하며, server_name 지시어를 사용하여 해당 도메인 이름을 사용하는 요청을 처리하도록 설정한다. 이 서버 블록은 Certbot에 의해 자동으로 구성되며, 도메인에 대한 HTTP 요청은 HTTPS로 리다이렉션된다.
두 번째 서버 블록은 HTTPS 요청을 처리한다. root, index, listen 및 server_name 지시어는 이전과 동일하다. ssl_certificate, ssl_certificate_key, include 및 ssl_dhparam 지시어는 SSL 인증서 및 보안 구성을 설정한다. location 지시어는 모든 요청에 대해 proxy_pass 지시어를 사용하여 도메인으로 전달하도록 설정한다. 이렇게하면 Nginx는 클라이언트에서의 요청을 프록시하여 해당 도메인에서 서비스를 수신하게 된다. proxy_set_header 지시어는 X-Real-IP, X-Forwarded-For 및 Host 헤더를 설정한다. 이 서버 블록은 Certbot에 의해 자동으로 구성된다.
'기타 > 인프라 구축과정' 카테고리의 다른 글
[Infra] 3. Jenkins 설정 - HelloWorld Project (0) | 2023.05.24 |
---|---|
[문제점] Infra. Nginx 오류 (80포트 중복) - HelloWorld Project (0) | 2023.05.24 |
[Infra] 1. EC2 환경 구축 - HelloWorld Project (0) | 2023.05.24 |
[Infra] 10. 최종 아키텍처 및 전체 흐름 - Voda Project (2) | 2023.04.04 |
[Troubleshooting] http 버전 변경을 통한 문제점 해결 - Voda Project (1) | 2023.04.04 |
댓글