nginx是异步框架的web服务器,也可以用作反向代理,负载均衡以及作为缓存服务器
Nginx的主要特性
- 高并发,高性能
- 模块化设计
- 内存低消耗
- 热部署,热更新
- 内存低消耗
代理
正向代理![在这里插入图片描述](https://img-blog.csdnimg.cn/20200817194346585.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTc3NDczMg==,size_16,color_FFFFFF,t_70#pic_center)
反向代理
-
为服务端做代理,代替服务端接收客户端的请求
作用:-
保证内网的安全,公网作为访问地址,web服务器谁内网
-
负载均衡
-
负载均衡
upstream myserver{
server 127.0.0.1:8080;
server 172.17.0.2:80;
}
server {
listen 9001;
server_name localhost;
location / {
proxy_pass http://myserver;
root html;
index index.html index.htm;
}
}
负载均衡的默认几种方式
- 轮询(默认) upstream
- 权重 weight
- ip_hash 每个请求按访问ip的hash结果分配
- fair 第三方 按后端服务器的相应时间分配请求
- url_hash
动静分离
server {
listen 80;
server_name localhost;
location /image/ {
root /data/; #这样会在nginx的 data目录下找 image目录 /data/image/
autoindex on; #值是on时,访问为文件夹时,会对里面的文件进行展示
}
lication /www/ {
root /data/; #这样会在nginx的 data目录下找 www目录 /data/www/
}
location / {
proxy_pass http://192.168.1.12:8080 #将动态(不匹配静态路径的)转发给服务器
root html;
index index.html index.htm;
}
}
nginx 高可用
- nginx高可用是防止nginx挂掉后,服务器便崩了。给nginx配置一个备用nginx。
- 需要至少俩台nginx
- 需要keepalived
- 需要虚拟ip
keepalived主配置
global_defs {
notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个
XXX@XXX.com
}
notification_email_from miaoruntu@itcast.cn #指定发件人
#smtp_server XXX.smtp.com #指定smtp服务器地址
#smtp_connect_timeout 30 #指定smtp连接超时时间
router_id LVS_DEVEL #运行keepalived机器的一个标识(需要在hosts文件中添加 127.0.0.1的域名)
}
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh" ##监控脚本
interval 2 ##时间间隔,2秒
weight 2 ##权重
}
vrrp_instance VI_1 {
state MASTER #标示状态为MASTER 备份机为BACKUP
interface eth0 #设置实例绑定的网卡
virtual_router_id 51 #同一实例下virtual_router_id必须相同
priority 100 #MASTER权重要高于BACKUP 比如BACKUP为99
advert_int 1 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置认证
auth_type PASS #主从服务器验证方式
auth_pass 8888
}
track_script {
check_nginx #监控脚本
}
virtual_ipaddress { #设置vip
192.168.101.100 #可以多个虚拟IP,换行即可
}
}
检查nginx脚本文件
- 如果nginx停止,则杀死本机的keepalived进程
#!/bin/bash
# 如果进程中没有nginx则将keepalived进程kill掉
A=`ps -C nginx --no-header |wc -l` ## 查看是否有 nginx进程 把值赋给变量A
if [ $A -eq 0 ];then ## 如果没有进程值得为 零
service keepalived stop ## 则结束 keepalived 进程
fi
keepalived备份配置
global_defs {
notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个
XXX@XXX.com
}
notification_email_from XXX@XXX.com #指定发件人
#smtp_server XXX.smtp.com #指定smtp服务器地址
#smtp_connect_timeout 30 #指定smtp连接超时时间
router_id LVS_DEVEL #运行keepalived机器的一个标识
}
vrrp_instance VI_1 {
state BACKUP #标示状态为MASTER 备份机为BACKUP
interface eth0 #设置实例绑定的网卡
virtual_router_id 51 #同一实例下virtual_router_id必须相同
priority 99 #MASTER权重要高于BACKUP 比如BACKUP为99
advert_int 1 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置认证
auth_type PASS #主从服务器验证方式
auth_pass 8888
}
virtual_ipaddress { #设置vip
192.168.101.100 #可以多个虚拟IP,换行即可
}
}
nginx原理
master和worker
master进程主要用来管理worker进程,具体包括如下4个主要功能:
- 接收来自外界的信号。
- 向各worker进程发送信号。
- 监控woker进程的运行状态。
- 当woker进程退出后(异常情况下),会自动重新启动新的woker进程。
worker是如何进行工作的
- 多个worker进程之间是对等且相互独立的(所以不需要加锁),他们同等竞争来自客户端的请求。
- 一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。
- worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致。同时,nginx为了更好的利用多核特性,具有cpu绑定选项,我们可以将某一个进程绑定在某一个核上,这样就不会因为进程的切换带来cache的失效。