当前位置: 首页 > 知识库问答 >
问题:

nginx 403错误:禁止[文件夹]的目录索引

史景铄
2023-03-14

我有3个域名,正在尝试使用Nginx将所有3个站点托管在一台服务器(数字海洋水滴)上。

谜题1。命名为mysite2。命名为mysite3。名称

其中只有一个有效。另外两个导致403个错误(以相同的方式)。

在我的nginx错误日志中,我看到:[error]13108#0:*1目录索引“/usr/share/nginx/mysite2.name/live/”被禁止

我的站点已启用配置为:

server {
        server_name www.mysite2.name;
        return 301 $scheme://mysite2.name$request_uri;
}
server {
        server_name     mysite2.name;

        root /usr/share/nginx/mysite2.name/live/;
        index index.html index.htm index.php;

        location / {
                try_files $uri $uri/ /index.html index.php;
        }

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }
}

所有3个站点都有几乎相同的配置文件。

每个网站的文件都在 /usr/share/nginx/mysite1.name/someFolder这样的文件夹中,然后 /usr/share/nginx/mysite1.name/live是一个符号链接。(mysite2和mysite3也一样。)

我已经看过Nginx 403禁止所有文件,但这没有帮助。

有什么想法可能是错误的吗?

共有3个答案

萧波峻
2023-03-14

如果您只是想列出目录内容,请使用autoindex-on 如:

location /somedir {
       autoindex on;
}
server {
        listen   80;
        server_name  domain.com www.domain.com;
        access_log  /var/...........................;
        root   /path/to/root;
        location / {
                index  index.php index.html index.htm;
        }
        location /somedir {
               autoindex on;
        }
}

督建柏
2023-03-14
server {
    server_name www.mysite2.name;
    return 301 $scheme://mysite2.name$request_uri;
}
server {
    #This config is based on https://github.com/daylerees/laravel-website-configs/blob/6db24701073dbe34d2d58fea3a3c6b3c0cd5685b/nginx.conf
    server_name mysite2.name;

     # The location of our project's public directory.
    root /usr/share/nginx/mysite2/live/public/;

     # Point index to the Laravel front controller.
    index           index.php;

    location / {
        # URLs to attempt, including pretty ones.
        try_files   $uri $uri/ /index.php?$query_string;
    }

    # Remove trailing slash to please routing system.
    if (!-d $request_filename) {
            rewrite     ^/(.+)/$ /$1 permanent;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
    #   # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    #   # With php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param                   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

}

然后浏览器中唯一的输出是一个Laravel错误:“哎呀,好像出了什么问题。”

不要运行chmod-R 777应用/存储(注意)。让世界可写的东西是糟糕的安全性。

chmod-R 755应用程序/存储工作正常且更安全。

强硕
2023-03-14

如果您关闭了目录索引,并且出现此问题,可能是因为您正在使用的try_文件有一个目录选项:

location / {
  try_files $uri $uri/ /index.html index.php;
}                 ^ that is the issue

删除它,它应该工作:

location / {
  try_files $uri /index.html index.php;
} 

TL; DR:这是因为nginx将尝试索引目录,并被自己阻止。抛出OP提到的错误。

try\u files$uri$uri/意味着从根目录中,尝试由uri指向的文件,如果该文件不存在,则尝试一个目录(因此为/)。当nginx访问目录时,它会尝试为其编制索引,并将其中的文件列表返回给浏览器/客户端,但默认情况下,目录索引被禁用,因此它会返回错误“nginx 403错误:禁止使用[folder]的目录索引”。

目录索引由自动索引选项控制:https://nginx.org/en/docs/http/ngx_http_autoindex_module.html

 类似资料:
  • 问题内容: 我正在将dompdf插件用于codeigniter:http : //codeigniter.com/wiki/PDF_generation_using_dompdf/ 从表单生成pdf。这在localhost上有效,但在实时服务器上,我在错误日志中得到了此信息: 知道这意味着什么吗?我已经搜索了答案,发现了一些建议编辑httpd.conf的方法,但是我无权访问。 我也尝试过将一个空白

  • 问题内容: 因此,我正在用angularjs 1构建一个cordova / phonegap应用程序,并且试图在该应用程序的专用目录/沙箱中保存和读取一个名为calendar.txt的文件,但不能。 调试时我的控制台日志显示没有错误,如果文件不存在则正在创建文件,并且文件正在正确读取。但是事实并非如此。在设备上构建并运行时,不会保存数据。在指定的位置也没有创建文件。 我在控制台上记录了它试图使用的

  • 对于一个拥有庞大代码库的项目来说,这个索引时间是非常慢的。

  • 问题内容: 我制作了供个人使用的python脚本,但不适用于Wikipedia … 这项工作: 这不起作用: 这是错误: 问题答案: 在当前代码内: Python 2.X 的Python 3.X 带有Selenium的Python 3.X(执行Javascript函数) 修改后的版本起作用的原因是因为Wikipedia检查User-Agent是“流行的浏览器”

  • 问题内容: 如何使用Python获取目录中现有的文件夹名称? 我想将所有子文件夹保存到列表中,以便在此之后使用名称,但是我不知道如何读取子文件夹名称? 谢谢你的帮助 问题答案: 您可以使用 编辑 如果您只想要第一个级别,而不是真正地“遍历”子目录,则代码更少: 这并不是真正的目的。如果您确实只想要一个子目录级别,也可以使用Yannik Ammann建议的方法:

  • 我想问一下如何使用Java知道目录/文件夹中的文件/文件类型。问的原因是,目前,我有一个情况,将有两个不同类型的文件存在于文件夹中,其中一个是基于Java的,另一个是Python。我想使用Java作为一种语言,以编程方式检查解压缩文件夹中的类型文件是python(.py)还是Java(.Java)。你知道怎么做吗?有什么建议吗?在同一文件夹中不可能有两种类型的文件。话虽如此,该文件要么全部在Jav