박주니 개발 정리

opc certbot ssl 및 https api 설정 방법 본문

회고

opc certbot ssl 및 https api 설정 방법

박주니 2024. 10. 25. 11:09
728x90
반응형

설명전) certbot은 ip가 아닌 도메인으로 https를 등록해야하기 때문에 먼저 가비아에서 사용할 ip에 도메인 설정부터

해주시길 바랍니다. 

certbot ssl은 90일까지이며 그 이후에는 다시 갱신해야합니다. 

 

진행전) 방화벽 포트가 default로 80, 443 및 적용할 port가 열려있는 지 확인합니다. 

1. 방화벽 설정 확인합니다.

sudo firewall-cmd --list-all  # 방화벽 설정 확인 (CentOS의 경우)

2. 80, 443 및 적용할 port 방화벽이 닫혀있는 것이 있다면 포트를 열어주세요.

예시) 443

sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload

certbot ssl 설치 및 도메인 기반 nginx 환경 초기 설정 

1. opc 환경에서 certbot을 설치합니다. 

sudo yum install epel-release -y
sudo yum install certbot python3-certbot-nginx -y
  • 추가 설명) certbot을 설치하실때 이메일, 도메인 작성 요구하는 부분이 있는데 이메일은 현재 본인 또는 회사 이메일 작성해주시면 되고 도메인은 https에 적용할 도메인을 입력하시면 됩니다. 

2. certbot을 설정하기 위해 nginx을 설치합니다. 

# CentOS/RHEL 기반
sudo yum install nginx -y

 

3. certbot 기본 ssl 설정 파일을 복사합니다. 

sudo mkdir -p /etc/letsencrypt
sudo curl -o /etc/letsencrypt/options-ssl-nginx.conf https://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf

4. DHParmas 파일을 생성합니다. 

sudo curl -o /etc/letsencrypt/ssl-dhparams.pem https://raw.githubusercontent.com/certbot/certbot/master/certbot/certbot/ssl-dhparams.pem

5. nginx sites-available 디렉토리를 생성합니다. 

sudo mkdir -p /etc/nginx/sites-available

6. nginx sites-enabled 디렉토리를 생성합니다. 

sudo mkdir -p /etc/nginx/sites-enabled

7. sites-available 설정 파일을 생성합니다. 

sudo nano /etc/nginx/sites-available/{{도메인}}
  • 추가 설명) {{도메인}} -> http://test.com일경우 test.com만 넣으면 됩니다. 

8. sites-enabled 심볼릭 링크를 생성합니다. 

sudo ln -s /etc/nginx/sites-available/{{도메인}} /etc/nginx/sites-enabled/

sites-available 및 default.conf ssl 설정 

진행전 ssl 위치 확인

1. Let's Encrpy에서 발급한 ssl 인증서와 개인 키 파일의 경로를 확인합니다. 

sudo certbot certificates

예시 출력

Certificate Name: {{도메인}}
    Domains: {{도메인}}
    Expiry Date: 2025-01-22 00:13:59+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/{{도메인}}/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/{{도메인}}/privkey.pem

2. Certificate Path, Private Key 위치를 따로 기록합니다. 

ssl_certificate /etc/letsencrypt/live/{{도메인}}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/{{도메인}}/privkey.pem;
  • 추가 설명) ssl 설정할때 Certificate Path는 ssl_certificate, Private Key는 ssl_certificate_key로 해서 해당 location을 대입할 것입니다.

3. options-ssl-nginx.conf, ssl-dhparams.pem 위치를 확인합니다. 

ls -l /etc/letsencrypt/options-ssl-nginx.conf
ls -l /etc/letsencrypt/ssl-dhparams.pem

4. options-ssl-nginx.conf, ssl-dhparams.pem 위치를 따로 기록합니다. 

include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

 

ssl 최종 기록

ssl_certificate /etc/letsencrypt/live/{{도메인}}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/{{도메인}}/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

5. default.conf를 80 포트 ssl없이 리디렉만 처리할 수 있게 설정합니다. 

sudo vi /etc/nginx/conf.d/default.conf
server {
    listen 80;
    server_name api.nableaicc.com;  # 여기서 SSL 없이 리디렉션만 처리합니다.

    location / {
        return 301 https://api.nableaicc.com$request_uri;
    }
}
  • 추가 설명) 오직 sites-available에서만 ssl 설정을 해야 충돌되는 것을 막을 수 있고 https 설정하는 과정에서 이슈가 발생되지 않습니다. default.conf, nginx.conf는 리디렉션만 처리할 수 있게 수정합니다. 

6. sites-available 설정한 부분은 443 포트 ssl 설정합니다. 

sudo nano /etc/nginx/sites-available/{{도메인}}
# HTTPS 설정 (443번 포트에서 SSL 처리)
server {
    listen 443 ssl;
    server_name {{도메인}};

    ssl_certificate /etc/letsencrypt/live/{{도메인}}/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/{{도메인}}/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    if ($host != "{{도메인}}") {
       return 444;
    }

    location / {
        try_files $uri $uri/ /index.php?$query_string;
        add_header 'Access-Control-Allow-Origin' '*';
    }

    # 포트 3000으로 프록시 요청 (Node.js)
    location /api/ {
        proxy_pass http://127.0.0.1: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;
        proxy_buffering off;
        proxy_request_buffering off;
    }

}

추가 설명)

location /api/ -> http://test:3000/api/ 일경우 https://{{도메인}}/api/이 될것입니다.

location proxy_pass -> http://127.0.0.1:3000는 내부에서 돌릴경우 ip는 127.0.0.1이 됩니다. port는 현재 사용하고 있는 port로 설정하시면 됩니다. 

 

7. nginx를 저장하기전 테스트를 해봅니다.

sudo nginx -t

8. nginx를 저장합니다. 

sudo systemctl restart nginx

9. postman에서 https://{{도메인}}/api/end-point로 현재 api 적용한거 기능 정상적으로 돌아가는 지 확인해봅니다. 

  • https://{{도메인}}/api/total-extract
728x90
반응형
Comments