일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Setting
- nodejs
- Remix
- 공연티켓
- Kaikas
- 라라벨
- miniconda
- git
- Laravel
- exceljs
- pagination
- jquery
- 블록체인
- Python
- netfunnel
- Ai
- React
- metamask
- 회고
- CSS
- node
- PM2
- 배포
- nft
- polygon
- chatGPT
- threejs
- 발행
- NextJS
- nginx
- Today
- Total
박주니 개발 정리
opc certbot ssl 및 https api 설정 방법 본문
설명전) 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