API 앱과 Admin 앱을 하나의 인스턴스에 띄울 일이 생겼다. 따로 분리하면 좋겠지만 OCI의 무료 인스턴스를 사용하고 있기 때문에 무료 인스턴스의 개수에 제한이 있어 하나에 구성하기로 했다.
TLS 인증서 발급받기
sudo apt update
sudo apt-get install letsencrypt -y
먼저 letsencrypt를 통해 인증서를 발급하기 위해서 위와 같이 패키지를 다운로드한다.
certbot certonly --standalone -d 도메인명
그다음으로 인증서를 발급받아야 하는데 도메인명이 필요하다.
도메인은 가비아에서 store나 site와 같이 일반적으로 사용하는 public suffix가 아닌 것들은 1천 ~ 3천 원 정도의 가격으로 1년을 사용할 수 있으니 크게 부담은 없다.
80 포트를 사용하고 있는 프로그램이 있다면 종료해야 한다.
만약, NGINX를 사용하고 있다면
sudo systemctl stop nginx
위 명령어로 NGINX를 종료시켜 준다.
iptables 수정하기
sudo iptables -I INPUT 4 -p tcp --dport 443 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4
만약 HTTPS 요청이 제대로 수행되지 않는다면 iptables의 설정을 확인해 본다.
나는 위와 같이 4번째 위치에 443 포트로 오는 요청을 허용하는 설정을 추가하여 해결했다.
NGINX 설정 수정하기
server {
listen 80;
server_name api.craftlogic.site;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name api.craftlogic.site;
ssl_certificate /etc/letsencrypt/live/api.craftlogic.site/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.craftlogic.site/privkey.pem;
location / {
proxy_pass http://localhost:8080;
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;
}
}
server {
listen 80;
server_name admin.craftlogic.site;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name admin.craftlogic.site;
ssl_certificate /etc/letsencrypt/live/admin.craftlogic.site/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/admin.craftlogic.site/privkey.pem;
location / {
proxy_pass http://localhost:28081;
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;
}
}
/etc/nginx/sites-available/default 파일을 vi 편집기로 열어 위와 같이 수정한다.
같은 IP를 사용하고 있더라도 서브 도메인명을 다르게 설정하여 구분할 수 있다.
기본적으로 HTTP로 오는 요청을 HTTPS로 다시 요청하도록 리다이렉트 시켰고,
도메인마다 다르게 설정한 부분은 인증서와 포트 번호이다.
sudo nginx -t
sudo systemctl restart nginx
다 작성했으면 위 명령어로 NGINX를 재실행한다.
잘 적용됐나 확인해 보기
둘 다 포트번호를 입력하지 않아도 미리 NGINX에 작성한 대로 잘 작동하는 것을 확인할 수 있다.
'공부 > 기타' 카테고리의 다른 글
[Git] 잔디 안 심어지는 문제 해결하기 (1) | 2024.10.09 |
---|---|
[Ubuntu] NGINX로 포트포워딩 구성하기 (0) | 2024.10.05 |
[Git] 서브모듈(Submodule)로 설정 파일 분리하기 (0) | 2024.10.03 |
[RabbitMQ] 우분투 22.04에 RabbitMQ 설치하기 (0) | 2024.09.21 |
프론트에서 쿠키를 사용 시 withCredentials 또는 credential 포함시켜야 하는 이유 (0) | 2024.06.15 |