1、nginx 中 location 应用实例
location 是 nginx 的精华,nginx 就是通过拦截到的请求去对配置好的 location 块(location block)进行请求代理的,location 就是用来具体配置代理路径的。
2、nginx反向代理应用实例
1>环境说明:centos7.4
192.168.129.128 proxy-server(nginx)
192.168.129.129 web-server(httpd)
2>准备测试web服务器环境
web-server安装httpd
[root@web-server ~]# yum install -y httpd
3>提供web测试页面
[root@web-server ~]# echo "<h1>web.test.com</h1>" > /var/www/html/index.html [root@web-server ~]# vim /etc/httpd/conf/httpd.conf ServerName www.example.com:80 //去掉该行注释
4>启动httpd服务
[root@web-server1 ~]# systemctl start httpd
[root@web-server2 ~]# systemctl start httpd
5>访问测试web-server服务器
6>配置 http 反向代理
[root@proxy-server ~]# vim /apps/nginx/conf/www.proxy.com.conf //该文件间接include指向/etc/nginx/nginx.conf中的httpd模块 server { listen 80; server_name www.proxy.com; location / { proxy_pass http://192.168.129.129; } } [root@proxy-server ~]# systemctl restart nginx
7>配置本地域名解析,访问测试
3、 nginx负载均衡配置实例
由于前面,nginx 只代理了后端一台服务器,但由于我们网站名气大涨访问的人越来越多一台服务器实在是顶不住,于是我们加了多台服务器,那么多台服务器又怎么配置代理呢,我们这里以两台服务器为案例,来配置 nginx 负载均衡。
1>环境说明:centos7.4
192.168.129.128 balanced-server(nginx)
192.168.129.129 web-server1(httpd)
192.168.129.130 web-server2(httpd)
2>准备web测试环境,提供测试页面,启动服务
web-server1、web-server2分别安装httpd
[root@web-server1 ~]# yum install -y httpd
[root@web-server1 ~]# echo "<h1>web1.test.com</h1>" > /var/www/html/index.html [root@web-server1 ~]# vim /etc/httpd/conf/httpd.conf ServerName www.example.com:80 //去掉该行注释
[root@web-server1 ~]# systemctl start httpd
[root@web-server2 ~]# yum install -y httpd [root@web-server2 ~]# echo "<h1>web2.test.com</h1>" > /var/www/html/index.html [root@web-server2 ~]# vim /etc/httpd/conf/httpd.conf ServerName www.example.com:80 //去掉该行注释
[root@web-server1 ~]# systemctl start httpd
3>访问测试web-server服务器
4>配置nginx负载均衡
[root@balanced-server ~]# vim /apps/nginx/conf/www.balanced.com.conf //该文件间接include指向/etc/nginx/nginx.conf中的httpd模块 #设定负载均衡的服务器列表
upstream test.net { ip_hash; server 192.168.129.129:80; server 192.168.129.130:80; } server { listen 80; server_name www.balanced; location / { proxy_pass http://test.net; } } [root@balanced-server ~]# systemctl restart nginx
注意请先停掉配置的其他server虚拟主机,以防产生冲突;
upstream 是 Nginx 的 HTTP Upstream 模块,这个模块通过一个简单的调度算法来实现客户端 IP 到后端服务器的负载均衡。在上面的设定中,通过 upstream 指令指定了一个负载均衡器的名称 test.net。这个名称可以任意指定,在后面需要用到的地方直接调用即可。
5>配置本地域名解析,访问测试
停掉web-server1,再进行访问测试
[root@web-server1 ~]# systemctl stop httpd
6>拓展:upstream 支持的负载均衡算法
nginx 的负载均衡模块目前支持 4 种调度算法,下面进行分别介绍,其中后两项属于第三方调度算法。
(1)轮询(默认),每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响。Weight 指定轮询权值,Weight 值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下。
upstream test.net { ......; server 192.168.129.129:80 weight=1; //该server有1/3的访问概率 server 192.168.129.130:80 weight=2; //该server有2/3的访问概率 }
(2)ip_hash,每个请求按访问 IP 的 hash 结果分配,这样来自同一个 IP 的访客固定访问一个后端服务器,有效解决了动态网页存在的 session 共享问题。
(3)fair,这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx 本身是不支持 fair 的,如果需要使用这种调度算法,必须下载 Nginx 的upstream_fair 模块。
(4)url_hash,此方法按访问 url 的 hash 结果来分配请求,使每个 url 定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx 本身是不支持 url_hash 的,如果需要使用这种调度算法,必须安装 Nginx 的 hash 软件包。
7>upstream 支持的状态参数
在 HTTP Upstream 模块中,可以通过 server 指令指定后端服务器的 IP 地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。
常用的状态有:
down,表示当前的 server 暂时不参与负载均衡。
backup,预留的备份机器。当其他所有的非 backup 机器出现故障或者忙的时候,才会请求backup 机器,因此这台机器的压力最轻。
max_fails,允许请求失败的次数,默认为 1。当超过最大次数时,返回 proxy_next_upstream模块定义的错误。
fail_timeout,在经历了 max_fails 次失败后,暂停服务的时间。max_fails 可以和 fail_timeout一起使用。
max_fails,允许请求失败的次数,默认为 1。当超过最大次数时,返回 proxy_next_upstream模块定义的错误;fail_timeout,在经历了 max_fails 次失败后,暂停服务的时间。max_fails 可以和 fail_timeout一起使用,进行健康状态检查。再配置一个backup,防止所有的服务器都不能提供服务。
注意:当负载调度算法为 ip_hash 时,后端服务器在负载均衡调度中的状态不能是 weight和backup。