Nginx服务优化(七)网页压缩与防盗链
一、网页压缩
对于一些较大的网页,比如图片、视频等等,有时候我们会发现网页加载速度很慢,这个时候就需要对网页进行压缩来提高网页加载速度。而Nginx提供了gzip模块,可以对网页进行压缩。gzip是一种数据压缩格式,可以将文件用gzip进行压缩。Nginx的gzip模块可以对Web服务器的输出内容进行压缩,这样可以显著地降低传输量和传输时间,提高网页的加载速度。使用gzip模块之前要保证服务器上安装了gzip工具。
(1)gzip配置
Nginx的gzip模块默认是关闭的,要开启gzip需要在配置文件nginx.conf中通过gzip on来开启gzip模块。另外,还需要配置一些参数来确定压缩率等。
gzip on; #开启gzip
gzip_min_length 1k; #最小压缩文件大小
gzip_comp_level 2; #压缩级别
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
#gzip的mime类型,对不同的mime类型进行gzip压缩,压缩的类型可以自己设置
配置说明:
gzip on/off:是否开启gzip。
gzip_min_length:指定文件大小,超过这个大小的文件才进行gzip压缩。
gzip_types:指定需要gzip压缩的mime类型,可以指定多个,用空格分开。
gzip_comp_level:指定压缩级别,值范围1-9,压缩级别越高,压缩率越高,但也会消耗更多的CPU资源,具体级别可以根据实际情况进行调整。
(2)测试
配置好gzip后,可以使用curl进行测试:
curl -I -H "Accept-Encoding: gzip,deflate" http://localhost:80
上面的命令中,-I表示查看返回的HTTP头信息,-H "Accept-Encoding: gzip,deflate"表示告诉服务器客户端支持的压缩方式,服务器根据浏览器的请求头信息返回是否压缩的文件。如果服务器支持压缩,则返回:
Content-Encoding: gzip
二、防盗链
网站的图片、视频等资源是需要有版权的,如果没有版权就被盗用了,那么版权方就会非常愤怒。为此,我们需要对资源进行一定的保护,防止其被非法盗用。其中比较简单的一种方式就是防止其他网站盗用本站的图片、视频等资源。这个时候就需要用到Nginx的反盗链模块了。
(1)反盗链模块
Nginx的反盗链模块叫做HttpRefererModule,可以通过判断HTTP请求头中的Referer来判断该请求是否是来自本站。当请求中的Referer是本站时,就返回正确结果,否则就拒绝访问。
(2)配置反盗链
1.打开nginx.conf配置文件,在http模块中添加如下指令:
$ vi /usr/local/nginx/conf/nginx.conf
##加上:
http {
location / {
valid_referers none blocked example.com *.example.com;
if ($invalid_referer) {
return 403;
}
}
}
其中:
location:指定某个虚拟主机或者某个目录的特定设置。
valid_referers:规定允许的来源(Referer)列表。"none"表示无来源访问,“blocked”表示黑名单模式,表示拒绝特定的引用者。
如果是白名单模式,则可以将白名单都写入到这个指令内,例如:
valid_referers none blocked example.com *.example.com;
这个意思就是允许example.com及其所有子域名来访问,这个包括http、https和子域名,上例也可以写成
valid_referers none blocked;
这个表示所有请求都允许通过。
if:如果引用者来自不在白名单内的网域,则返回403。
2.第二步需要在server块中添加指令:
#vi /usr/local/nginx/conf/nginx.conf
##加上:
server {
...
if ($http_referer !~ "^(http://www\.your_domain\.com|http://your_domain\.com)") {
return 403;
}
}
其中:
if:根据Referer的值做出判断,判断不在白名单域名内的则return403,拒绝请求。
$http_referer:http请求头信息中的referer属性,将其复制给nginx变量$http_referer。
!~:如果$http_referer不匹配正则表达式,则为真,否则为假。
^(http://www\.your_domain\.com|http://your_domain\.com):表示我们的站点域名,这里写的是多个站点或者嵌套的站点时要用正则表达式匹配。
3.重启nginx服务。
$ sudo service nginx restart
总结:
以上文章我们介绍了Nginx的gzip模块和反盗链模块。对于大型网站而言,文件压缩和资源防盗是优化网站的非常重要的一部分。通过gzip模块可以减少网络传输量,提高网站的响应速度。通过反盗链模块则可以有效防止网站资源被盗用的情况发生,保护网站的权益。
