Nginx配置文件下载
背景:假设WEB目录为/nginx/wwwroot,web访问路径为http://abc.com/,现在需要当url为http://abc.com/download/***.tar的时候,下载其他目录下的文件。
环境:默认vhost.conf配置如下
server {
listen 80;
listen [::]:80;
server_name localhost;
limit_conn perip 7;
location / {
root /nginx/wwwroot;
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
break;
}
index index.php index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location ~ \.php$ {
root /nginx/wwwroot;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
方式1:反向代理(缺点:需要多开放一个端口)
server {
listen 8099;
root /mnt/nandflash/;
location / {
autoindex on;
autoindex_exact_size on;
autoindex_localtime on;
charset utf-8,gbk;
}
}
location /download/ {
proxy_pass http://127.0.0.1:8099/;
}
方式2 (缺点:需要通过http://abc.com/nandflash/**.zip访问)
location ~ /nandflash {
root /mnt;
if ($request_filename ~* ^.*?\.(tar|zip)$){
add_header Content-Disposition: 'attachment';
add_header Content-Type application/octet-stream;
}
}
方式3 虚拟目录
location ~ /download/(.*)\.(tar|zip)$ {
alias /mnt/nandflash/$1.$2;
}
以上3中方法,理论上应该有文件夹权限的问题,但我环境没碰到,本人就没管了,算是个坑吧。
下面方式是网上很多文章中提到的办法,但在我的环境下,没有效果。
location ~ /download {
alias /mnt/nandflash/;
autoindex on;
autoindex_exact_size on;
autoindex_localtime on;
charset utf-8,gbk;
}
location ~ ^/mnt/nandflash/(.*)$ {
add_header Content-Disposition "attachment;filename=$1";
}