nginx 访问目录时出现 403

nginx 访问目录时出现 403

我制作了一个非常简单的服务器来测试带有文件夹的 URL 在 nginx 中的行为。Nginx 在 docker 中运行(nginx:最新镜像)。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/。我做错了什么?

答案1

两件不同的事情正在发生。

nginx 在处理请求时将请求 URI 附加到指令路径的末尾root。 在您的例子中,URL 为http://example.com/test,规范化 URI 为/test,您的root/var/www/test

index.html这会让 nginx在 中寻找/var/www/test/test/index.html

要创建 nginx 服务器/var/www/test/index.html,您需要使用:

root /var/www;

或者

alias /var/www/test;

使用root是首选方式。

至于部分,当服务器上有目录时,http://example.com/testnginx 会发送 301 重定向到。你的问题没有显示上层的指令是什么,所以我不知道在哪个路径中检查是否存在。http://example.com/test/testroottest

相关内容