기은P
시간이 멈추는 장소
기은P
  • Programming (272)
    • 개발노트 (1)
    • FrontEnd (56)
      • ES&JS 문법 (14)
      • HTML&CSS (4)
      • React 기본 (18)
      • React 심화 (12)
      • React 이슈 (2)
      • Project 연습 (1)
      • Next.js (5)
    • Backend&Devops (33)
      • AWS (2)
      • Docker (9)
      • Jenkins (6)
      • Nginx (6)
      • Node.js (1)
      • ElasticSearch (5)
      • 프레임워크&아키텍처 (2)
      • 암호화 (0)
      • 기타 (2)
    • 알고리즘 (3)
    • C# (8)
      • WPF (8)
    • Java (51)
      • 순수 Java (18)
      • RDF&Jena (12)
      • RCP&GEF (9)
      • JMX (5)
      • JMapper (3)
      • 오류해결 (4)
    • Database (21)
      • RDBMS (9)
      • NoSQL (2)
      • TSDB (1)
      • GraphQL (1)
      • Hibernate (3)
      • 데이터베이스 이론 (4)
      • Redis (1)
    • 프로토콜 (11)
      • Netty (4)
      • gRPC (5)
      • 프로토콜 개념 (2)
    • Server (4)
      • Linux (4)
    • 2020 정보처리기사 필기 (43)
      • 목차 (1)
      • 기출문제 (1)
      • 1과목 - 소프트웨어 설계 (6)
      • 2과목 - 소프트웨어 개발 (7)
      • 3과목 - 데이터베이스 구축 (8)
      • 4과목 - 프로그래밍 언어 활용 (7)
      • 5과목 - 정보시스템 구축 관리 (10)
    • 2020 정보처리기사 실기 (31)
      • 목차 (4)
      • 기출예상문제 (19)
      • 실기요약 (8)
    • 빅데이터분석기사 필기 (4)
      • 목차 (0)
      • 필기 요약 (3)
    • 전기 공학 (1)
      • CIM (1)
    • 산업자동화시스템 (3)
      • SCADA (1)
      • OPC UA (2)
    • 디자인패턴 (1)
    • 휴지통 (0)

공지사항

  • 공지사항/포스팅 예정 항목

최근 댓글

최근 글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
기은P

시간이 멈추는 장소

[Nginx] SSL 설정(HTTPS 적용)
Backend&Devops/Nginx

[Nginx] SSL 설정(HTTPS 적용)

2022. 6. 15. 08:58
반응형

1. 개요

기존에 웹 사이트를 HTTP로 운영하고 있다가, 사용자의 정보같은 민감한 정보를 사용하게 될 경우에는 SSL 인증서를 사용한 보안처리를 해야합니다.

웹서버에 SSL 인증서를 사용해 웹사이트를 HTTPS로 열 수 있게끔 Nginx 프록시 서버에 SSL 인증서를 적용하는 방법을 확인해보겠습니다.

 

 

2. 준비물

도메인, SSL 인증서(chain key, private key)

도메인은 유료로도 발급할 수 있지만, 저는 개발용이기 때문에 무료로 도메인을 발급해주는 no-ip라는 사이트를 통해서 받았습니다.

https://www.noip.com/

 

Sign In - No-IP

× Please select your Language To view website content in your Language, please select an option below.

www.noip.com

또한 SSL 인증서 발급도 유료가 아닌 무료로 할 수 있는데, Lets Encrypt라는 인증기관을 통해서 certbot 도구로 SSL인증서를 발급받을 수 있습니다.

https://letsencrypt.org/ko/

 

Let's Encrypt - 무료 SSL/TLS 인증서

 

letsencrypt.org

https://certbot.eff.org/

 

Certbot

Tagline

certbot.eff.org

 

 

 

3. nginx.conf

worker_processes  auto;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;

    # 443 포트로 접근시 ssl을 적용한 뒤 3000포트로 요청을 전달해주도록 하는 설정.
    server {
            server_name idu-market.shop;

            location / {
                    proxy_pass http://127.0.0.1:3000;
            }

            listen 443 ssl; # managed by Certbot
            ssl_certificate /etc/letsencrypt/live/idu-market.shop/fullchain.pem; # managed by Cert>
            ssl_certificate_key /etc/letsencrypt/live/idu-market.shop/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 {
             return 301 https://$host$request_uri;
             # managed by Certbot


            listen 80;
            server_name idu-market.shop;
            return 404; # managed by Certbot
    }

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    keepalive_timeout  65;
}

1) server 80 블록

nginx를 사용할 때 기존에 80포트(http)로 접근되는 요청을 proxy_pass에 특정 웹서버(:3000)로 연결시켰다면,

SSL을 사용할 때는 443포트(https)로 연결시키도록

 return 301 https://$host$request_uri

를 작성해주는 것이 포인트입니다

 

2) server 443 블록

443포트는 https 요청에 연결되는 포트로, proxy_pass에 특정 웹서버(:3000)로 리다이렉트 해주는 부분을 명시해주면 됩니다.

여기서 중요한 포인트는 ssl certificate 부분입니다.

앞서 준비한 도메인과 연결된 SSL 인증서의 chain key, private key를 nginx가 설치된 서버의 특정 폴더에 저장하고, 

        ssl_certificate /경로/fullchain.pem;
        ssl_certificate_key /경로/privkey.pem;

그 키가 위치한 폴더의 경로를 작성해주시면 됩니다.

443으로 들어오는 요청을 SSL 인증서로 암호화 하겠다는 의미입니다.

 

 

 

 

참고 사이트

https://gist.github.com/woorim960/dda0bc85599f61a025bb8ac471dfaf7a

 

Nginx를 이용하여 https 적용하는 법

Nginx를 이용하여 https 적용하는 법. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

반응형
저작자표시 변경금지 (새창열림)

'Backend&Devops > Nginx' 카테고리의 다른 글

[Nginx] Nginx Proxy Manager 설치  (3) 2022.06.17
[OpenSSL] SSL 인증서 발급 방법 요약  (1) 2022.06.09
[Nginx] 리버스 프록시(Reverse Proxy) 개념 및 사용법  (2) 2022.06.03
[Nginx] connect() failed (111: Connection refused) while connecting to upstream 오류 해결  (2) 2022.06.03
[Nginx] Nginx 개념 및 nginx.conf 설정  (0) 2022.01.06
    'Backend&Devops/Nginx' 카테고리의 다른 글
    • [Nginx] Nginx Proxy Manager 설치
    • [OpenSSL] SSL 인증서 발급 방법 요약
    • [Nginx] 리버스 프록시(Reverse Proxy) 개념 및 사용법
    • [Nginx] connect() failed (111: Connection refused) while connecting to upstream 오류 해결
    기은P
    기은P
    기은P의 블로그 일상과 개발 관련 포스팅 #React #Typescript #Next #Nest https://github.com/kimdongjang

    티스토리툴바