HTTPS - 적용하기 nginx
일단 nginx을 끄기 (포트가 같데용)
제가 이 폴더를 만들었는지 없는 지 기억이 나지 않지만 이폴더에 인증을 위한 파일이 있습니다.
# jenkins 폴더 이동
cd /var/lib/jenkins/workspace/nct_pipeline
# docker-compose stop
docker-compose stop
# https 인증 폴더
cd /etc/letsencrypt/live/www.nuri777.kro.kr
# 기존 80포트 끄기
lsof -i tcp:80
# 기존 80포트 끄기
sudo kill -9 32452
# 인증서 갱신
sudo certbot renew
Nginx.conf 수정하기
여기서 핵심은 기본 포트로 들어오는 요청을 443포트 https 포트로 redirect 해주는 것 같아요.
Nginx.conf에
밑에 있는 코드를 추가 하였습니다.
# https 추가
# 핵심 인증을 위한 폴더를 명시
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/www.nuri777.kro.kr/fullchain.pem; # managed by Cert>
ssl_certificate_key /etc/letsencrypt/live/www.nuri777.kro.kr/privkey.pem; # managed by Ce>
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
# 80 포트로 접근시 443 포트로 리다이렉트 시켜주는 설정
# 핵심
server {
if ($host = www.nuri777.kro.kr) {
return 301 https://$host$request_uri;
} # managed by Certbot
# listen 80;: 이 설정은 Nginx가 IPv4 주소를 사용하여 80번 포트에서 들어오는
# HTTP 요청을 수신하도록 지시합니다.
# 80번 포트는 일반적으로 HTTP 트래픽을 처리하는 데 사용됩니다.
listen 80;
# listen [::]:80;: 이 설정은 Nginx가 IPv6 주소를 지원하며,
# IPv6 주소에서 80번 포트에서 들어오는 HTTP 요청도 수신하도록 지시합니다.
listen [::]:80;
server_name nuri777.kro.kr;
return 404; # managed by Certbot
}
Nginx 전체 코드
# /nginx/nginx.conf
upstream frontend-nextjs {
# 사용시 변경 향후 컨테이너이름:포트번호
# max_fails 3;은 3번의 연속 실패 후에 서버를 '망가진' 상태로 표시합니다.
# fail_timeout 10s;는 서버가 실패한 후 10초 동안 망가진 상태로 유지되며, 이 기간 동안 추가 연결 시도가 거부됩니다.
server compose-frontend-nextjs:3000 max_fails=3 fail_timeout=10s;
}
upstream backend-spring-boot-3 {
# 사용시 변경 컨테이너이름:포트번호
server compose-backend-spring-boot-3:8080 max_fails=3 fail_timeout=10s;
}
server {
# https 추가
server_name nuri777.kro.kr;
location / {
# proxy_pass는 클라이언트의 요청을 이 업스트림 서버로 전달합니다.
proxy_pass http://frontend-nextjs;
# HTTP 버전 1.1을 사용하도록 Nginx에 지시합니다.
proxy_http_version 1.1;
# 이 설정은 HTTP 업그레이드 헤더를 설정합니다.
# $http_upgrade는 클라이언트의 요청에서 업그레이드 헤더의 값을 가져와서
# 백엔드 서버로 전달합니다.
# 이렇게 함으로써 웹 소켓과 같은 업그레이드 요청을 올바르게 처리할 수 있습니다.
proxy_set_header Upgrade $http_upgrade;
# Connection 헤더를 'upgrade'로 설정합니다.
# 이것은 HTTP 연결을 업그레이드하도록 요청하는 데 사용됩니다.
proxy_set_header Connection 'upgrade';
# Host 헤더를 클라이언트의 원래 Host 헤더 값으로 설정합니다.
# 이것은 요청이 백엔드 서버에 도달할 때 올바른 호스트 이름으로 전달되도록 합니다.
proxy_set_header Host $host;
}
location /api {
# rewrite /api/(.*) /$1 break; 이 설정은 URL에서
# /api/ 다음의 모든 것을 가져와서 /로 재작성합니다.
#$ 1은 정규식 그룹을 나타내며, /api/ 다음의 경로를 그룹으로 캡처합니다.
# 그런 다음 /와 함께 캡처한 경로를 조합하여 URL을 재작성합니다.
# 예를 들어, 클라이언트가 /api/some/route로 요청하면
#이 설정은 해당 요청을 /some/route로 재작성합니다.
# 이렇게 하면 실제 요청이 /some/route로 전달되며,
# /api/ 부분은 URL에서 제거됩니다.
rewrite /api/(.*) /$1 break;
# proxy_pass는 클라이언트의 요청을 이 업스트림 서버로 전달합니다.
proxy_pass http://backend-spring-boot-3;
# HTTP 버전 1.1을 사용하도록 Nginx에 지시합니다.
proxy_http_version 1.1;
# 이 설정은 HTTP 업그레이드 헤더를 설정합니다.
# $http_upgrade는 클라이언트의 요청에서 업그레이드 헤더의 값을 가져와서
# 백엔드 서버로 전달합니다.
# 이렇게 함으로써 웹 소켓과 같은 업그레이드 요청을 올바르게 처리할 수 있습니다.
proxy_set_header Upgrade $http_upgrade;
# Connection 헤더를 'upgrade'로 설정합니다.
# 이것은 HTTP 연결을 업그레이드하도록 요청하는 데 사용됩니다.
proxy_set_header Connection 'upgrade';
# proxy_set_header: 이 지시문은 Nginx에서 요청 헤더를 설정하는 데 사용됩니다.
# Host: 요청 헤더 중 하나로, 클라이언트가 요청한 호스트(도메인)를 나타냅니다.
# $host: Nginx 내장 변수 중 하나로, 현재 요청을 받은 서버에 대한 호스트 정보를 나타냅니다. 이 값은 클라이언트가 요청한 호스트와 일치하게 설정됩니다.
proxy_set_header Host $host;
# 이 헤더는 모든 Origin(모든 도메인)에서 리소스에 접근을 허용합니다. *는 모든 도메인을 나타냅니다.
# 이를 통해 어떤 Origin에서도 해당 리소스에 접근할 수 있게 됩니다.
add_header 'Access-Control-Allow-Origin' '*';
# 요청이 인증 정보(예: 쿠키, 인증 토큰)를 포함하고 있을 때 CORS 요청을 허용하는지 여부를 지정합니다.
# true로 설정되어 있으므로 인증 정보가 있는 요청도 허용됩니다.
add_header 'Access-Control-Allow-Credentials' 'true';
# 허용되는 HTTP 메서드를 지정합니다. 이 경우, GET, POST 및 OPTIONS 메서드가 허용됩니다.
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
# 허용되는 HTTP 헤더를 지정합니다. 이 헤더는 다양한 표준 및 사용자 지정 헤더를 허용하며, 다양한 클라이언트 요청을 처리하기 위해 사용됩니다.
# 이 예에서는 DNT, X-CustomHeader, Keep-Alive, User-Agent 등 다양한 헤더를 허용하고 있습니다.
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
# https 추가
# 핵심 인증을 위한 폴더를 명시
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/www.nuri777.kro.kr/fullchain.pem; # managed by Cert>
ssl_certificate_key /etc/letsencrypt/live/www.nuri777.kro.kr/privkey.pem; # managed by Ce>
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
# 80 포트로 접근시 443 포트로 리다이렉트 시켜주는 설정
# 핵심
server {
if ($host = www.nuri777.kro.kr) {
return 301 https://$host$request_uri;
} # managed by Certbot
# listen 80;: 이 설정은 Nginx가 IPv4 주소를 사용하여 80번 포트에서 들어오는
# HTTP 요청을 수신하도록 지시합니다.
# 80번 포트는 일반적으로 HTTP 트래픽을 처리하는 데 사용됩니다.
listen 80;
# listen [::]:80;: 이 설정은 Nginx가 IPv6 주소를 지원하며,
# IPv6 주소에서 80번 포트에서 들어오는 HTTP 요청도 수신하도록 지시합니다.
listen [::]:80;
server_name nuri777.kro.kr;
return 404; # managed by Certbot
}