diff --git a/nginx/taxbaik-domains.conf b/nginx/taxbaik-domains.conf new file mode 100644 index 0000000..7d598a0 --- /dev/null +++ b/nginx/taxbaik-domains.conf @@ -0,0 +1,65 @@ +# TaxBaik Nginx 설정 (Option B: /taxbaik/ 프리픽스 제거) +# 배포 시 이 파일이 /etc/nginx/sites-available/taxbaik-domains.conf 로 복사됨 + +# 1. TaxBaik 홈페이지 (taxbaik.com, www.taxbaik.com) +server { + server_name taxbaik.com www.taxbaik.com; + client_max_body_size 512M; + + # 루트 경로 요청을 /taxbaik 으로 프록싱하여 base href /taxbaik/ 에 대응 + location / { + proxy_pass http://127.0.0.1:5001/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + 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_read_timeout 120s; + } + + listen 443 ssl; # managed by Certbot + ssl_certificate /etc/letsencrypt/live/taxbaik.com/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/taxbaik.com/privkey.pem; # managed by Certbot + include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot +} + +# 2. Gitea (gitea.taxbaik.com) +server { + server_name gitea.taxbaik.com; + client_max_body_size 512M; + + location / { + 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; + } + + listen 443 ssl; # managed by Certbot + ssl_certificate /etc/letsencrypt/live/gitea.taxbaik.com/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/gitea.taxbaik.com/privkey.pem; # managed by Certbot + include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot +} + +# 3. Redirects +server { + if ($server_name = www.taxbaik.com) { + return 301 https://$server_name$request_uri; + } + if ($server_name = taxbaik.com) { + return 301 https://$server_name$request_uri; + } + if ($server_name = gitea.taxbaik.com) { + return 301 https://$server_name$request_uri; + } + + listen 80; + server_name taxbaik.com www.taxbaik.com gitea.taxbaik.com; + return 404; +} diff --git a/scripts/fix-nginx-final.sh b/scripts/fix-nginx-final.sh new file mode 100644 index 0000000..9804837 --- /dev/null +++ b/scripts/fix-nginx-final.sh @@ -0,0 +1,85 @@ +#!/bin/bash +# TaxBaik Nginx 설정 최종 수정 (중복 location / 제거) + +set -e + +NGINX_FILE="/etc/nginx/sites-available/taxbaik-domains.conf" +BACKUP_FILE="${NGINX_FILE}.backup.$(date +%Y%m%d_%H%M%S)" + +echo "🔧 TaxBaik Nginx 설정 최종 수정" +echo "==================================" +echo "" + +# 1. 백업 생성 +echo "1️⃣ 백업 생성..." +sudo cp "$NGINX_FILE" "$BACKUP_FILE" +echo " ✅ 백업: $BACKUP_FILE" +echo "" + +# 2. Python으로 설정 수정 +echo "2️⃣ 설정 수정 중..." +sudo python3 << 'PYTHON_SCRIPT' +import re + +nginx_file = "/etc/nginx/sites-available/taxbaik-domains.conf" + +with open(nginx_file, 'r') as f: + content = f.read() + +# 첫 번째 location / 블록 제거 (taxbaik 프리픽스 있는 것) +# 이것은 이제 필요 없음 (Option B: /taxbaik/ 프리픽스 제거) +pattern = r'# /admin 하위 요청을.*?location / \{[^}]*proxy_pass http://127\.0\.0\.1:5001/taxbaik/;[^}]*\}' +content = re.sub(pattern, '', content, flags=re.DOTALL) + +# 정리: 공백 정리 +content = re.sub(r'\n\s*\n\s*\n', '\n\n', content) + +with open(nginx_file, 'w') as f: + f.write(content) + +print("✅ Python으로 수정 완료") +PYTHON_SCRIPT + +echo "" + +# 3. 수정된 설정 확인 +echo "3️⃣ 수정된 설정 확인..." +echo " ===" +sudo grep -A 8 "location /" "$NGINX_FILE" | head -15 +echo " ===" +echo "" + +# 4. 문법 검증 +echo "4️⃣ Nginx 문법 검증..." +if sudo nginx -t 2>&1 | grep -q "successful"; then + echo " ✅ 문법 검증 성공" +else + echo " ❌ 문법 오류 - 롤백 중..." + sudo cp "$BACKUP_FILE" "$NGINX_FILE" + echo " ✅ 롤백 완료" + exit 1 +fi +echo "" + +# 5. Nginx 재로드 +echo "5️⃣ Nginx 재로드..." +sudo systemctl reload nginx +echo " ✅ 재로드 완료" +echo "" + +# 6. 최종 확인 +echo "6️⃣ 최종 확인..." +if curl -sf http://127.0.0.1:5001/ > /dev/null; then + echo " ✅ 로컬호스트 응답 정상" +else + echo " ⚠️ 로컬호스트 응답 확인 필요" +fi +echo "" + +echo "✅ 설정 수정 완료!" +echo "" +echo "📝 변경 사항:" +echo " - 첫 번째 location / 블록 제거 (중복)" +echo " - 남은 location / 블록이 / 경로 처리" +echo "" +echo "🔙 백업 파일: $BACKUP_FILE" diff --git a/scripts/rollback-nginx.sh b/scripts/rollback-nginx.sh new file mode 100644 index 0000000..fc2b3c2 --- /dev/null +++ b/scripts/rollback-nginx.sh @@ -0,0 +1,79 @@ +#!/bin/bash +# TaxBaik Nginx 설정 긴급 롤백 스크립트 +# 실행: sudo ./rollback-nginx.sh + +set -e + +echo "🔙 TaxBaik Nginx 설정 긴급 롤백" +echo "==============================" +echo "" + +# 색상 정의 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' + +NGINX_FILE="/etc/nginx/sites-available/taxbaik-domains.conf" + +# 1. 백업 파일 찾기 +echo "🔍 최근 백업 파일 찾기..." +LATEST_BACKUP=$(ls -t ${NGINX_FILE}.backup* 2>/dev/null | head -1) + +if [ -z "$LATEST_BACKUP" ]; then + echo -e "${RED}❌ 백업 파일을 찾을 수 없습니다${NC}" + echo "" + echo "현재 디렉토리의 백업 파일:" + ls -la /etc/nginx/sites-available/taxbaik-domains.conf* 2>/dev/null || echo "없음" + exit 1 +fi + +echo -e "${GREEN}✅ 백업 파일 발견: $LATEST_BACKUP${NC}" +echo "" + +# 2. 현재 설정 확인 +echo "📋 현재 (오류) 설정 확인..." +echo -e "${BLUE}" +head -35 "$NGINX_FILE" | grep -A 10 "location" || true +echo -e "${NC}" +echo "" + +# 3. 롤백 +echo "⏮️ 롤백 중..." +cp "$LATEST_BACKUP" "$NGINX_FILE" +echo -e "${GREEN}✅ 롤백 완료${NC}" +echo "" + +# 4. 문법 검증 +echo "🔍 Nginx 문법 검증..." +if nginx -t 2>&1 | grep -q "successful"; then + echo -e "${GREEN}✅ 문법 검증 성공${NC}" +else + echo -e "${RED}❌ 문법 오류${NC}" + nginx -t + exit 1 +fi +echo "" + +# 5. Nginx 재시작 +echo "🔄 Nginx 재시작..." +systemctl restart nginx +echo -e "${GREEN}✅ Nginx 재시작 성공${NC}" +echo "" + +# 6. 상태 확인 +echo "🧪 최종 상태 확인..." +if systemctl is-active --quiet nginx; then + echo -e "${GREEN}✅ Nginx 정상 작동${NC}" +else + echo -e "${RED}❌ Nginx 비정상${NC}" + systemctl status nginx + exit 1 +fi +echo "" + +echo "✅ 롤백 완료!" +echo "" +echo "📝 복구된 설정:" +grep -A 5 "location /taxbaik" "$NGINX_FILE" | head -8