Nginx学习之静态文件服务器配置

在Java开发过程以及生产环境中,最常用的web应用服务器当属Tomcat,尽管这只猫也能够处理一些静态请求,例如图片、html、样式文件等,但是效率并不是那么尽人意。所以在生产环境中,我们一般使用Nginx代理服务器来处理静态文件,来提升网站性能。

基本配置

server {
        listen  80;
        server_name  file.52itstyle.com;
        charset utf-8;
        #root 指令用来指定文件在服务器上的基路径
        root /data/statics;
        #location指令用来映射请求到本地文件系统
        location / {
           autoindex on; # 索引
           autoindex_exact_size on; # 显示文件大小
           autoindex_localtime on; # 显示文件时间
        }
   }

重启Nginx服务:

nginx -s reload

访问文件服务,http://file.52itstyle.com/

设置密码

htpasswd命令是Apache的Web服务器内置工具,用于创建和更新储存用户名、域和用户基本认证的密码文件。

htpasswd(选项)(参数)

-c:创建一个加密文件;
-n:不更新加密文件,只将加密后的用户名密码显示在屏幕上;
-m:默认采用MD5算法对密码进行加密;
-d:采用CRYPT算法对密码进行加密;
-p:不对密码进行进行加密,即明文密码;
-s:采用SHA算法对密码进行加密;
-b:在命令行中一并输入用户名和密码而不是根据提示输入密码;
-D:删除指定的用户。

实例

htpasswd -bc passwd.db itstyle  123456

在目录下生成一个passwd.db文件,用户名itstyle,密码:123456,默认采用MD5加密方式。

在原有密码文件中增加下一个用户

htpasswd -b passwd.db  admin 123456

Nginx配置

server {
        listen  80;
        server_name  file.52itstyle.com;
        charset utf-8;
        root /data/share;
        location / {
           autoindex on; # 索引
           autoindex_exact_size on; # 显示文件大小
           autoindex_localtime on; # 显示文件时间
           auth_basic "请输入用户名密码";
           auth_basic_user_file /usr/local/openresty/nginx/passwd.db;
        }
   }

重启Nginx访问:

图片防盗链

如果服务器的图片被别的网站盗链,将影响服务器的带宽以及访问速度,这时我们就需要设置图片文件或视频文件的防盗链功能。

防盗链功能,简单来说就是你可以直接访问该资源,但是不能将我的资源链接放到你自己的服务器上让别人访问,尤其是图片或视频这种比较大的文件,容易导致服务器响应很慢。

要实现防盗链,需要了解HTTP协议中的请求头部的Referer头域和采用URL的格式表示访问当前网页或者文件的源地址。通过该头域的值,我们可以检测到访问目标资源的源地址。这样,如果我们检测到Referer头域中的值并不是自己站点内的URL,就采取组织措施,实现防盗链。需要注意是,由于Referer头域中的值可以被更改的,因此该方法不能完全阻止所有盗链行为。

server {
        listen  80;
        server_name  file.52itstyle.com;
        charset utf-8;
        #root 指令用来指定文件在服务器上的基路径
        root /data/statics;
        #location指令用来映射请求到本地文件系统
        location ~*^.+\.(gif|jpg|png|jpeg)$ {
              expires     30d;
              valid_referers none blocked  file.52itstyle.com;
              if ($invalid_referer) {
                 #return 403;
                  rewrite ^/ http://www.52itstyle.com/403.jpg;
              }
        }
   }

Nginx配置中有一个指令valid_referers,用来获取Referer头域中的值,并且根据该值的情况给Nginx全局变量$invalid_referer的值,如果Referer头域中没有符合valid_referers指令配置的值,$invalid_referer变量将会被赋值为1。

valid_referer指令的语法结构为:

valid_referers none | blocked | server_names | string ....;
none 检测Referer头域不存在的请求
blocked 检测Referer头域的值被防火墙或者代理服务器删除或伪装的情况。
这种情况下,该头域的值不以“http://”或者“https://”开头
server_names 设置一个或多个URL,检测Referer头域的值是否是这些URL中的某个。

重启Nginx服务,测试一下图片链接:http://file.52itstyle.com/NFS_C.png

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我的安全视界观

【安全测试】Android APP安全测试之敏感信息本地存储

66150
来自专栏惨绿少年

MongoDB的备份与恢复

1.1 MongoDB的常用命令 mongoexport / mongoimport mongodump / mongorestore      有以上两组命...

1.3K60
来自专栏Java工程师日常干货

理解数据库连接池底层原理之手写实现前言对数据库连接池的一点思考写一个迷你版数据库连接池

数据库连接池的基本思想是:为数据库连接建立一个“缓冲池”,预先在池中放入一定数量的数据库连接管道,需要时,从池子中取出管道进行使用,操作完毕后,在将管道放入池子...

7810
来自专栏拂晓风起

Flash:彻底理解crossdomain.xml、跨swf调用。

24330
来自专栏北京马哥教育

亲自动手写一个python库(二)

引言 经过上一节中所述,我们搭建好了一个Python环境用于库开发,我们在这一节真正开始搭建一个库,并将其发布。 项目文档结构 首先我们先构建出自己项目的文档...

37470
来自专栏Golang语言社区

Linux常用命令速查备忘

PS:备忘而已,详细的命令参数说明自己man 一. 启动,关机,登入,登出相关命令 [login] 登录 [logout] 登出 [exit] 登出 [shut...

40290
来自专栏python学习指南

python爬虫(二)_HTTP的请求和响应

HTTP和HTTPS HTTP(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收HTML页面的方法 HTTPS(Hyp...

545100
来自专栏IT 指南者专栏

今天花时间最多的两个小错误

微信公众号:compassblog 欢迎关注、转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1、配置Maven项目的pom.xml文件报错 (1)、...

29770
来自专栏北京马哥教育

工作汇报神技!用Python三步生成带有图表的word报表

最近在项目中做了一个生成并导出word报表的功能,在这里分享给大家。 经过查看ESPC原有的生成报表代码和网上查阅的一些方法,解决方案的思路如下: 1. 利用p...

57650
来自专栏程序员互动联盟

【专业技术】linux启动流程剖析

半年前,我写了《计算机是如何启动的?》,探讨BIOS和主引导记录的作用。 那篇文章不涉及操作系统,只与主板的板载程序有关。今天,我想接着往下写,探讨操作系统接管...

37670

扫码关注云+社区

领取腾讯云代金券