폴더가 있는 URL이 nginx에서 어떻게 동작하는지 테스트하기 위해 매우 간단한 서버를 만들었습니다. Nginx는 docker(nginx:latest image)에서 실행 중입니다. Nginx는 사용자를 실행합니다 nginx(기본값은 에 설정됨 /etc/nginx/nginx.conf).

server {
        server_name example.com;

        location /test/ {
                root /var/www/test;
                index index.html;
        }
}

그리고 이 구조:

/var/www
└── test
    └── index.html

cat /var/www/test/index.html
Test

ls -l /var/ | grep www
drwxr-xr-x 3 root  root 4096 Jan 15 23:33 www

ls -l /var/www/test/
-rw-r--r-- 1 root root 7 Jan 15 21:08 index.html

이제이 문제가 있습니다.

curl http://example.com/test/
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.21.5</center>
</body>
</html>
curl http://example.com/test
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.21.5</center>
</body>
</html>

http://example.com/test또는 에 액세스할 때 "테스트"가 표시될 것으로 예상합니다 http://example.com/test/. 내가 뭘 잘못하고 있죠?

answer

두 가지 별개의 일이 일어나고 있습니다.

rootnginx는 요청을 처리할 때 지시자 의 경로 끝에 요청 URI를 추가합니다 . 귀하의 경우 URL은 , http://example.com/test정규화된 URI는 /test이고 귀하 root/var/www/test입니다.

이것은 nginx가 index.html에서 찾도록 합니다 /var/www/test/test/index.html.

nginx 서버를 만들려면 /var/www/test/index.html다음 중 하나를 사용해야 합니다.

root /var/www;

또는

alias /var/www/test;

사용 root하는 것이 선호되는 방법입니다.

부분적으로 nginx 는 서버에 디렉토리가 있을 때 http://example.com/test301 리디렉션을 보냅니다 . 귀하의 질문에는 상위 수준의 지시문이 무엇인지 표시되지 않으므로 어떤 경로에서 의 존재가 확인되는지 모르겠습니다 .http://example.com/test/testroottest