如果想要把服务器上的某个目录对外开放,让所有人可以看到并下载目录里面的文件,可以使用nginx的autoindex
举个例子,我想把/home/nemo/publicdir/file/
这个目录对外开放,我可以设置请求http://wwww.mysite.com/testpublic/
这个url的时候,自动映射到我要开放的目录。nginx配置如下:
location /testpublic/ {
alias /home/nemo/publicdir/file/;
autoindex on;
}
location / {
root /home/nemo/www;
try_files /notfound.html 404;
}
然后重启nginx,之后在浏览器里面输入http://wwww.mysite.com/testpublic/
就可以看到/home/nemo/publicdir/file/
这个目录里面的文件了。
注意:目录里面有index.html的时候,输入上面的地址,看到的是index.html的东西,所以如果要让其他看看到目录里的东西,则该目录下面不能有index.html
文件
我之前的一篇关于nginx location规则的笔记里面写过一些匹配规则,下面看看假如说上面的匹配规则写成如下这几个方式,会怎么样?
方式一、=
全匹配
location = /testpublic/ {
alias /home/nemo/publicdir/file/;
autoindex on;
}
location / {
root /home/nemo/www;
try_files /notfound.html 404;
}
由于=
表示全匹配,比如说/home/nemo/publicdir/file/
里面还有一个logs
文件夹,则在浏览器里面输入http://wwww.mysite.com/testpublic/
之后可以看到里面的logs
文件夹,但是点击该文件夹,浏览器地址栏里面变成了http://wwww.mysite.com/testpublic/logs
,但实际上nginx匹配的是location /
规则。
方式二、~
匹配子字符串
location ~ /testpublic/ {
alias /home/nemo/publicdir/file/;
autoindex on;
}
location / {
root /home/nemo/www;
try_files /notfound.html 404;
}
~
表示匹配是否是uri的子字符串,还用上面的logs
文件夹举例,在浏览器里面输入http://wwww.mysite.com/testpublic/
之后可以看到里面的logs
文件夹,但是点击该文件夹,浏览器地址栏里面变成了http://wwww.mysite.com/testpublic/logs
,但看到的还是/home/nemo/publicdir/file/
文件夹的内容,因为/testpublic/
是/testpublic/logs
的子字符串,nginx匹配的还是location ~ /testpublic/
规则。
可能上面这个例子会让人误以为~
是从头开始匹配,实际不是。可以举一个更明显的例子,在浏览器里输入http://wwww.mysite.com/blablabla/testpublic/
,结果看到的还是/home/nemo/publicdir/file/
文件夹的内容。因为/testpublic/
是/blablabla/testpublic/
的子字符串。
看下nginx官方文档的autoindex这一章节,里面还提到autoindex_localtime
、autoindex_format
、autoindex_exact_size
等参数。下面会一一解释。
autoindex_exact_size
默认是on
,表示显示出文件的确切大小,单位是Byte
。如果设置为off
,显示的是文件的大概大小,单位是KB
或MB
或GB
autoindex_localtime
默认是off
,表示显示文件的时间为GMT时间,改为on
后闲置的文件时间是服务器时间。
下面这张图是autoindex_exact_size
为on
且autoindex_localtime
为off
的文件时间和大小显示情况
下面这张图是autoindex_exact_size
为off
且autoindex_localtime
为on
的文件时间和大小显示情况
autoindex_format
这个参数从nginx 1.7.9
版本才有,默认是html
,表示目录里的文件以html的形式形式返回。