# Nginx 설정 변경 가이드 (TaxBaik 경로 최적화) ## 📍 설정 파일 위치 ``` /etc/nginx/sites-available/taxbaik-domains.conf ``` --- ## 🔍 현재 설정 확인 ### 1단계: 운영 서버에 접속 ```bash ssh kjh2064@178.104.200.7 ``` ### 2단계: 현재 설정 확인 ```bash sudo cat /etc/nginx/sites-available/taxbaik-domains.conf ``` 또는 특정 부분만: ```bash sudo grep -A 15 "location /" /etc/nginx/sites-available/taxbaik-domains.conf ``` --- ## 📋 현재 설정 (변경 전) ```nginx 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_cache_bypass $http_upgrade; 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; proxy_read_timeout 120s; } ``` --- ## ✅ 변경해야 할 부분 ### 변경 1: location 경로 수정 ```diff - location /taxbaik { + location / { ``` ### 변경 2: proxy_pass 수정 ```diff - proxy_pass http://127.0.0.1:5001; + proxy_pass http://127.0.0.1:5001/; ``` ### 변경 3: rewrite 규칙 추가 루트 프록시에서는 rewrite가 필요하지 않습니다. --- ## 📝 변경 후 최종 설정 ```nginx 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_cache_bypass $http_upgrade; 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; proxy_read_timeout 120s; } ``` --- ## 🛠️ 설정 변경 방법 ### 방법 1: nano 에디터 (권장) ```bash # 1. 백업 생성 sudo cp /etc/nginx/sites-available/taxbaik-domains.conf /etc/nginx/sites-available/taxbaik-domains.conf.backup # 2. 편집 sudo nano /etc/nginx/sites-available/taxbaik-domains.conf # 3. 다음 변경사항 적용: # - location /taxbaik { → location / # - proxy_pass http://127.0.0.1:5001; → proxy_pass http://127.0.0.1:5001; # 4. 저장 후 종료 # Ctrl+X → Y → Enter ``` ### 방법 2: sed 명령어 (자동) ```bash # 백업 sudo cp /etc/nginx/sites-available/taxbaik-domains.conf /etc/nginx/sites-available/taxbaik-domains.conf.backup # 변경 1: location / 유지 sudo sed -i 's/location \/taxbaik {/location \//g' /etc/nginx/sites-available/taxbaik-domains.conf # 변경 2: proxy_pass 유지 sudo sed -i 's|proxy_pass http://127.0.0.1:5001/;|proxy_pass http://127.0.0.1:5001;|g' /etc/nginx/sites-available/taxbaik-domains.conf ``` ### 방법 3: Python 스크립트 ```python # nginx_fix.py import re nginx_file = "/etc/nginx/sites-available/taxbaik-domains.conf" # 백업 import shutil shutil.copy(nginx_file, nginx_file + ".backup") # 설정 읽기 with open(nginx_file, 'r') as f: content = f.read() # 변경 1: location /taxbaik { → location /taxbaik/ { content = content.replace('location /taxbaik {', 'location /taxbaik/ {') # 변경 2: proxy_pass 수정 content = content.replace( 'proxy_pass http://127.0.0.1:5001;', 'proxy_pass http://127.0.0.1:5001/;' ) # 변경 3: rewrite 규칙 추가 (한 번만) if 'rewrite ^/taxbaik/' not in content: content = content.replace( 'proxy_pass http://127.0.0.1:5001/;', 'proxy_pass http://127.0.0.1:5001/;\n rewrite ^/taxbaik/(.*)$ /$1 break;' ) # 설정 저장 with open(nginx_file, 'w') as f: f.write(content) print("✅ Nginx 설정 변경 완료") ``` 실행: ```bash sudo python3 nginx_fix.py ``` --- ## ✓ 설정 변경 후 검증 ### Step 1: 문법 검증 ```bash sudo nginx -t ``` **예상 출력:** ``` nginx: the configuration file /etc/nginx/sites-available/taxbaik-domains.conf syntax is ok nginx: configuration test is successful ``` **오류가 나면:** - 백업에서 복구: `sudo cp /etc/nginx/sites-available/taxbaik-domains.conf.backup /etc/nginx/sites-available/taxbaik-domains.conf` - 다시 변경 시도 ### Step 2: Nginx 재로드 ```bash sudo systemctl reload nginx ``` 또는 ```bash sudo systemctl restart nginx ``` **상태 확인:** ```bash sudo systemctl status nginx ``` ### Step 3: 포트 확인 ```bash # Nginx가 포트 80, 443을 사용하는지 확인 sudo netstat -tlnp | grep nginx ``` **예상 출력:** ``` tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/nginx tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 1234/nginx ``` ### Step 4: 웹사이트 테스트 ```bash # 공개 사이트 curl -I http://www.taxbaik.com/taxbaik/ # 예상: HTTP 200 # 관리자 로그인 curl -I http://www.taxbaik.com/taxbaik/admin/login # 예상: HTTP 200 # API curl -I http://www.taxbaik.com/taxbaik/api/auth/login # 예상: HTTP 405 (POST only) 또는 HTTP 200 ``` --- ## 📊 변경 전후 비교 ### 요청 흐름 (변경 전) ❌ ``` 공개 URL: http://www.taxbaik.com/taxbaik/admin/login ↓ Nginx (location /taxbaik): proxy_pass http://127.0.0.1:5001 ↓ 앱 수신: http://127.0.0.1:5001/taxbaik/admin/login ↓ 앱 경로: /taxbaik/admin/login ← PathBase 없음 → 경로 미인식 ↓ ❌ 404 오류 ``` ### 요청 흐름 (변경 후) ✅ ``` 공개 URL: http://www.taxbaik.com/taxbaik/admin/login ↓ Nginx (location /taxbaik/): rewrite 규칙 ↓ 변환: /admin/login (taxbaik 제거) ↓ 앱 수신: http://127.0.0.1:5001/admin/login ↓ 앱 경로: /admin/login ← base href="/taxbaik/admin/" 적용 ↓ 브라우저: /taxbaik/admin/dashboard (상대경로로 변환) ↓ ✅ 정상 작동 ``` --- ## 🔙 롤백 (문제 발생 시) ### 즉시 롤백 ```bash # 백업 복구 sudo cp /etc/nginx/sites-available/taxbaik-domains.conf.backup /etc/nginx/sites-available/taxbaik-domains.conf # Nginx 재로드 sudo systemctl reload nginx # 확인 sudo systemctl status nginx ``` ### 변경 내용 확인 변경 전 내용 확인: ```bash sudo diff /etc/nginx/sites-available/taxbaik-domains.conf.backup /etc/nginx/sites-available/taxbaik-domains.conf ``` --- ## 🆘 문제 해결 ### 문제 1: nginx -t 오류 **증상:** ``` nginx: [emerg] unknown directive "rewrite" in /etc/nginx/sites-available/taxbaik-domains.conf:XX ``` **해결:** - rewrite 문법 확인: `rewrite ^/taxbaik/(.*)$ /$1 break;` (정확하게) - 백업에서 복구 후 다시 시도 ### 문제 2: 설정 적용 안 됨 ```bash # Nginx 완전 재시작 sudo systemctl stop nginx sudo systemctl start nginx # 또는 sudo nginx -s reload ``` ### 문제 3: 여전히 404 ```bash # 1. 설정 재확인 sudo cat /etc/nginx/sites-available/taxbaik-domains.conf | grep -A 3 "location /taxbaik" # 2. Nginx 로그 확인 sudo tail -100 /var/log/nginx/error.log # 3. 앱 로그 확인 sudo systemctl status taxbaik sudo journalctl -u taxbaik -n 50 # 4. DNS 확인 nslookup www.taxbaik.com 8.8.8.8 ``` --- ## 📋 체크리스트 배포 전: - [ ] 운영 서버에 ssh 접속 확인 - [ ] 현재 설정 백업 생성 - [ ] 변경 계획 검토 배포: - [ ] location /taxbaik → location /taxbaik/ (변경 1) - [ ] proxy_pass 수정 (변경 2) - [ ] rewrite 규칙 추가 (변경 3) - [ ] nginx -t 문법 검증 성공 - [ ] systemctl reload nginx 실행 검증: - [ ] curl -I http://www.taxbaik.com/taxbaik/ → HTTP 200 - [ ] curl -I http://www.taxbaik.com/taxbaik/admin/login → HTTP 200 - [ ] 브라우저에서 실제 접속 확인 - [ ] E2E 테스트 실행 --- ## 💡 팁 1. **변경 전 항상 백업** ```bash sudo cp /etc/nginx/sites-available/taxbaik-domains.conf /etc/nginx/sites-available/taxbaik-domains.conf.backup ``` 2. **nano에서 수정할 때:** - `Ctrl+W` → "location /taxbaik" 검색 - `Ctrl+X` → Y → Enter 저장 3. **변경 확인:** ```bash sudo diff -u /etc/nginx/sites-available/taxbaik-domains.conf.backup /etc/nginx/sites-available/taxbaik-domains.conf ``` 4. **전체 설정 보기:** ```bash sudo cat /etc/nginx/sites-available/taxbaik-domains.conf | grep -v "^#" | grep -v "^$" ``` --- **변경 완료 후 운영 서버 확인:** ```bash # 최종 검증 echo "=== 설정 확인 ===" && \ sudo grep -A 5 "location /taxbaik" /etc/nginx/sites-available/taxbaik-domains.conf && \ echo "" && \ echo "=== 문법 검증 ===" && \ sudo nginx -t && \ echo "" && \ echo "=== Nginx 상태 ===" && \ sudo systemctl status nginx --no-pager ``` --- **완료!** ✨