在Nginx中,它必须是autoindex或目录禁止错误?

时间:2013-03-15 08:10:03

标签: error-handling nginx

我在图片目录/ images / upload上不断收到“目录禁止错误”。

通过在该目录上添加autoindex,我可以删除此错误。但我不希望别人看到该目录下的内容。

如何删除此错误?

Nginx配置

server
{
  listen       80;
  server_name  www.no-dev.com;
  index        index.php index.html index.htm;
  root         /opt/www/no_web;

  location ~ .*\.(php|php5)?$
  {
    #fastcgi_pass unix:/tmp/php-cgi.sock;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    include       fastcgi.conf;
  }

  #location /images {
  #  autoindex on;
  #}

  location ~* \.(css|js)$ {
              add_header  Last-Modified: $date_gmt;
              expires 1y;
              access_log off;
  }

  location ~* \.(jpg|jpeg|gif|png|ico|bmp|swf)$ {
              expires max;
              access_log off;
  }
  access_log logs/no-dev.log main;
}

3 个答案:

答案 0 :(得分:1)

您有以下设置:

index        index.php index.html index.htm;

这意味着当autoindex关闭时,您的网络服务器将针对目录路径的每个请求:

  1. 在该目录中查找index.php,如果找到则返回
  2. 如果找不到index.php,它将查找index.html并返回
  3. 如果未找到index.html,则会返回index.htm
  4. 如果找不到,则返回403
  5. 所以如果你想避免403错误页面,你需要在该目录中设置index.php,index.html或index htm。

    或者,您可以设置error_page 403 some_page.html;以返回看起来不同的403结果。

答案 1 :(得分:1)

返回索引页面或403错误不是目录的唯一选择。例如,有时,404错误更合适。特别是当你想要隐藏文件夹时。

在这种情况下,有一种优雅的方式可以做任何你想做的事情:

# Create a fictive location which does what you want (404 here) 
location /404/ {
    internal;
    return 404;
}


# Use this fictive location as a folder index. That's all.
index /404/;

目录索引请求将由(虚构)'/ 404 /'内部位置处理,并将导致404错误。请注意,它是内部位置。 客户端浏览器不会以任何方式重定向。它只是获得了404请求的返回代码。

这里,404错误只是一个例子。当您重定向到内部位置时,您可以执行任何操作。

因此,不是返回403错误代码,使用自动索引或尝试使用虚假页面隐藏您的问题,而是可以完全按照您的预期执行:)

答案 2 :(得分:0)

这将仅为http://example.com/返回403目录禁止,没有错误:

location = / {
    return 403;
}

所以,在你的情况下:

location = /images/upload/ {
    return 403;
}

这将仅为/ images / upload /目录返回403目录禁止,没有错误。