로컬 서버에 도메인 연결 후 ssl 설정하기with nginx, aws

sangwoo noh·2024년 6월 10일
0

nginx

목록 보기
3/4

AWS Route 53에서 서브도메인 A 레코드 설정

도메인을 가비아에서 구입하던 고대디에서 구입하던 aws의 cloudfront정도는 연동하고싶어서
aws의 route53을 이용하기로함..
물론 이전에 도메인을 route53으로 끌어오는 작업이 선진행되어있어야함.

powered by chatGPT

서브도메인 설정 및 로컬 서버 연결

  1. AWS Route 53에서 서브도메인 A 레코드 설정

    • AWS Management Console에 로그인하고 Route 53 콘솔로 이동합니다.
    • 해당 도메인의 호스팅 영역(Hosted Zone)을 선택합니다.
    • Create Record 버튼을 클릭하여 새로운 A 레코드를 생성합니다.
      • Name: test (서브도메인 부분)
      • Type: A
      • Value: 고정 IP 주소 (예: 123.456.789.0)
    • Create records 버튼을 클릭하여 레코드를 생성합니다.
  2. 포트 포워딩 설정

    • 라우터 설정 페이지에서 포트 80 (HTTP)과 443 (HTTPS)을 로컬 서버의 IP 주소로 포워딩합니다.
  3. Nginx 설정

    Nginx 설정 파일을 편집하여 서브도메인에 대한 요청을 처리하도록 합니다. /etc/nginx/sites-available/test.domainname.com 파일을 생성하거나 편집합니다.

    server {
        listen 80;
        server_name test.domainname.com;
    
        location / {
            proxy_pass http://localhost:3000;  # 로컬 웹 서버로 프록시
            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;
        }
    
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root /usr/share/nginx/html;
        }
    }

    설정 파일을 저장한 후, 심볼릭 링크를 생성하여 활성화합니다.

    sudo ln -s /etc/nginx/sites-available/test.domainname.com /etc/nginx/sites-enabled/
  4. Nginx 설정 테스트 및 재시작

    Nginx 설정 파일에 문제가 없는지 테스트하고, Nginx를 재시작합니다.

    sudo nginx -t
    sudo systemctl restart nginx
  5. SSL 인증서 설정 (선택사항)

    Let’s Encrypt를 사용하여 SSL 인증서를 설정합니다. certbot을 사용하여 SSL 인증서를 발급받고 Nginx 설정을 자동으로 업데이트합니다.

    sudo apt-get update
    sudo apt-get install certbot python3-certbot-nginx
    sudo certbot --nginx -d test.domainname.com

요약

  1. Route 53에서 서브도메인 A 레코드 설정: 서브도메인(test.domainname.com)을 고정 IP 주소로 설정합니다.
  2. 포트 포워딩 설정: 라우터에서 HTTP와 HTTPS 트래픽을 로컬 서버로 포워딩합니다.
  3. Nginx 설정: 서브도메인에 대한 요청을 처리하도록 Nginx 설정 파일을 작성하고 활성화합니다.
  4. Nginx 설정 테스트 및 재시작: 설정 파일을 테스트하고 Nginx를 재시작합니다.
  5. SSL 인증서 설정 (선택사항): Let’s Encrypt를 사용하여 SSL 인증서를 설정합니다.

ssl 설정

나같은경우 미리 docker container로 올라가있는 컨테이너 안에서 패키지 설치 후 진행했다.

powered by chatGPT
네, Certbot을 통해 Let's Encrypt SSL 인증서를 발급받는 과정에서 중요한 것은 Nginx가 .well-known/acme-challenge 경로로 접근할 수 있도록 설정하는 것입니다. Next.js 앱이 Docker 컨테이너로 실행되고 있더라도, Nginx가 해당 경로를 처리하도록 설정되어 있으면 인증서를 정상적으로 발급받을 수 있습니다.

설정 요약

  1. Nginx 설정 파일 업데이트: .well-known/acme-challenge 경로를 처리하도록 설정합니다.
  2. Nginx 설정 적용: 설정 파일을 저장하고 Nginx를 재시작합니다.
  3. Certbot 명령어 실행: Certbot 명령어를 실행하여 SSL 인증서를 발급받습니다.
  4. Nginx 설정 파일 업데이트: SSL 인증서 경로를 설정하고 HTTPS를 적용합니다.
  5. Nginx 설정 적용: 설정 파일을 저장하고 Nginx를 재시작합니다.

Nginx 설정 파일 업데이트

Nginx 설정 파일을 다음과 같이 수정하여 .well-known/acme-challenge 경로를 처리하도록 합니다.

upstream biz_app {
    server biz-app:3000;
}

server {
    listen       80;
    server_name  test.domainname.com;

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

    location /.well-known/acme-challenge/ {
        root /usr/share/nginx/html;
        default_type "text/plain";
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

Nginx 설정 적용

설정 파일을 저장한 후, Nginx를 재시작하여 변경 사항을 적용합니다.

nginx -s reload

Certbot 명령어 실행

Nginx 설정 파일이 올바르게 업데이트되었는지 확인한 후, Certbot 명령어를 실행하여 SSL 인증서를 발급받습니다.

certbot certonly --webroot -w /usr/share/nginx/html -d test.domainname.com --email test@domainname.com --agree-tos --no-eff-email

Nginx 설정 파일 업데이트 (SSL 적용)

인증서가 발급되면 Nginx 설정 파일을 업데이트하여 HTTPS를 지원하도록 설정합니다.

upstream biz_app {
    server biz-app:3000;
}

server {
    listen 80;
    server_name test.domainname.com;
	
    # 기존 http관련 포워딩내용은 주석
    #location / {
    #    proxy_pass http://biz_app;
    #    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;
    #}
    
    # 모든 HTTP 요청을 HTTPS로 리다이렉트
    location / {
        return 301 https://$host$request_uri;
    }

    location /.well-known/acme-challenge/ {
        root /usr/share/nginx/html;
        default_type "text/plain";
    }
}

server {
    listen 443 ssl;
    server_name test.domainname.com;

    ssl_certificate /etc/letsencrypt/live/test.domainname.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/test.domainname.com/privkey.pem;

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

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
}

Nginx 설정 적용

설정 파일을 저장한 후, Nginx를 재시작하여 변경 사항을 적용합니다.

nginx -s reload

요약

  • Nginx 설정 파일 업데이트: .well-known/acme-challenge 경로를 처리하도록 설정합니다.
  • Nginx 설정 적용: 설정 파일을 저장하고 Nginx를 재시작합니다.
  • Certbot 명령어 실행: Certbot 명령어를 실행하여 SSL 인증서를 발급받습니다.
  • Nginx 설정 파일 업데이트: SSL 인증서 경로를 설정하고 HTTPS를 적용합니다.
  • Nginx 설정 적용: 설정 파일을 저장하고 Nginx를 재시작합니다.

이 과정을 따르면 Docker로 실행 중인 Next.js 앱을 사용하면서도 Nginx를 통해 SSL 인증서를 발급받고 HTTPS를 적용할 수 있습니다. 추가적인 질문이 있으면 언제든지 문의해 주세요.

위 내용들을 적당히 참고하면 로컬서버로 도메인도 연결하고 ssl설정도 가능하다.

profile
하기로 했으면 하자

0개의 댓글