Nginx配置高可用的集群
Nginx
1.Nginx反向代理
-
既然是反向代理,那么什么是正向代理,当一个用户向访问谷歌浏览器,我通过在浏览器中配置代理服务器(比如www.zxdl.com)通过代理服务器去访问谷歌浏览器。
-
而反向代理是,其实客户端对代理无感知,客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后再返回客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴漏的是代理服务器地址。隐藏真实服务器地址。
2.负载均衡
- 我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上改成将请求分发多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
3.动静分离
- 动态资源和静态资源分开部署,把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。
4.nginx安装
-
安装nginx前需要安装一些依赖
1.pcre依赖安装 wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz tar -xvf pcre-8.37.tar.gz cd pcre-8.37/ # 检查,如果抱错:configure: error: You need a C++ compiler for C++ support. 请执行:yum install -y gcc gcc-c++ ./configure # 安装 make && make install # 查看安装是否完成:pcre-config --version # yum 安装 openssl zlib # yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
-
安装nginx
https://www.runoob.com/linux/nginx-install-setup.html
5.nginx常用命令
# 查看版本好
/usr/sbin/nginx -v
# 启动
/usr/sbin/nginx
# 停止
/usr/sbin/nginx -s stop
# 重新加载配置
/usr/sbin/nginx -s reload
6.nginx配置
- 全局块:主要影响nginx服务器整体运行配置指令
- events块:影响nginx与用户网络连接
- http块:
6.1全局块
worker_processes 1; #它可以有效提高并发处理,根据CPU核心数,e.g:双核4线程可以设置为4
worker_connections #单个工作进程可以允许同时建立连接的数量。默认:1024。它与内存和操作系统级别的‘进程最大可打开文件数’
6.2events块
1.connections不是随便设置的,而是与两个指标有重要关联,一是内存,二是操作系统级别的“进程最大可打开文件数”。
2.内存:每个连接数分别对应一个read_event、一个write_event事件,一个连接数大概占用232字节,2个事件总占用96字节,那么一个连接总共占用328字节,通过数学公式可以算出100000个连接数大概会占用 31M = 100000 * 328 / 1024 / 1024,当然这只是nginx启动时,connections连接数所占用的nginx。
3.进程最大可打开文件数:进程最大可打开文件数受限于操作系统,可通过 ulimit -n 命令查询,以前是1024,现在是65535,
nginx提供了worker_rlimit_nofile指令,这是除了ulimit的一种设置可用的描述符的方式。 该指令与使用ulimit对用户的设置是同样的效果。此指令的值将覆盖ulimit的值,如:worker_rlimit_nofile 20960;
设置ulimits:ulimit -SHn 65535
6.3http块
- http块,server块
7.Nginx配置实例-反向代理
- 当用户浏览器访问192.168.1.1 就会反向代理到 http://127.0.0.1:8080
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name 192.168.1.1;#访问ip
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
proxy_pass http://127.0.0.1:8080
}
...
}
# 当用户浏览器访问192.168.1.1 就会反向代理到 http://127.0.0.1:8080
- 根据不同路径访问,当访问 127.0.0.1:9001/edu/将转发到http://127.0.0.1:8001,当访问 127.0.0.1:9001/vod/将转发到http://127.0.0.1:8002,
server {
listen 9001;
server_name localhost;
location ~/edu/ {
proxy_pass http://127.0.0.1:8001;
}
location ~/vod/ {
proxy_pass http://127.0.0.1:8002;
}
}
- 负载均衡。浏览器访问http://192.168.1.1/edu/a.html 负载均衡效果,平均分配8080和8081
# 负载均衡配置

- 动静分离
- 静态资源放在独立服务器上。通过nginx转到静态服务器。通过expires可以设计浏览器缓存时间。它会对比服务器该文件最后更新时间的变化,如果没有变化,则不从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码200。
location /www/ {
root /data/; #访问data目录下静态文件
autoindex on;# 它会列出当前文件下所有静态资源
}
# 当你输入 http://192.168.1.1/xxxx/a.html
location /xxx/ {
root /data/; #访问data目录下静态文件
}
# 直接返回a.html
7.Nginx配置高可用的集群
-
一台主服务器一台从服务器
-
需要一个软件keepalived
对外暴漏一个虚拟ip,当主服务器挂了,会将虚拟IP转从服务器。
- 准比工作
1.准备2台服务器
2.在两台服务器安装nginx
3.在两台服务器安装keepalived
yum install 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.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL# 唯一值,服务器名字可在vi /etc/hosts中配置,如 127.0.0.1 LVS_DEVEL
}
# 检测脚本 和权重参数,判断nginx是否活着
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2 #检测脚本执行间隔
weight 2 #设置当前服务器权重
}
// 虚拟ip配置
vrrp instance VI_1 {
state MASTER # 主服务器为MASTER,备份服务器BACKUP
interface ens33 # 要在哪个网卡绑定你虚拟主机名字
virtual_router_id 51# 主,备机的virtual_router_id必须相同
priority 100 #主,备机取不同的优先级,主机值较大,备份机较小
advert_int 1# 每隔1秒,进行心跳
# 权限校验
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.11.50 # 虚拟ip地址绑定,当然可以绑定多个
}
}
- nginx_check.sh 检查nginx是否还活着
#! /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
- 从服务器更改 虚拟ip配置即可
state BACKUP # 主服务器为MASTER,备份服务器 BACKUP
priority 90 # priority小于主服务器
- 启动nginx 主服务器和备份服务器
- 启动keepalived
systemctl start keepalived.service
- 测试
1.在浏览器输入虚拟ip也就是上面设置的192.168.11.50
2.通过ip a 查看虚拟ip是否绑定
# 当把主服务器停止 再从浏览器访问虚拟ip,按理来说是可以访问的
./nginx -s stop #停止主服务器
# 浏览器也可以正常访问。说明切换了备份服务器。
8.nginx机制

- 一个 master和多个woker工作的好处
- 可以使用nginx -s reload热部署,利用nginx进行热部署
- 每个work是独立进程,如果其中一个woker出现问题,其他woker独立的,继续进行争抢,实现请求过程,不会造成服务中断
- nginx使用io多路复用,Windows无这种机制。
- 关于连接数
根据cpu数量设置worker
发送请求占用多少个woker连接数???要么2个,要么4个
连接 + 返回
work支持最大连接数: cpu核数 乘以最大连接数:比如4个worker 每个worker支持1024连接数 那么就是4*1024
worker支持最大并发数????
4*1024除以2 或 4, 但也不绝对,支持最大并发数,应该用如下公式
- 普通静态访问最大并发数:worker_connections * worker_processes/2
- 而如果是HTTP作为反向代理,最大并发数量是worker_connections * worker_processes/4
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库