1. 계기
실제로 서비스를 운영할 때 도메인에 대한 인증서가 필요하고, 적절한 라우팅이 필요했어요
때문에 도메인을 지정하고 리버스 프록시를 구축할 필요가 있었어요
2. 공유기 도메인 설정
제가 사용하고 있는 IPTIME 공유기는 자체 도메인을 사용할 수 있도록 기능을 제공하고 있었어요 👀
DDNS를 통해 IP를 도메인으로 변경해주고, 이를 사용할 수 있어요 !
도메인 등록 목적 외에도, 포트포워딩을 외부 환경에서 수행해줘야 할 필요가 있어서 DDNS를 등록하게 되었어요 😀
이때 해당 도메인은 무조건 .iptime.org를 상위 도메인으로 가져야 하므로, 저는 별도로 도메인을 등록해줬어요 !
3. Google Domain 설정
저는 Google Cloud Platform의 Cloud DNS를 통해 도메인을 등록했어요
IPTIME에서 지정된 도메인을 또 다른 도메인으로 바꾸는 과정이므로, CNAME 레코드를 통해 지정해줬습니다 !
도메인이 잘 적용되었는지 확인하기 위해 SSH 접속도 테스트해봤는데, 성공적으로 작동했습니다 😊
4. Let's Encrypt 인증서 발급
Nginx를 설정하기에 앞서 Let's Encrypt를 통한 인증서를 미리 발급받았어요 !
미리 발급받아두고 이후에 Docker Volume을 통해 쉽게 인증서를 넘기기 위함이에요
Certbot을 설치하고, 인증서를 발급받아줍니다
# 설치
apt-get install certbot
# 발급
certbot certonly --standalone -d 도메인
5. Nginx 설정
이제 Nginx에서 발급받은 인증서를 적용해볼게요
Nginx는 Docker-Compose로 만들어 일관성을 유지시켜줄게요
먼저 Compose 파일을 생성합니다
# nginx-compose.yml
version: '3'
services:
nginx:
image: nginx
container_name: nginx
ports:
- "80:80"
- "443:443"
volumes:
- nginx:/etc
- /etc/letsencrypt:/etc/letsencrypt:ro
environment:
- TZ=Asia/Seoul
restart: unless-stopped
volumes:
nginx:
name: nginx
현재는 Docker-Network를 사용하지 않을 것이므로, 일단 이 부분은 제외하고 작성했어요
발급받은 인증서를 컨테이너 내부에서도 사용할 수 있도록 해당 볼륨을 Read-Only로 마운트해줬습니다 😊
이제 Compose 파일을 만든 디렉토리에서 이를 실행해줍니다
docker-compose -f ./nginx_compose.yml up -d
실행된 이후에는 인증서 설정을 해주기 위해 컨테이너 내부로 접근합니다
docker exec -it -u root nginx bash
이제 /etc/nginx/nginx.conf 파일을 수정해봅시다
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
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;
include /etc/nginx/conf.d/*.conf;
#NEW SETTINGS
server {
listen 80;
server_name 도메인;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name 도메인;
ssl_certificate /etc/letsencrypt/live/도메인/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/도메인/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5;
}
}
New Setting 아래쪽의 설정을 추가해주면 인증서 적용이 완료됩니다 😊
해당 내용은 기존 HTTP를 이용해 접근하게 되면 301 코드를 돌려주며 HTTPS로 리다이렉트한다는 내용,
그리고 HTTPS로 접근하게 되면 앞서 적용한 인증서를 통해 검증한다는 내용이에요
현재는 여기까지만 적용해두면 인증서가 제대로 적용되며, 이후에 필요한 경우 location을 이용해 라우팅 처리를 해주면 돼요 !
다음번엔 CI/CD를 위한 Jenkins 설치와 Nginx 라우팅에 대해서 이야기해볼게요 🥰
'프로젝트 > On-Premise' 카테고리의 다른 글
On-Premise: Jenkins 설치 및 Nginx 라우팅 (4) (2) | 2025.01.07 |
---|---|
On-Premise: SSH에 Google OTP(Authenticator) 적용하기 (2) (1) | 2024.10.07 |
On-Premise: 보조 PC 서버 컴퓨터로 만들기 (1) (0) | 2024.10.04 |