Nginx防盗链和nginx高可用及Keepalived实战
Nginx配置防盗链
防盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终手用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的流量和点击量。受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益。
nginx防盗链配置
为了模拟盗链,在这里让102为服务站点,103为网关服务器,101访问103进行盗链。
101的conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream httpds{
server 192.168.252.103:80;
}
server {
listen 80;
server_name 192.168.252.101;
location / {
proxy_pass http://httpds;
# root html;
# index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
访问 101  如果不想被盗链,可以对网关服务器103做如下配置:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://192.168.252.102:8080;
}
location /img{
root /usr/local/nginx/html/resource;
index index.html index.htm;
}
location /1{
valid_referers 192.168.252.103; #valid_referers 指令,配置是否允许 referer 头部以及允许哪些 referer 访问。192.168.8.102不是ip而是域名(去掉http:// 前缀)
if ($invalid_referer) { # 注意这里if后要加空格
return 403; ## 返回错误码
}
root /usr/local/nginx/html/resource;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
效果如下: 
valid_referers解释
可以同时携带多个参数,表示多个 referer 头部都生效。 参数值
- none:允许没有 referer 信息的请求访问,即直接通过url访问。
- blocked:请求头Referer字段不为空(即存在Referer),但是值可以为空(值被代理或者防火墙删除了),并且允许refer不以“http://”或 “https://”开头,通俗点说就是允许“http://”或"https//"以外的请求。
- server_names:若 referer 中站点域名与 server_name 中本机域名某个匹配,则允许该请求访问
- 其他字符串类型:检测referer与字符串是否匹配,如果匹配则允许访问,可以采用通配符*
- 正则表达式:若 referer 的值匹配上了正则,就允许访问
invalid_referer 变量
nginx高可用及Keepalived实战
高可用配置
高可用场景及解决方案
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。所以,Keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。
keepalived服务的三个重要功能:
- 管理LVS负载均衡软件
- 实现LVS集群节点的健康检查中
- 作为系统网络服务的高可用性(failover)
安装keepalived
yum install -y keepalived
安装成功的截图如下: 
keepalived实战
keepalived的配置文件在如下位置:
/etc/keepalived
在该实战中,101为主nginx,102为备用机,首先需要修改101和102的keepalived.conf配置
101的keepalived.conf配置
! Configuration File for keepalived
global_defs {
router_id LB_102
}
vrrp_instance VI_102 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.252.200
}
}
使用systemctl start keepalived启动keepalived  查看ip发现多了虚拟ip192.168.252.200 interface ens33这里的ens33需要和以下位置对应: 
102的keepalived.conf配置
! Configuration File for keepalived
global_defs {
router_id LB_101
}
vrrp_instance VI_102 {
state BACKUP
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.252.200
}
}
使用systemctl start keepalived启动keepalived  测试是否配置成功访问http://192.168.252.200/ 
关闭101的机器  再次访问 
|