클라이언트와 백엔드 서버 사이에 위치하여 클라이언트의 요청을 대신 받아 백엔드 서버로 전달하고 응답을 다시 클라이언트에게 돌려주는 중간 서버 역할

> DNS A 레코드 : 도메인 <-> IPv4 주소로 매칭해주는 가장 기본적인 DNS 레코드sudo apt update
sudo apt install nginx -y
sudo systemctl start nginx
# 부팅 시, 자동 시작 설정
sudo systemctl enable nginx
sudo systemctl status nginx
먼저 HTTP로 리버스 프록시를 설정하고 테스트합니다.
sudo vi /etc/nginx/sites-available/<project-name>
# 설정파일 내용
server {
listen 80;
server_name <domain-address> # 실제 도메인
location / {
proxy_pass http://localhost:8080; # Spring Boot 실행 포트 입력하기
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwared-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
}
# 심볼릭 링크 생성하여 설정 활성화
sudo ln -s /etc/nginx/sites-available/<project-name> /etc/nginx/sites-enabled/
# 기본 설정 비활성화 (선택사항)
sudo rm /etc/nginx/sites-enabled/default
# 설정파일 문법 검사
sudo nginx -t
# NGINX 재시작
sudo systemctl restart nginx
Certbot을 이용하여 SSL 인증서를 발급 받고 HTTPS를 설정해보겠습니다.
# certbot 설치
sudo apt install certbot python3-certbot-nginx -y
# SSL 인증서 발급 및 자동 설정
sudo certbot --nginx -d <domain-address>
실행 시, 다음 정보를 입력하게 됩니다.
1) 이메일 주소: 인증서 만료 알림 수신용
2) 서비스 약관 동의: Y 입력
3) HTTP -> HTTPS 리다이렉트 설정: 2 선택
Certbot이 설정 파일을 자동으로 수정합니다.
sudo cat /etc/nginx/sites-available/<project-name>
# life-manager 설정
server {
server_name <domain-address>;
# 루트 경로 - 상태 메세지 반환
location = / {
return 200 '{"status":"UP","service":"Life Manager API"}';
add_header Content-Type application/json;
}
location /api/ {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/<domain-address>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<domain-address>/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
if ($host = <domain-address>) {
return 301 https://$host$request_uri;
}
listen 80;
server_name <domain-address>;
return 404;
}
Let's Encrypt 인증서는 90일마다 만료됩니다. Certbot은 자동으로 갱신 타이머를 설정합니다.
# 자동 갱신 타이머 상태 확인
sudo systemctl status certbot.timer
# 갱신 테스트 (실제 갱신하지 않고 시뮬레이션 하는거임)
sudo certbot renew --dry-run
sudo nginx -t
sudo systemctl restart nginx
curl -I https://<domain-address>
사실 내가 까먹을거 같아서 적음😂
# nginx 관련
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx
# 로그 확인
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
# 인증서 관련
sudo certbot certificates # 발급된 인증서 목록
sudo certbot renew # 인증서 갱신
sudo certbot delete # 인증서 삭제