或许你很早前听人讲过什么反向代理啊,负载均衡这些听起来逼格很高的专业名词,然鹅在nginx 的世界中,要想实现这些东东,那简直是轻而易举的,没错,nginx 就是这么优秀!!!
1.nginx 实现反向代理
先附上 nginx 做反向代理官方文档地址:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass 。配置反向代理服务器,需要指定协议:http或https ,服务器地址可以是域名或者IP ,端口可选。也可以是本地套( 不在此讨论范围)。
配置如以下形式:
proxy_pass http://localhost:8000/uri/;
这里为了实验现象更加直观,直接将请求转发到另一个服务器上。
先看下在没配置反向代理前,正常访问服务器响应结果如下:
可以查看到 nginx 访问日志内容如下:
现在我们修改proxy.xiaomuxizi.conf (该虚拟主机配置)这个配置文件,加入反向代理配置。
主要加入以下配置:
proxy_pass http://132.232.94.250;
以上配置简单明了,直接将改网站访问请求转发到132.232.94.250 这台服务器。
让nginx 重载配置文件:
nginx -s reload
在刷新浏览器前,我们先在浏览器访问 132.232.94.250 这台服务器。
可以看到这台服务器响应的内容是这样子滴。
强制刷新浏览器( 注意一定是强制刷新,不然有可能被浏览器缓存起来了 )
可以查看得到两台服务器的访问日志
反向代理原理一般如下图所示:
深入可参考:https://www.cnblogs.com/Anker/p/6056540.html 这篇博客,写的蛮详细的。
2. nginx 实现负载均衡
最近迷上了nignx ,感觉小家伙比apache 好玩多了,嘿嘿,这里说下nginx 实现负载均衡,nginx 负载均衡策略有多种,这里暂只说下简单的轮询策略(更准确地来说影视是加权轮询策略),也是内置的负载策略。
老规矩 ,先附上官方英文文档:http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream 。
配置形式如下:
upstream backend {
server backend1.example.com weight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
server backup1.example.com backup;
}
注:upstream 指定定义在http 段中,在其他段中会报错。
默认地7个请求中,有5个会转发到 backend1.example.com ,1个转发到127.0.0.1:8080 这个,1个会转到/tmp/backend3 本地套。backup1.example.com 为备份服务器。
server : 用来定义服务器地址和可选参数。其中服务器地址可以为域名,也可以为IP地址或本地套,端口可选,不需要加协议( 即不需要写http或https) 。
weight : 表示权重,权重越大,分配到的请求越多,默认为1。
max_conns : 限制同时连接到代理服务器的最大活动连接数,默认0,即不做限制。
max_fails : 连接失败,最大尝试次数,默认1。
fail_timeout : 连接超时时间,超过该时间表示连接失败,默认10s。
backup : 指定备份服务器。
下面进入实践部分:
由于upstream 指令只能定义在http段中,这里换做虚拟机来代理服务器,去请求外网服务器来做演示。
upstream load_balancing{
server www.guopingzhang.top;
server 132.232.94.250;
}
重新加载nginx 配置
nginx -s reload
强制刷新浏览器(一定要强制刷新)
再次强刷
基本上每次的请求会平均地转发到不同的服务器上。