ZeroBase/Infra

Http -> Https Domain 변경

Red_Horse 2025. 10. 25. 01:06

환경 설정

  • 서버: 리눅스 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