Nginx基本概念
什么是Nginx
是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好
Nignx专为性能优化而发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50000个并发连接数
反向代理
- 正向代理
在客户端(游览器)配置代理服务器,通过代理服务器进行互联网访问
- 反向代理
我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器ip地址。
负载均衡
单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原来请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡
动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
Nginx常用命令和配置文件
常用命令
使用nginx操作命令前提条件:必须进入/usr/local/nginx/sbin中
- 查看nginx版本号
nginx -v
- 启动nginx
./nginx
- 关闭nginx
nginx -s stop
- 重新加载nginx
nginx -s reload
配置文件
nginx配置文件位置
/usr/local/nginx/conf/nginx.conf
nginx配置文件组成
nginx配置文件有三部分组成
- 全局块
从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令
比如worker_processes 1;
值越大,可以支持的并发处理量也越多
- events块
events块涉及的指令主要影响nginx服务器与用户的网络连接
比如worker_connecitions 1024;
表示支持的最大连接数
- http块
nginx服务器配置中最频繁的部分
http块也可以包括http全局块、server块
Nginx配置实例1-反向代理
实例一
实现效果
打开游览器,在游览器地址栏输入地址www.123.com,跳转到linux系统tomcat主页面中
具体配置
- 在windows系统的host文件进行域名和ip对应关系的配置
192.168.183.139 www.123.com
- 修改nginx的conf文件
实例二
- 实现效果
使用nginx反向代理,根据访问的路径跳转到不同端口的服务中
访问edu 跳转到8080
访问vod 跳转到8081
- 准备工作
启动两个tomcat容器,一个为8080,一个为8081
创建对应的文件夹edu和vod及测试页面
- 具体配置
Nginx配置实例2-负载均衡
- 实现效果
游览器输入地址http://192.168.183.139/edu/a.html,负载均衡效果,平均到8080和8081端口中
- 准备工作
运行两台tomcat,8081和8080
在webapps下创建edu文件夹,在edu下创建a.html
- 在nginx配置文件中进行负载均衡的配置
在http中:
在server中:
- nginx分配服务器策略
- 轮询(默认)
每个请求按照时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除- weight
代表权重,与访问比率成正比,用于后端服务器性能不均的情况- ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题- fair
按后端服务器的响应时间来分配请求,响应时间短的优先分配
Nginx配置实例3-动静分离
什么是动静分离
准备工作
- 在linux系统中准备静态资源,用于进行访问
具体配置
- 在nginx配置文件中进行
Nginx配置高可用集群
什么是nginx高可用
- 需要两台nginx服务器
- 需要keepalived
- 需要虚拟Ip
准备工作
- 需要两台服务器192.168.17.129和192.168.17.131
- 在两台服务器装nginx
- 在两台服务器装keepalived
yum install keepalived -y
查看是否安装
rpm -q -a keepalived
位置:/etc
完成高可用配置(主从配置)
- 主服务器keepalived配置(/etc/keepalived/keepalived.conf)
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.17.129
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script "/usc/local/src/nginx_check.sh"
interval 2 #(检测脚本执行的间隔)
weight 2
}
vrrp_instance VI_1 {
state MASTER # 备份服务器上将MASTER改为BACKUP
interface ens33 # 网卡
virtual_router_id 51 # 主、备机的virtual_router_id必须相同
priority 100 # 主、备机取不同的优先级,主机值较大、备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 # VRRP 虚拟地址
}
}
- 主服务器脚本文件(/usc/local/src/nginx_check.sh)
- 修改/etc/hosts文件(与keepalived中配置router_id相同)
127.0.0.1 LVS_DEVEL
#!/bin/bash
A=`ps -C nginx -no-header | wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header | wc -l` -eq 0];then
killall keepalived
fi
fi
- 从服务器keepalived配置(/etc/keepalived/keepalived.conf)
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.17.131
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script "/usc/local/src/nginx_check.sh"
interval 2 #(检测脚本执行的间隔)
weight 2
}
vrrp_instance VI_1 {
state BACKUP # 备份服务器上将MASTER改为BACKUP
interface ens33 # 网卡
virtual_router_id 51 # 主、备机的virtual_router_id必须相同
priority 90 # 主、备机取不同的优先级,主机值较大、备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 # VRRP 虚拟地址
}
}
- 从服务器脚本文件与主服务器相同(/usc/local/src/nginx_check.sh)
Nginx原理
- 一个master和多个woker有好处
可以使用nginx -s reload 热部署,利用nginx进行热部署操作
每个woker是独立的进程,如果其中的一个woker出现问题,其他woker独立的,继续进行争抢,实现请求过程,不会造成服务中断
- 设置多少个woker合适
Nginx同Redis类似都采用了io多路复用机制,woker数和服务器的cpu数相同是最为适宜的
- 连接数 worker_connection
发送请求,占用woker两个或四个连接数
nginx有一个master,有四个woker,每个woker支持最大的连接数是1024,支持的最大并发数为:普通的静态访问最大并发数是:woker_connections * woker_processes / 2
而如果是HTTP作为反向代理来说,最大并发数量应该是woker_connections * woker_processes / 4