前言
本篇文章的内容学习以及总结本应该是在昨天能完的。哎,奈何昨天本打算接着下载下Keepalived,学学nginx的高可用。本想到在下载Keepalived的时候差点被劝退了。我这用的是Ubuntu系统,可能版本也比较低。编译Keepalived的时候,总显示不能链接openssl库。换了个openssl版本也不行。不清楚下载openssl库的那个依赖的libnssl库为啥链接不到。在网上搜,改了半天多,依旧没成功。哎,自己太菜,没有办法了,只能换个系统重新开始了。于是,租了个云服务器,继续开始nginx的学习之旅。在租的centos8.2版本的云服务器上,轻松就把Keepalived下载上了。在下载Keepalived的时候,根据自己遇到的问题,也学到了,有时间也总结下。在这期间,自己也发现了一个可以自动编译安装Linux上软件的网站,在此先推给大家,可以用用,挺爽的,哈哈哈OneinStack
一、动静分离
动静分离介绍
Nginx动静分离,就是动态请求和静态请求分开,也可以理解成使用Nginx处理静态页面,Tomcat 处理动态页面。将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用服务器的请求。后台应用服务器只负责动态数据请求。
动静分离从目前实现角度来讲大致分为两种。
(1)纯粹把静态文件独立成单独的域名,放在独立的服务器上 (主流推崇的方案)
(2)动态跟静态文件混合在一起发布,通过Nginx来分开
毕竟凡事都有两面性,动静分离也是如此。如下是动静分离的优缺点:
优点: 分担负载,减轻web服务器的压力,适用于大负载。静态资源放置cdn,同时还可以通过配置缓存到客户浏览器中,这样极大减轻web服务器的压力。
缺点: 网络环境不佳时,ajax回应很慢,导致页面出现空白,出错处理会不好看。不利于网站SEO(搜索引擎优化),增加了开发复杂度。
动静分离目的
为了加快网站的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,来加快解析速度,提高请求的访问效率,降低原来单个服务器的压力,下面是动静分离的原理图。
动静分离的实现
通过location指定不同的后缀名实现不同的请求转发,也可以通过expires参数设置,使浏览器缓存文件的过期时间,从而减少与服务器之前的请求和流量。
Expires具体含义:给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量,也就是所谓的客户端缓存。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用Expires来缓存),假设一下,把这个Expires设置3d,表示在3天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码 200。
如下配置:
配置image、js、css等资源文件的路径和地址。然后设置缓存失效的时间。
#拦截静态资源
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
root static;
expires 30d;
}
完整的nginx.conf配置如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name localhost;
#拦截后台请求
location / {
proxy_pass http://localhost:81;
proxy_set_header X-Real-IP $remote_addr;
}
#拦截静态资源
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
root static;
expires 30d;
}
}
}
二、UR Rewrite
UR Rewrite介绍
三、防盗链
防盗链介绍
防盗链, 简单地说,就是某些不法网站未经许可,通过在其自身网站程序里非法调用其他网站的资源,然后在自己的网站上显示这些调用的资源,达到填充自身网站的效果。这一举动不仅浪费了调用资源网站的网络流量,还造成其他网站的带宽及服务压力吃紧,甚至宕机。
说白了,其实防盗链其实就是指定你的资源,可以通过那些服务器来被访问
防盗链的配置
首先在没有配置防盗链的情况下,location可以写成如下:
location ~* .*\.(gif|jpg|ico|png|css|svg|js)$ {
root /usr/local/nginx/static;
}
加上防盗链设置后如下:
location ~* .*\.(gif|jpg|ico|png|css|svg|js)$ {
root /usr/local/nginx/static;
valid_referers none blocked *.liuheming.com ;
if ($invalid_referer) {
return 403;
break;
}
access_log off;
}
valid_referers none blocked *.liuheming.com ; 其实就是白名单,允许文件链出的域名白名单
这样设置差不多就可以起到防盗链作用了,但其实,这样并不是彻底地实现真正意义上的防盗链!
valid_referers none blocked *.liuheming.com ;中
valid_referers 里多了“none blocked”
把“none blocked”删掉,改成
valid_referers *.liuheming.com
nginx彻底地实现真正意义上的防盗链完整的代码应该是这样的:
location ~* .*\.(gif|jpg|ico|png|css|svg|js)$ {
root /usr/local/nginx/static;
valid_referers *.liuheming.com ;
if ($invalid_referer) {
return 403;
break;
}
access_log off;
}
这样在浏览器直接输入图片地址就不会再显示图片出来了,也不可能会再右键另存什么的。
防盗链的基本命令
valid_referers none | blocked | server_names | strings ....;
none, 检测 Referer 头域不存在的情况。
blocked,检测 Referer 头域的值被防火墙或者代理服务器删除或伪装的情况。这种情况该头域的值不以
“http://” 或 “https://” 开头。
server_names ,设置一个或多个 URL ,检测 Referer 头域的值是否是这些 URL 中的某一个。
推荐一个零声学院免费公开课程,个人觉得老师讲得不错,
分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容,点击立即学习:服务器课程