환경 설정
- 서버: 리눅스 Ubuntu
- 웹서버: Nginx (리버스 프록시)
- 도메인: 가비아에서 구매한 도메인
- 네트워크: iptime 공유기 환경
- SSL: Let's Encrypt 무료 인증서
목표
- https://jenkins.[도메인] - 브라우저 경고 없는 안전한 접속
- https://fitnesspt.[도메인] - 브라우저 경고 없는 안전한 접속
준비 단계: certbot 설치
sudo apt update
sudo apt install certbot
sudo apt install python3-certbot-nginx # Nginx와 acme챌린지를 위한 플러그인
sudo apt install python3-certbot-apache # Apache와 acme챌린지를 위한 플러그인
1단계: 도메인 DNS 설정
가비아 관리콘솔 설정
호스트명: jenkins
레코드타입: A
값: [서버공인IP]
호스트명: fitnesspt
레코드타입: A
값: [서버공인IP]
주요 이슈와 해결
문제: 도메인 접속 시 공유기 관리페이지로 리다이렉트
원인: 80포트 포트포워딩 누락
해결: iptime 포트 포워딩 규칙 추가

3단계: Nginx 리버스 프록시 설정
Jenkins 설정 (/etc/nginx/sites-available/jenkins)
server {
listen 80;
server_name jenkins.[도메인];
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host jenkins.[도메인];
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;
# Jenkins 쿠키 도메인 수정 (중요!)
proxy_cookie_domain 127.0.0.1 jenkins.[도메인];
proxy_cookie_domain localhost jenkins.[도메인];
proxy_redirect http://127.0.0.1:8080/ http://jenkins.[도메인]/;
proxy_redirect http://localhost:8080/ http://jenkins.[도메인]/;
proxy_buffering off;
proxy_request_buffering off;
}
}
주요 이슈와 해결
문제: Jenkins 접속 시 /login/login.cgi로 리다이렉트, "Not Found" 오류
원인: Jenkins의 쿠키와 세션이 새 도메인에서 작동하지 않음
해결: proxy_cookie_domain 설정 추가
nginx 설정 활성화
sudo ln -s /etc/nginx/sites-available/jenkins /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sites-available 위치에는 설정 파일만 있고 실제 실행되는건 sites-enable에서 연결되어 있는 파일을 읽어서 실행합니다.

4단계: Let's Encrypt SSL 인증서 발급
acme-challenge 경로 설정
nginx파일에 다음 내용 추가(jenkins, fitnesspt)
location ^~ /.well-known/acme-challenge/ {
root /var/www/html;
try_files $uri =404;
}
웹 루트 디렉토리 준비(SSL 인증서 발급시 도메인 소유권을 확인하기 위해 사용할 경로)
sudo mkdir -p /var/www/html/.well-known/acme-challenge
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
주요 이슈와 해결
문제: SSL 인증서 발급 시 "Timeout during connect" 오류
원인: iptime에서 해외 IP 접근 차단 설정
해결: 인증서 발급 시에만 임시로 해외 IP 차단 해제
SSL 인증서 발급
# 해외 IP 차단 임시 해제 후
sudo certbot certonly --nginx --cert-name [저장될 이름] -w /var/www/html -d jenkins.[도메인] -d fitnesspt.[도메인]
5단계: HTTPS 최종 설정
Jenkins HTTPS 설정
# HTTP → HTTPS 리다이렉트
server {
listen 80;
server_name jenkins.[도메인];
return 301 https://$server_name$request_uri;
}
# HTTPS 설정
server {
listen 443 ssl http2;
server_name jenkins.[도메인];
ssl_certificate /etc/letsencrypt/live/[인증서이름]/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/[인증서이름]/privkey.pem;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host jenkins.[도메인];
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
proxy_cookie_domain 127.0.0.1 jenkins.[도메인];
proxy_cookie_domain localhost jenkins.[도메인];
proxy_redirect http://127.0.0.1:8080/ https://jenkins.[도메인]/;
proxy_redirect http://localhost:8080/ https://jenkins.[도메인]/;
}
}
자동 갱신 설정
sudo systemctl status certbot.timer
sudo certbot renew --dry-run

'ZeroBase > Infra' 카테고리의 다른 글
| Linux Server SSH 접속 메일 알림(sSMTP) (1) | 2025.10.03 |
|---|