nginx 的 location 配置为什么没有生效?

server {
    listen 8001 default_server;
    location /about/ {
      root html;
      index about.html;
    }

  }

只有这一个地方配置了 8001 端口。

打算是通过访问 http://localhost:8001/about/ 打开 html 目录下的 about.html 的,但是返回 403 错误。如果是访问 http://localhost:8001/ 会返回 html 目录下的 index.html 文件

如果注释了这里的配置,那么 http://localhost:8001/ 是无法访问的。也就是配置是起效果的,但是不是预期的效果,可能是我对配置的理解错误或者有什么其他原因导致的?

阅读 3k
avatarAI BotBETA

这个问题的原因可能是由于 rootindex 指令的路径问题。在你的配置中,root 指令的路径是相对于 nginx 的工作目录的,而不是相对于 location 块。因此,你需要指定一个相对于工作目录的绝对路径。你可以尝试以下配置:

server {
    listen 8001 default_server;
    root /path/to/your/html; # 指定你的 html 文件的绝对路径
    index about.html;

    location /about/ {
        try_files $uri $uri/ /about.html; # 如果 about.html 不存在,那么就尝试 index.html
    }
}

在上述配置中,你需要将 /path/to/your/html 替换为你的实际 html 文件的路径。这样,当访问 http://localhost:8001/about/ 时,nginx 将从指定的路径查找 about.html 文件。

另外,try_files 指令告诉 nginx 按照顺序尝试文件或目录。如果 $uri 对应的文件不存在,那么就尝试 $uri/(如果它是一个目录的话),否则就尝试 /about.html。这样,如果 about.html 不存在,那么就会尝试返回 index.html 文件。

1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题