Nginx默认是不允许列出整个目录的。如需此功能,打开nginx.conf文件或你要启用目录浏览虚拟主机的配置文件,在server或location 段里添加上autoindex on;来启用目录浏览,下面会分情况进行说明。
另外Nginx的目录浏览有两个比较有用的参数,可以根据自己的需求添加:
autoindex_exact_size off;
默认为on,显示出文件的确切大小,单位是bytes。
改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
autoindex_localtime on;
默认为off,显示的文件时间为GMT时间。
改为on后,显示的文件时间为文件的服务器时间
1、整个虚拟主机开启目录浏览
在server段添加
location /
{
autoindex on;
autoindex_localtime on; #之类的参数写这里
}
2、单独目录开启目录浏览
2.1:直接二级目录开启目录浏览
location /down/
{
autoindex on;
}
2.2:虚拟目录开启目录浏览
location /down/
{
alias /home/wwwroot/lnmp/test/;
autoindex on;
}
详细参照:http://nginx.org/en/docs/http/ngx_http_autoindex_module.html
示例配置如下
location /
{
root /data/www/file //指定实际目录绝对路径;
autoindex on; //开启目录浏览功能;
autoindex_exact_size off; //关闭详细文件大小统计,让文件大小显示MB,GB单位,默认为b;
autoindex_localtime on; //开启以服务器本地时区显示文件修改日期!
}
需要注意root和alias的区别:
alias 设置的目录是准确的,可以理解为linux的 ln命令创建软连接,location就是软连接的名字。如上面2.2例子访问 http://域名/down/vpser.txt 是直接访问的/home/wwwroot/lnmp/test/下面的vpser.txt文件。
root 设置的目录是根目录,locatoin里所指定名称的目录,必须在root设定下的目录有相同名字的目录。如果将上面2.2例子里的alias改成root 访问 http://域名/down/vpser.txt 是直接访问的的/home/wwwroot/lnmp/test/down/ 目录下的vpser.txt文件。
需要注意的是alias目录必须要以 / 结尾且alias只能在location中使用。
如果想希望做出漂亮的目录列表,支持header,footer则可以安装三方插件:
http://wiki.nginx.org/NginxNgxFancyIndex
重启nginx,使其生效。
对中文目录的支持
server {
listen 80;
server_name localhost;
#charset koi8-r;
charset utf-8;
#access_log logs/host.access.log main;
access_log syslog:server=10.1.41.53:514,facility=local7,tag=nginx,severity=info;
location / {
#root html;
root /var/ftp/;
autoindex on; # //开启目录浏览功能;
autoindex_exact_size off; #//关闭详细文件大小统计,让文件大小显示MB,GB单位,默认为b>;
autoindex_localtime on; #//开启以服务器本地时区显示文件修改日期!
#index index.php index.html index.htm;
}
}
nginx默认的配置为charset koi8-r,导致显示中文有点乱码,修改为utf-8后正常
对比下apache的配置
< Directory ”/data/www/file” >
Options Indexes //开启目录列表索引模式
Order allow,deny
IndexOptions NameWidth = 25 Charset = UTF -8 //设定文件名显示长度,文字字符编码
Allow from all
</ Directory >
以宝塔面板下的NGINX为例,在站点的目录下建立一个DOWN的文件下,把你要公开下载的文件放进去。在配置里增加如下命令,效果如下图:
location /down/
{
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
charset utf-8,gbk;
}