目录
网页的加载顺序是先加载HTML相关的内容,然后解析HTML的内容,那些需要加载图片,那些需要加载文件,是逐步加载的,对于我们线上的图片等静态资源,经常会被其他网站盗用,外面可以我们请求到一个页面后,这个页面一般会再去请求其中的静态资源,这时候请求头中,会有一个refer字段,表示当前这个请求的来源,我们可以限制指定来源的请求才返回,否则就不返回,这样可以防止资源被盗用。
Referer理解
HTTP 协议中有一个用来表示“页面或资源”来源的“请求头”,这个请求头叫做 Referer --> Referer是表示请求是从哪个网址发出的
防盗链功能基于HTTP协议支持的 Referer 机制,通过Referer跟踪来源,对来源进行识别和判断
valid_referers none|server_name
设置有效的refer值
http://xxxx
)注意:
if ($invalid_referer)
中if后有个空格,不写就会报错
- nginx: [emerg] unknown directive "if($invalid_referer)" in
- /usr/local/nginx/conf/nginx.conf:27
这里设置nginx服务器中的img目录下的图片必须refer为http:192.168.174/134才能访问
- server {
- listen 80;
- server_name localhost;
-
- location / {
- proxy_pass http://xxx;
- }
-
- location /img{
- valid_referers http:192.168.174/134;
- if ($invalid_referer){#无效的
- return 403;#返回状态码403
- }
- root html;
- index index.html index.htm;
- }
-
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root html;
- }
- }
使用 curl 测试防盗链
- 1.# 安装 curl 命令
- yum -y install curl
-
- 2.# 测试,在 103 机器中访问 101
- curl -I http://192.168.44.101/img/logo.png
-
- -I:不带 Referer ,只是给我们返回响应的一些头信息。
-
- curl -e "http://baidu.com" -I http://192.168.44.101/img/logo.png
-
- -e:"http://baidu.com" 为 Referer,返回响应的一些头信息
设置盗链图片
将提示图片放在html/img/x.png,访问设置防盗链图片时,就返回这x.png张图
- location /img{
- valid_referers http:192.168.174/134;
- if ($invalid_referer){#无效的
- rewrite ^/ /img/x.png break;
- }
- root html;
- index index.html index.htm;
- }
高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间
Nginx的高可用指的是在一台Nginx宕机的情况下有其他Nginx去处理请求。
如果 nginx master 出现宕机,keepalived则会将服务切到 nginx slave上,保证业务不受影响,这样就可以避免 nginx 单机故障问题,以此来实现高可用
安装keepalived
yum install -y keepalived
修改keepalived配置
vrrp_instance
、authentication
、virtual_router_id
、virtual_ipaddress
这几个一样的机器,才算是同一个组里。这个组才会选出一个作为Master机器这里我们设置两台机器,分别下载好keepalived,然后进行配置
机器一:
- ! Configuration File for keepalived
-
- global_defs {
- router_id lb1 # 名字与其他配置了keepalive的机器不重复就行
- }
-
- vrrp_instance heyingjie {#vrrp实例名可以随意取
- state MASTER #只能有一个默认的Master,其他写BACKUP
- interface ens33 # ip addr查看下网卡名,默认时ens33
- virtual_router_id 51
- priority 100 # 多台安装了keepalived的机器竞争成为Master的优先级
- advert_int 1 #通信时间
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 192.168.200.16 #虚拟IP
- }
- }
机器二:
- ! Configuration File for keepalived
-
- global_defs {
- router_id lb2
- }
-
- vrrp_instance heyingjie {
- state BACKUP #只能有一个默认的Master,其他写BACKUP
- interface ens33
- virtual_router_id 51
- priority 50
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 192.168.200.16 #虚拟IP
- }
- }
通过命令ip addr
查看机器一的ip信息,可以看到虚拟IP