Nginx反向代理及负载均衡

反向代理(Reverse Proxy):

是指代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将服务器得到的结果返回给internet上请求连接的客户端;
Nginx反向代理及负载均衡

基本的反向代理:

location [option] URI {
proxy_pass    http://192.168.122.1/;
}

其中 option 包括:
= 路径精确匹配,只包含当前路径,不包含其它任何路径。
^~ 不做正则表达式元字符匹配,做逐个字符搜索匹配
~* 不区分大小写,元字符匹配
~ 区分大小写,元字符匹配
例:
location /forum/ {
proxy_pass http://192.168.122.1:8080/maiya/;
}
http://www.example.com/forum/http://192.168.122.1:8080/maiya/;
如果location的URI前没有任何操作符[op],上游服务器的URL中必须以"/"结尾或明确指定URI;否则nginx会将客户端输入的URI追加到上游服务器的URL上,导致访问异常。
如果location的URI是通过模式匹配定义的,其URI将直接被传递至上游服务器,而不能为上游服务器指定转换后的URI; 而且后端服务器URL中不能包含任何URI信息。

Nginx负载均衡

upstream 指令:
后端服务器组,可以定义多个
语法:

 upstream name { 
             server IP [option];
  }

name 是给后端服务器组起的名字,名字不能重复,花括号中列出后端服务器组中包含的服务器
默认情况下,某个服务器收到请求后,按照轮训调度(RR)策略选择组内服务器的请求
定义位置:
在http上下文的下方定义upstream
server:定义一个upstream服务器的地址,还可包括一系列可选参数
keepalive:每个worker进程为发送到upstream服务器的连接所缓存的个数;

1.upstream模块的负载均衡算法主要有三种(调度策略):

round-robin轮训 (默认): 每个请求按照时间顺序逐一分配到不同的后端服务器

ip_hash (哈希算法): 保持会话-每个访客固定一个后端服务器

least_conn (最少连接): 有的服务器负载较高,在这种情况下把请求转发给连接数较少的后端,能够达到更好的负载均衡的效果

2.upstream模块常用的指令有:

weight:权重; 按比例分发,可以根据服务器配置的高低来设置权重的大小

maxfails:最大失败连接次数,默认为1,失败连接的超时时长由fail_timeout指定;

failtimeout:等待请求的目标服务器发送响应的时长;

backup:用于fallback的目的,所有服务均故障时才启动此服务器,类似于LVS Sorry Server;

down: 暂停对该服务器的调度

注:当使用ip_hash时可以解决clientsession问题,但服务器状态不可使用weight和backup。

fair: 可以根据请求页面的大小和加载时间长短进行调度,使用第三方的upstream_fair模块
url_hash: 按请求的url的hash进行调度,从而使每个url定向到同一服务器,使用第三方的hash模块
例1:

     upstream backserver {
                    server 192.168.1.2 max_fails=3 fail_timeout=2;
                    server 192.168.1.3 max_fails=3 fail_timeout=2;
                    server 192.168.1.4 max_fails=2 fail_timeout=5 down;
                    server 127.0.0.1:8080 backup;
         }

同样upstream模块也能为非http类的应用实现负载均衡,如下面的示例定义了nginx为memcached服务实现负载均衡的目的。

upstream memcachesrvs {
server 192.168.122.85:11211;
server 192.168.122.86:11211;
}

如何正确获取客户端的IP地址?

在实际应用中,我们的程序可能需要获取用户的真实的IP地址,比如做异地登陆的判断,或者统计IP的访问次数等
(1).proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
#我们通常将真实的IP地址赋值给 X-Real-IP或者X-Forwarded-For,然后upstream服务器组中的程序通过这两个字段获取真实的客户端的IP地址
(2).有后端服务器上配置:
LogFormat "%{X-Real-IP}i ......."

Rewrite相关指令

rewrite的组要功能是实现RUL地址的重定向
Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的
默认参数编译nginx就会支持rewrite的模块,但是也必须要PCRE的支持

rewrite语法格式及参数语法说明:

Nginx反向代理及负载均衡

关键字:其中关键字error_log不能改变,表示开始进行rewrite匹配规则

正则:perl兼容正则表达式语句进行规则匹配

替代内容:将正则匹配的内容替换成replacement

flag标记:rewrite支持的flag标记

flag标记说明:

last #本条规则匹配完成后,继续向下匹配新的location URI规则

break #本条规则匹配完成即终止,不再匹配后面的任何规则

redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址

permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

例如:
Nginx反向代理及负载均衡

rewrite应用场景:

1.可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求。

2.为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。

3.网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的360buy.com会跳转到jd.com

4.根据特殊变量、目录、客户端的信息进行URL调整等

Nginx目录别名

Nginx是通过alias设置虚拟目录,实现虚拟路径功能
例如:
Nginx反向代理及负载均衡

防盗链问题

要实现防盗链,需要了解HTTP协议中的请求头的Referer头域,通过该头域的值,可以检测到访问目标资源的源地址.
这样,如果我们检测到Referer头域中的值并不是自己站点内的URL时就采取阻止措施,实现防盗链;
但是HTTP协议头都会可能被篡改,所以这种方法并不能完全阻止盗链行为;

Niginx中如何配置防盗链?

Nginx反向代理及负载均衡
实例:
Nginx反向代理及负载均衡

转载于:https://blog.51cto.com/13581826/2095210

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值