라우팅 및 리디렉션 체인 검사기

nginx -t 통과 ≠ 웹사이트가 열림. 우리 고유의 백엔드 주소 /admin 장기적으로 나쁨: 301 리디렉션 발생 /admin/그런데 해당 디렉터리는 실제 디렉터리이며 인덱스 파일이 없기 때문에 브라우저에서 바로 403 오류와 흰 화면을 표시합니다. 문법 검사는 모두 녹색으로 통과했지만, 로그에는 "directory index is forbidden" 메시지가 가득 차 있습니다. 이 도구는 상태 코드를 단계별로 출력하는 curl 진단 스크립트와 해당 장애에 대한 nginx 수정 조각을 제공합니다.

무료 · 로그인 불필요 로컬 생성 · 콘텐츠는 업로드되지 않음 해당 사고 · 백엔드 주소에서 301 → 403 백스크린

1사이트 및 경로

대응하여 작성하는 것을 권장합니다: /x 및 /x/ 둘 다 테스트해야 하며, 두 경우의 동작은 종종 다름

2nginx 수정 옵션

결과진단 개요

출력curl 리디렉션 체인 점검 스크립트

0행
—
bash route-check.sh각 리다이렉션 단계의 상태 코드와 Location 헤더가 모두 출력됩니다.

출력nginx 수정 조각

0행
—

빠른 참조이 상태를 보면 우선 다음 위치들을 확인하세요

현상가장 흔한 근본 원인확인 방법
301 → 슬래시 포함 → 403경로명은 실제 디렉터리입니다.try_files $uri $uri/ 디렉터리 리다이렉션을 유발하며, 해당 디렉터리 내에 index 파일이 없습니다.ls /var/www/사이트/해당_디렉토리 index.html이 있는지 확인하세요
리디렉션 횟수가 너무 많음정확한 location 블록 내 301 리디렉션과 try_files 내부 리다이렉션이 상호 중첩됨스크립트에서 Location 헤더가 이전 주소로 돌아가는지 확인합니다.
깔끔한 URL은 404 오류, .html 확장자 포함 URL은 정상 작동try_files 누락됨 $uri.html추가 try_files $uri $uri.html $uri/ =404;
.html이 잘못된 깔끔한 URL로 301 리다이렉트됨location 내에서 사용 if 정규식으로 판단하며, 기존 내용을 덮어씁니다 $1 캡처 그룹if 조건문을 해당 location 블록 밖으로 이동하거나, map 지시어를 사용하세요.
특정 접두사 경로가 예상된 location으로 라우팅되지 않음정규식 location이 앞서 매치됨 ^~ 접두사 매칭 전(^~ 정규식을 억제하지만 일반 접두사는 억제하지 않음)nginx -T | grep -n location 순서 및 유형 확인
403 및 로그에 'forbidden by rule'이라고 기록됨deny 규칙 또는 파일 권한오류 로그의 구체적인 행을 확인하세요. 추측하지 마세요.
이 오류는 우리가 이미 겪어봄

1 · 백엔드 주소가 계속해서 403 오류를 반환합니다./admin 301로 리디렉션됨 /admin/, 그리고 /admin/ 실제 디렉터리(내부에 data/가 있음)이며 index 파일이 없음 → 403 백스크린. 오직 /admin.html 접속 가능합니다.

2 · 리라이트는 내부 재작성이며, index 파일을 추가하는 것이 아닙니다.rewrite ^/admin/?$ /admin.html last; /admin 및 /admin/ 모두 파일에 직접 연결되도록 하되, 로그인 보호 계층은 그대로 유지합니다.

3 · 구문 검사에서는 이러한 문제를 감지할 수 없습니다.nginx -t 구문만 검사하므로 리디렉션 체인, 디렉터리 인덱싱 등 논리적 오류는 전부 초록색으로 표시됩니다. 수정 후에는 반드시 실제 요청을 보내 상태 코드와 리디렉션 횟수를 확인해야 합니다.

4 · 쌍 테스트/x 와 /x/ 두 개의 서로 다른 URI이며, 규칙 적용 결과가 달라질 수 있으므로 양쪽 모두 200 응답을 반환해야 합니다.