导读:公司内部一个提供apk包下载的磁盘空间不足,需要将新生成的apk包放到最新挂载的磁盘上面。内部使用的是nginx做为文件服务器对内部提供apk下载服务,现在开发将新生成的包放到新的目录上面,所以nginx的根目录的路径也需要更改了,但是我们希望旧的url还可以对外提供服务。为此现在我的解决思路就是在nginx新建一个新的location为新的root根目录。
location配置信息:
location /apk_download/ { root /data/apk_download; autoindex on; gzip on; gzip_types text/plain application/x-javascript text/css application/xml application/javascript; gzip_min_length 500; gzip_buffers 4 8k; }
因为nginx的配置已经存在一个对外提供下载的location,所以我是拷贝旧的,然后更改 location 和 root。
测试:
- 包的绝对路径:
/data/apk_download/tasks/packagename_v10.15.2_base.apk
2. 下载命令或者访问信息:
curl http://ab.moumentei.com/apk_download/tasks/packagename_v10.15.2_base.apk -L -vvv
按照上面的命令去执行,在执行的时候返回结果却是404,文件找不到。我一开始一直以为是因为我自己访问的url写错,所以核实了很长的时间,然后又怀疑自己是不是nginx对于下划线_不能识别,所以我将location更改如下:
location /download/ { root /data/apk_download; autoindex on; gzip on; gzip_types text/plain application/x-javascript text/css application/xml application/javascript; gzip_min_length 500; gzip_buffers 4 8k; }
然后继续执行上面的那个命令,结果还是依旧返回404。为此我再一次仔细核实了以前的文件下载服务器的配置信息,然后更改location配置信息如下:
location /apk_download/ { root /data/; autoindex on; gzip on; gzip_types text/plain application/x-javascript text/css application/xml application/javascript; gzip_min_length 500; gzip_buffers 4 8k; }
然后执行以下命令:
curl http://ab.moumentei.com/apk_download/tasks/packagename_v10.15.2_base.apk -L -vvv
执行之后,文件能够完全下载下来了。但是这个我有一个疑问,在官网上面没有找到相关信息,希望有比较清楚的大神能够告知:
文件的绝对路径是/data/apk_download/tasks/packagename_v10.15.2_base.apk,配置的location的root根目录是/data/apk_download,url正常访问应该是http://ab.moumentei.com/apk_download/tasks/packagename_v10.15.2_base.pak应该是没有问题,也不存在找不到文件的说法;在更改location的root根目录为/data,那么正常来说访问的url应该是http://ab.moumentei.com/apk_download/apk_download/tasks/packagename_v10.15.2_base.pak,比之前的url应该是多了一个apk_downlod,但是访问的结果还是404,返回文件找不到。使用旧的http://ab.moumentei.com/apk_download/tasks/packagename_v10.15.2_base.pak却是成功了,这个就是我不能理解的地方。
关于这个问题咨询了一下我的同事,他告诉我:
就是在 location /apk_download/ { ........ } 这里apk_download 代表了2个意思:一个是域名后面的接的url判断,若是域名后面接有/apk_download/则会跳到这个url下面;另外则是在根目录root下面data目录指定的文件目录。
所以才会在第一次配置的时候访问一直报错是404,按照这个说法的话在我第一次配置的是root /data/apk_download;那么我的访问拼接的路径应该是/apk_download/apk_download/tasks.... 这个目录,暂时还没有方法验证这个判断是否正确。在这里先记录下来。
原文地址:http://blog.51cto.com/11819159/2058642