介绍
- Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
- Nginx作为负载均衡服务:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务对外进行服务。
作为邮件代理服务:Nginx 同时也是一个非常优秀的邮件代理服务(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。 - Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。
负载均衡原理
- 客户端向反向代理发送请求,接着反向代理根据某种负载机制转发请求至目标服务器(这些服务器都运行着相同的应用),并把获得的内容返回给客户端,期中,代理请求可能根据配置被发往不同的服务器。
常见的几种负载均衡策略
- 默认的负载均衡配置
http {
upstream myr {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myr;
}
}
}
- 上例中,有3个应用实例分别运行在srv1-srv3。当不显示指定负载均衡方法时,默认为round-robin。所有请求都被代理转发至myr服务器组,并根据负载均衡方法来分发请求。
- 轮询(默认)
- 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream backserver {
server 192.168.43.14;
server 192.168.43.15;
}
- 指定权重
- 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream backserver {
server 192.168.43.14 weight=8;
server 192.168.43.15 weight=10;
}
- IP绑定 ip_hash
- 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream backserver {
ip_hash;
server 192.168.43.14:88;
server 192.168.43.15:80;
}
健康检测
-
nginx反向代理实现包含服务器健康检查。如果来自特定服务器的响应失败,报错,nginx将标记该服务器为failed,一段时间内尽量避免选择此服务器作为随后请求的分发服务器。
-
max_fails机制设置fail_timeout期间,和服务器沟通失败的连续重试次数,默认为1.当设置为0时,不做服务器健康检测。fail_timeout定义了服务器被标记为failed的时长。fail_timeout时间间隔过后,nginx将开始使用活动客户端请求来探测服务器,如果探测成功则标记服务器为活动服务器。
安装
- 点击下面超链接
- nginx的安装及其配置
案例展示
- 四台虚拟主机:关闭firewalld selinux ,server3和server4开启httpd
server1 192.168.43.10(配置nginx)
server2 192.168.43.2 (测试实验效果)
server3 192.168.43.3(RS)
server4 192.168.43.4(RS)
- 配置一个上游服务,访问www.myr.club,会轮询访问两台后端服务器
vim /usr/local/nginx/conf/nginx.conf
更改配置文件- 做出下图中的改动
- 实验结果测试;
- 在测试主机中主机名解析
vim /etc/hosts
- 我在server3和server4的默认发布页面中分别写入了RS3,RS4,用于测试
- 在server2中用浏览器访问www.myr.club
- 配置了两个上游服务,以不同的负载均衡算法访问后端
vim /usr/local/nginx/conf/nginx.conf
更改配置文件- 做出下图中的改动
- 实验结果:
- 给server2中配置主机解析
- vim /etc/hosts
- 用浏览器分别访问 www.app1.club和www.app2.club.
- app1轮询访问server3和server4
- app2一直访问server3
- 配置了两个上游服务,访问后端服务器中的不同目录中的内容
vim /usr/local/nginx/conf/nginx.conf
更改配置文件- 做出下图中的改动
- 结果测试
- 在server3中创建/var/www/html/app1目录,并写入index.html文件
- 在server4中创建/var/www/html/app2目录,并写入index.html文件
[root@server3 conf]# mkdir /var/www/html/app1
[root@server3 conf]# cd /var/www/html/app1
[root@server3 app1]# echo "<h1>Hello,server3</h1>" > index.html
[root@server4 conf]# mkdir /var/www/html/app2
[root@server4 conf]# cd /var/www/html/app2
[root@server4 app1]# echo "<h1>Hello,server4</h1>" > index.html
- 在server2中进行主机解析,步骤同上
- 用浏览器分别访问www.app1.club/app1和www.app2.club/app2
配置文件详解
#nginx进程,一般设置为和cpu线程数一样
worker_processes 1;
events {
#单个负载应用进程的最大并发链接数
worker_connections 1024;
}
http {
#连接超时时间,单位是秒
keepalive_timeout 65;
#防止DDOS攻击,每秒限制1个连接访问
#limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
#limit_conn_zone $binary_remote_addr zone=addr:10m;
#weight 权重 max_fails 失败次数 fail_timeout 失败超时
#30秒内连接失败两次将认为该服务不可用
#配置上游服务器1(就是负载均衡需要分发的服务器)
upstream app1_server {
server 192.168.43.3 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.43.4 weight=1 max_fails=2 fail_timeout=30s;
}
#配置上游服务器2(就是负载均衡需要分发的服务器)
upstream app2_server {
server 192.168.43.3 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.43.4 weight=1 max_fails=2 fail_timeout=30s;
}
#配置负载均衡服务器
server {
#监听端口
listen 80;
#监听地址(ip/域名)
server_name www.app1.com;
#/拦截所有
location / {
proxy_pass http://app1;
proxy_connect_timeout 1;#连接应用超时
proxy_read_timeout 180;
proxy_send_timeout 180;
index index.html index.htm;
}
}
#配置负载均衡服务器
server {
#监听端口
listen 80;
#监听地址(ip/域名)
server_name www.app2.com;
#/拦截所有
location / {
proxy_pass http://app2;
proxy_connect_timeout 1;#连接应用)超时
proxy_read_timeout 180;
proxy_send_timeout 180;
index index.html index.htm;
}
}
}