Nginx 적용하기

aj4941·2023년 9월 8일
0

프로젝트를 진행하던 중 클라이언트가 http로 요청하는 경우 이를 https로 변환하여 전달 할 필요가 있어 방법을 찾던 중 Nginx를 이용하여 문제를 해결해보았다.

다음 블로그를 참고해서 작업하였다.
https://yeonyeon.tistory.com/253

여기서 Nginx의 Public IP를 morandi.co.kr에 맞춰서 도메인을 설정하였다. (Route 53 이용)

그런 다음 vi /etc/nginx/sites-available/morandi.co.kr 로 설정 파일을 생성한 후 다음과 같이 작성하였다.

server {
	      server_name morandi.co.kr;

        access_log /var/log/nginx/access-log/morandi.log;
        error_log /var/log/nginx/error-log/morandi.log;

        location / {
                proxy_pass http://3.35.135.90; // morandi-client (프론트 서버 public IP)
                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;
			  }
}

여기서 access_log, error_log 주소에는 따로 mkdir로 생성해줘야 한다.

블로그의 심볼릭 링크까지 생성한 후에는 sudo nginx -t와 sudo service nginx restart 까지 처리하였다.

그 후에 다시 파일을 열어보면,

server { // Part 1
        server_name morandi.co.kr;

        access_log /var/log/nginx/access-log/morandi.log;
        error_log /var/log/nginx/error-log/morandi.log;

        location / {
                proxy_pass http://3.35.135.90;
                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;
        }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/morandi.co.kr/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/morandi.co.kr/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

}
server { // Part 2
    if ($host = morandi.co.kr) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

        server_name morandi.co.kr;
    listen 80;
    return 404; # managed by Certbot

}

다음과 같이 내용이 추가되었음을 알 수 있다.

Part 2의 서버 블록은 Http(80) 요청을 Https로 리다이렉션하는 역할을 한다.

즉, http://morandi.co.kr 로 요청이 들어오면 301 리다이렉션을 통해 https로 리다이렉션을 한다.

Part 1 서버 블록은 morandi.co.kr에 대한 https 요청을 처리한다.

즉 Part 2에서 리다이렉션 되어 https://morandi.co.kr로 오게 되면 여기서 작업을 처리하게 되는 것이다.

여기서 모든 요청은 proxy_pass 지시문을 사용하여 http://3.35.135.90 으로 전달된다.

이때, https://morandi.co.kr/dashboard로 요청하더라도 nginx가 적용되어

http://3.35.135.90/dashboard 가 호출되는 것과 같다.

백엔드 서버 역시 마찬가지로 처리했다.

server {
        server_name api.morandi.co.kr;

        access_log /var/log/nginx/access-log/morandi.log;
        error_log /var/log/nginx/error-log/morandi.log;

        location / {
                proxy_pass http://3.38.149.217:8080;
                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;
                          }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/api.morandi.co.kr/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/api.morandi.co.kr/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

}
server {
    if ($host = api.morandi.co.kr) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

        server_name api.morandi.co.kr;
    listen 80;
    return 404; # managed by Certbot

}

http://api.morandi.co.kr/swagger-ui/?urls.primaryName=test-api#/ 다음과 같이 Swagger를 접속해도 https가 적용되어 접근이 가능해졌다.

profile
안녕하세요 aj4941 입니다.

0개의 댓글