写在前面的话

在公司内部一般都会存在 FTP / SAMBA 这样类似的文件服务器,虽然这类的程序都可以对用户的权限进行控制,但我们有时候其实只需要一个简单的下载页面,类似软件仓库。用户不管在哪里打开网页就能直接下载那种。nginx 就能够直接完成这样的工作。

文件下载

我们这里的文件下载使用的是系统默认的页面和方法,如果你想要更好的体验直接跳到后面的:文件下载美化

前往 nginx 的 vhosts 目录创建配置文件:file-download.conf

server {
listen 10000;
server_name localhost; location ^~ /download {
charset utf-8;
alias /data/files/share;
# 目录索引和时间配置
autoindex on;
autoindex_exact_size on;
autoindex_localtime on; # 下载文件类型限制,我们这里允许常见的文档,压缩包下载
if ($request_filename ~* ^.*?\.(txt|log|pdf|doc|docx|xls|xlsx|ppt|pptx|rar|zip|tar.gz|tar.xz|bz2|iso)$ ) {
add_header Content-Disposition attachment;
}
} location / {
return 403;
}
}

我们新建了 /data/files/share 目录并上传了一些测试文件,直接访问:

访问 download:

界面非常的简陋和丑!此时下载测试:

点击文件直接就能够下载,但是对于我们没有配置下载类型的文件就无法下载,如我们打开图片:

变成了在线浏览。

文件下载美化

自带的文件下载页面非常的丑陋,所以一开始在 nginx 编译的时候我们专门编译了一个第三方模块:ngx-fancyindex

这个模块就是针对于下载进行美化的插件,感兴趣的可以去 GITHUB 查看该项目:

https://github.com/aperezdc/ngx-fancyindex

我们在前面 file-download.conf 的基础上修改新的配置:fancyindex-download.conf

server {
listen 10001;
server_name localhost; location ^~ /download {
charset utf-8;
alias /data/files/share;
# 目录索引和时间配置
fancyindex on;
fancyindex_exact_size on;
fancyindex_localtime on; # 下载文件类型限制,我们这里允许常见的文档,压缩包下载
if ($request_filename ~* ^.*?\.(txt|log|pdf|doc|docx|xls|xlsx|ppt|pptx|rar|zip|tar.gz|tar.xz|bz2|iso)$ ) {
add_header Content-Disposition attachment;
}
} location / {
return 403;
}
}

其实就是把默认的那三项 auto 改为了 fancy,访问测试:

这个插件还要个非常好的功能,自己写 CSS 覆盖掉它本身的 CSS 样式,比如我们在 /data/files/share 下面新增 style.css 文件:

a:link {
text-decoration: none;
color: green;
}

我们去掉链接的下划线,改变了字体颜色为绿色。此时在配置文件中增加:

server {
...
fancyindex_css_href "style.css";
...
}

此时重载  nginx 访问测试:

还有其它一些参数,感兴趣的可以去研究研究,写写自己的主题。

用户认证

谈到了文件下载我们就想到了一个安全问题,下载文件虽然不错,但是如果我们并不希望每个人都能下载,需要有账号的才能下载。

nginx 是自带认证功能的,auth basic module 是默认开放的:

1. 安装 httpd-tools,我们需要它生成用户:

yum -y install httpd-tools

2. 创建单独的认证用户,我这里是 admin:

# 创建用于存放用户文件的目录
mkdir /data/services/nginx/conf/user # 创建 admin 用户保存到 file-download-user.db 文件
htpasswd -c /data/services/nginx/conf/user/file-download-user.db admin

如图所示:

3. 在下载配置中添加认证:fancyindex-download.conf

server {
listen 10001;
...
location ^~ /download {
auth_basic "User Authentication";
auth_basic_user_file /data/services/nginx/conf/user/file-download-
user.db;
...
}
...
}

重载配置,访问:

如果不输入账户密码登录:

正确验证登录:

小结

我们这里做了文件下载,并为了安全我们提供了 nginx 本身的用户认证,总的来说都是相对比较实用的功能。

【06】Nginx:文件下载 / 用户认证的更多相关文章

  1. nginx 添加用户认证

    nginx 添加用户认证  nginx 配置文件添加: 配置代理添加用户认证:server {   listen       ;   server_name localhost;   location ...

  2. Nginx网站用户认证

    一.Nginx网站用户认证 用户认证:用户访问网页时需要输入一个用户名和密码才能打开网页. nginx的默认网页时安装目录下的html/index.html,配置文件在安装目录下的conf目录中的ng ...

  3. nginx 配置用户认证

    nginx 配置用户认证有两种方式: 1.auth_basic 本机认证,由ngx_http_auth_basic_module模块实现.配置段: http, server, location, li ...

  4. nginx配置用户认证

    location ~ .*admin\.php$ {             auth_basic "weifenglinux auth";             auth_ba ...

  5. nginx访问控制用户认证两种方式

    一.用户认证1.首先需要用http来生成密码文件即安装apache :yum install -y httpd 生成密码文件:htpasswd -c /usr/local/nginx/conf/htp ...

  6. LNMP配置——Nginx配置 —— 用户认证

    一.配置 再来创建一个新的虚拟主机 #cd /usr/local/nginx/conf/vhost #vi test.com.conf 写入: server { listen 80; server_n ...

  7. 三、Nginx设置用户认证

    要求:通过nginx服务端配置实现以下目标 访问web页面需要进行用户认证. 用户名为:tom,密码:123456 操作步骤, 更改配置文件 [root@client ~]# vim /usr/loc ...

  8. 06 django的用户认证组件

    1.用户认证组件 用户认证组件: 功能:用session记录登录验证状态 前提:用户表:django自带的auth_user 创建超级用户: python3 manage.py createsuper ...

  9. nginx用户认证与htpasswd命令

    最近在搭建ELK,然后ELK的kibana界面想添加一个访问限制,看到kibana有个插件x-pack,本来想用用,发现是收费的,就放弃了,然后就想着想配置下nginx的认证访问来实现简单的访问登陆. ...

随机推荐

  1. Jsp学习笔记(2)——页面导航、表单、EL表达式

    页面导航 有两种跳转页面的方法.重定向和请求转发 两者区别: 请求转发(forward) 重定向(rerect) 请求服务次数 1 2 是否保留第一次请求request范围的属性 保留 不保留 地址栏 ...

  2. c# winform 窗体失去焦点关闭(钩子实现)

    先来一个辅助类 using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Inte ...

  3. Docker是什么、为什么是一种趋势

    Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来.并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响.那么我就不需要专门运送水果的船和专门运 ...

  4. 用Python制作只属于你和ta的聊天渠道吧

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: Python应用宝典 PS:如有需要Python学习资料的小伙伴可 ...

  5. 树莓派4B到货开箱体验

    树莓派4B到货开箱体验 实不相瞒,喜欢这块板已经很久了,但是国内4GB内存的版本始终没货,.....等等等,终于到货了,迅雷不及眼耳之势赶紧下单...购买点亮开发板所需要的物件 顺便看到一个好看的外壳 ...

  6. Java正则表达式详细解析

    元字符 正则表达式使用一些特定的元字符来检索.匹配和替换符合规则的字符串 元字符:普通字符.标准字符.限定字符(量词).定位字符(边界字符) 正则表达式引擎 正则表达式是一个用正则符号写出来的公式 程 ...

  7. 微信小程序上拉加载——分页

    wxml: <view class="page"> <scroll-view class="imageViewCss_1" scroll-y= ...

  8. iOS开发证书那点事儿

    iOS开发是用Xcode作为开发工具,Xcode在安装之后就自带了模拟器(Simulator).模拟器是个好工具,它对用户没有任何要求,但是我们必须牢记一件事:开发出来的App最终是要在真机上执行,没 ...

  9. docker系列(三):docker容器

    1 引言 在前面博文中,我们介绍了镜像.如果说镜像犹如面向对象中的类,本节要说的容器就是由类实例化出来的对象了,有了类才可以创建容器. 先从拉取一个官方提供的ubuntu最新镜像: $ docker ...

  10. Python—内置三大装饰器(@staticmethod、@classmethod、@property)

    https://blog.csdn.net/weixin_42681866/article/details/83376484 https://blog.csdn.net/weixin_43265804 ...