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