【问题标题】:nginx: Index file outside of the document rootnginx:文档根目录之外的索引文件
【发布时间】:2022-12-04 22:00:42
【问题描述】:

我正在尝试使用 nginx 提供用户提供的文件目录,但索引文件位于文档根目录之外。我不想在目录中找到索引文件的原因是因为该目录是为了让用户将他们的东西放在那里。

Nginx 的index 指令似乎只适用于文档根目录中的文件;文档说索引可以是“绝对路径”,但我的实验表明这只是相对于文档根目录。

因此,我尝试使用location =/index.html { alias /path/to/index.html } 提供另一个索引位置,并且当直接请求/index.html 时这设法工作,但如果请求/ 则它不起作用(403 日志“目录索引为”/srv /docroot/“被禁止”)。但是,如果我创建一个空文件到/srv/docroot/index.html,它就会开始工作;然后/path/to/index.html 服务于/。所以看起来Nginx

  1. 检查 /srv/docroot/index.html 文件是否存在于文件系统中 / 的位置。
  2. 如果存在,它会进行内部重定向,并在/index.html 位置为/path/to/index.html 提供服务。

    在文档根目录之外提供索引文件的正确方法是什么?

【问题讨论】:

    标签: nginx


    【解决方案1】:

    要使用 Nginx 在文档根目录之外提供索引文件,您可以在服务器块中使用 try_files 指令。 try_files 指令允许您指定 Nginx 应按顺序尝试提供的文件列表。如果指定的文件都不存在,Nginx 将提供一个默认的 404 错误页面。

    下面是一个示例配置,展示了如何使用 try_files 指令在文档根目录之外提供索引文件:

        server {
      listen 80;
      server_name example.com;
    
      root /srv/docroot;
    
      index index.html;
    
      location / {
        try_files /path/to/index.html $uri $uri/ =404;
      }
    }
    

    在此配置中,Nginx 将首先尝试在以下位置提供文件/path/to/index.html当要求/收到。如果该文件不存在,Nginx 将尝试在请求时提供该文件网址($uri).如果该文件不存在,Nginx 将尝试为请求的目录索引提供服务网址($uri/).如果这些文件都不存在,Nginx 将提供一个默认的 404 错误页面。

    此配置允许您在文档根目录外提供索引文件,而无需在文档根目录内创建占位符文件。它还允许您为任何请求提供正确的索引文件,而不仅仅是请求/index.html.

    让我知道是否有帮助!

    【讨论】:

      猜你喜欢
      • 2014-02-19
      • 2021-11-06
      • 2017-09-28
      • 1970-01-01
      • 2016-10-17
      • 2016-09-07
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多