[CI/CD] Nginx 설치 및 설정 + HTTPS 리다이렉트

RUNGOAT·2023년 6월 18일
0

CI/CD

목록 보기
9/11
post-custom-banner

1️⃣   Nginx 설정

Nginx 설치와 버전 확인

# 설치
sudo apt-get install nginx

# 설치 확인 및 버전 확인
nginx -v

letsencrypt 인증서 발급

sudo apt-get install letsencrypt

sudo systemctl stop nginx

sudo letsencrypt certonly --standalone -d www제외한 도메인 이름

이걸 실행했을 때 Congratulations! 이 보이면, 인증서 발급이 완료된 것이다.

시간이 뜨면서 기다려 달라는 메시지를 띄우면 그 시간 까지 기다렸다 발급받으면 된다.

/etc/nginx/sites-available 로 이동한 이후
sudo vi proxy-setting 파일을 하나 만들고 다음과 같이 작성한다.

proxy-setting.conf 작성

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name {EC2 도메인 주소};

        location /{
                proxy_pass http://localhost:3000;
                proxy_set_header Connection '';
                proxy_http_version 1.1;
        }

        location /api {
                proxy_pass http://localhost:8081/api;
        }
}

server {
        listen 443 ssl;
        listen [::]:443 ssl;

        server_name {EC2 도메인 주소};

        location /{
                proxy_pass http://localhost:3000;
                proxy_set_header Connection '';
                proxy_http_version 1.1;
        }

        location /api {
                proxy_pass http://localhost:8081/api;
        }

        ssl_certificate /etc/letsencrypt/live/{EC2 도메인 주소}/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/{EC2 도메인 주소}/privkey.pem; # managed by Certbot

}

80은 http, 443은 https 로 접근하는 것을 의미한다.

Spring SSE 사용할 경우 지속 연결 설정

proxy_set_header Connection '';
proxy_http_version 1.1;

Nginx 기본 포트가 80로 실행되기 때문에 /etc/nginx/sites-enabled 에서

sudo vi default

80 → 안쓰는 포트 번호(예시 180)으로 바꾼다.

server {
        listen 180 default_server; 
        listen [::]:180 default_server;

ln -s 명령어 실행한다.

sudo ln -s /etc/nginx/sites-available/proxy-setting /etc/nginx/sites-enabled/proxy-setting

✔️ 테스트 확인

sudo nginx -t

✔️ nginx 재시작

sudo systemctl restart nginx

nginx.conf 설정

etc/nginx/ 에서

vi nginx.conf
  • 업로드 가능한 파일 최대 크기 확장(100MB) 옵션 추가
http {

        ##
        # Basic Settings
        ##
        client_max_body_size 100M;
        sendfile on;
				# ...
  • 테스트 확인
sudo nginx -t
  • nginx를 재 시작해서 변경사항을 적용
nginx -s reload

2️⃣   conf 파일 수정할 때

만약 proxy-setting을 수정하고 싶다면

먼저 nginx를 종료 후, 설정해야 한다.

# nginx을 종료
sudo systemctl stop nginx

sudo letsencrypt certonly --standalone -d www제외한 도메인 이름

/etc/nginx/sites-available로 이동하여 sudo vi proxy-setting을 입력하여 수정한다.

수정 후 sites-enabled에서 이전에 만들었던 proxy-setting을 삭제한다.

sudo rm proxy-setting

ln -s 명령어 실행한다. (다시 sites-enabled에 proxy-setting을 추가)

sudo ln -s /etc/nginx/sites-available/proxy-setting /etc/nginx/sites-enabled/proxy-setting

테스트 확인

sudo nginx -t

nginx 재시작

sudo systemctl restart nginx

3️⃣   HTTP 접근 시 HTTPS 리다이렉트 설정

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name {EC2 도메인 주소};

        return 301 https://{EC2 도메인 주소}$request_uri;
}

server {
        listen 443 ssl;
        listen [::]:443 ssl;

        server_name {EC2 도메인 주소};

        location /{
                proxy_pass http://localhost:3000;
                proxy_set_header Connection '';
                proxy_http_version 1.1;
        }

        location /api {
                proxy_pass http://localhost:8081/api;
        }

        ssl_certificate /etc/letsencrypt/live/{EC2 도메인 주소}/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/{EC2 도메인 주소}/privkey.pem; # managed by Certbot

}

📌참고

profile
📞피드백 너무나 환영
post-custom-banner

0개의 댓글