【Nginx 实战实验过程详解】
一、Nginx 源码编译安装与基础环境配置
1. 实验准备:安装编译依赖
Nginx 源码编译需依赖 GCC 编译器、正则库、压缩库、SSL 库等基础组件,需提前安装,避免编译过程中出现依赖缺失错误,执行以下命令安装:
# 安装核心编译依赖
dnf install -y gcc pcre-devel zlib-devel openssl-devel
# 安装辅助工具
dnf install -y wget tar vim net-tools
# 创建Nginx运行用户(无登录权限,提升安全性)
useradd -s /sbin/nologin -M nginx
2. 源码编译与安装
采用源码编译安装方式,可自定义安装路径、启用 / 禁用模块,适配企业级定制化需求,实验选用 Nginx 1.24.0 稳定版,步骤如下:
(1)下载并解压源码包
# 进入源码存放目录
cd /usr/local/src
# 下载官方源码包
wget https://nginx.org/download/nginx-1.24.0.tar.gz
# 解压源码包
tar zxf nginx-1.24.0.tar.gz
# 进入解压目录
cd nginx-1.24.0
(2)配置编译参数
通过./configure命令配置编译参数,核心指定安装路径、运行用户、启用核心模块,生产环境需保证编译参数与业务需求匹配,执行以下命令:
./configure \
--prefix=/usr/local/nginx \ # 核心安装路径
--user=nginx \ # 运行用户
--group=nginx \ # 运行用户组
--with-http_ssl_module \ # 启用HTTPS支持
--with-http_v2_module \ # 启用HTTP/2支持
--with-http_realip_module \ # 启用客户端真实IP透传
--with-http_stub_status_module \ # 启用Nginx状态监控
--with-http_gzip_static_module \ # 启用静态压缩优化
--with-pcre \ # 启用PCRE正则库支持
--with-stream \ # 启用四层TCP/UDP代理
--with-stream_ssl_module \ # 启用四层SSL加密
--with-http_sub_module # 启用内容替换模块
编译参数校验:执行完上述命令后,若最后输出「Configuration successful」,表示参数配置成功;若出现错误,根据提示补充缺失的依赖即可。
(3)编译并安装
# 编译(-j指定编译线程数,建议等于CPU核心数,提升编译速度)
make -j 4
# 安装
make install
3. 安装目录结构详解
Nginx 编译安装后,所有文件集中在/usr/local/nginx目录下,目录结构清晰,便于运维管理,核心目录及作用如下:
/usr/local/nginx/
├── conf/ # 所有配置文件目录,核心配置:nginx.conf
├── html/ # 默认Web根目录,包含默认首页和50x错误页
├── logs/ # 日志目录,核心日志:access.log(访问日志)、error.log(错误日志)、nginx.pid(进程PID文件)
└── sbin/ # 二进制可执行文件目录,核心程序:nginx(主程序)
4. 全局环境变量配置
将 Nginx 可执行文件路径加入系统 PATH 环境变量,实现全局调用nginx命令,无需输入完整路径,提升运维效率:
# 编辑用户环境变量配置文件
vim ~/.bash_profile
# 在文件末尾添加以下内容
export PATH=$PATH:/usr/local/nginx/sbin
# 使配置生效
source ~/.bash_profile
# 验证配置(任意目录执行以下命令,输出版本信息即成功)
nginx -v
5. Systemd 服务配置
将 Nginx 注册为 systemd 系统服务,实现通过systemctl命令进行启动、停止、重启、开机自启等操作,贴合 Linux 系统标准运维方式,步骤如下:
(1)创建 systemd 服务文件
vim /lib/systemd/system/nginx.service
(2)写入服务配置内容
[Unit]
Description=The NGINX HTTP and reverse proxy server # 服务描述
After=syslog.target network-online.target remote-fs.target nss-lookup.target # 启动依赖
Wants=network-online.target # 弱依赖
[Service]
Type=forking # 后台运行模式
PIDFile=/usr/local/nginx/logs/nginx.pid # PID文件路径
ExecStartPre=/usr/local/nginx/sbin/nginx -t # 启动前执行配置校验
ExecStart=/usr/local/nginx/sbin/nginx # 启动命令
ExecReload=/usr/local/nginx/sbin/nginx -s reload # 平滑重载配置
ExecStop=/bin/kill -s QUIT $MAINPID # 优雅停止命令
PrivateTmp=true # 独立临时目录
Restart=on-failure # 失败时自动重启
[Install]
WantedBy=multi-user.target # 开机自启级别
(3)生效服务并验证
# 重新加载systemd配置,使新服务生效
systemctl daemon-reload
# 启动Nginx服务
systemctl start nginx
# 设置开机自启
systemctl enable nginx
# 验证服务状态(输出active(running)即成功)
systemctl status nginx
# 验证端口监听(默认监听80端口,输出LISTEN即成功)
netstat -tulnp | grep nginx
6. Nginx 核心运维命令
掌握 Nginx 核心命令是日常运维的基础,所有命令均基于nginx主程序执行,核心命令如下,生产环境优先使用 systemd 命令,特殊操作使用原生命令:
# 查看版本信息
nginx -v
# 查看版本信息+编译参数(核心,用于确认启用的模块)
nginx -V
# 校验配置文件语法(修改配置后必执行)
nginx -t
# 平滑重载配置(修改配置后生效,无中断)
nginx -s reload
# 优雅停止(处理完当前请求后停止,无中断)
nginx -s quit
# 强制停止(立即停止,可能导致请求中断,不建议生产使用)
nginx -s stop
# 前台运行(适用于测试、容器环境)
nginx -g "daemon off;"
# 查看所有Nginx进程
ps -ef | grep nginx
二、Nginx 版本平滑升级与回滚实验
1. 实验目的
掌握 Nginx无业务中断的版本升级方法,实现生产环境下的版本更新;同时掌握升级失败后的快速回滚方法,保证服务的高可用性,是企业级 Nginx 运维的核心技能。
2. 实验环境准备
- 已安装并运行的旧版本:Nginx 1.24.0
- 待升级的新版本:Nginx 1.26.1
- 核心要求:新版本编译参数必须与旧版本完全一致,避免模块不兼容导致升级失败。
3. 平滑升级核心步骤
# 步骤1:下载并解压新版本源码包
cd /usr/local/src
wget https://nginx.org/download/nginx-1.26.1.tar.gz
tar zxf nginx-1.26.1.tar.gz
cd nginx-1.26.1
# 步骤2:配置编译参数(与旧版本完全一致,可通过nginx -V查看旧版本参数)
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-stream --with-http_stub_status_module
# 步骤3:仅编译不安装(避免覆盖旧版本配置)
make -j 4
# 步骤4:备份旧版本二进制可执行文件(核心,用于回滚)
cd /usr/local/nginx/sbin
cp nginx nginx.old.1.24.0
# 步骤5:替换新版本二进制文件(强制覆盖,保留文件属性)
\cp -f /usr/local/src/nginx-1.26.1/objs/nginx /usr/local/nginx/sbin/
# 步骤6:校验新版本配置(必执行,避免配置不兼容)
nginx -t
# 步骤7:向旧Master进程发送USR2信号,启动新版本Master进程(新旧进程共存)
kill -USR2 $(cat /usr/local/nginx/logs/nginx.pid)
# 步骤8:向旧Master进程发送WINCH信号,优雅停止旧Worker进程(旧连接处理完后退出)
kill -WINCH $(cat /usr/local/nginx/logs/nginx.pid.oldbin)
# 步骤9:验证升级结果(查看Server响应头的版本,输出1.26.1即成功)
curl -I localhost
4. 升级失败快速回滚步骤
若升级后出现服务异常、功能不兼容等问题,需立即回滚至旧版本,核心利用备份的旧版本二进制文件,实现快速回滚,步骤如下:
# 步骤1:恢复旧版本二进制文件
cd /usr/local/nginx/sbin
cp nginx.old.1.24.0 nginx
# 步骤2:向旧Master进程发送HUP信号,重启旧Worker进程
kill -HUP $(cat /usr/local/nginx/logs/nginx.pid.oldbin)
# 步骤3:向新版本Master进程发送QUIT信号,优雅停止新版本进程
kill -QUIT $(cat /usr/local/nginx/logs/nginx.pid)
# 步骤4:验证回滚结果(输出旧版本1.24.0即成功)
curl -I localhost
# 验证服务状态,确保无异常
systemctl status nginx
5. 实验核心注意事项
- 新版本编译参数必须与旧版本完全一致,否则会出现模块缺失、配置不兼容等问题;
- 升级前必须备份旧版本二进制文件,为回滚提供基础;
- 升级过程中,新旧进程会短暂共存,属于正常现象,旧 Worker 进程会处理完当前请求后优雅退出;
- 升级后需全面验证业务功能,包括静态资源、反向代理、负载均衡等,确保无异常。
三、Nginx 核心配置文件详解与基础优化
1. 主配置文件结构
Nginx 主配置文件为/usr/local/nginx/conf/nginx.conf,采用指令 + 指令块的配置格式,指令以分号结尾,指令块以{}包裹,核心分为 4 个层级,层级之间嵌套生效,结构如下:
# 1. 全局配置段(main):对整个Nginx实例生效,所有层级均继承该配置
user nginx nginx;
worker_processes 4;
error_log logs/error.log error;
pid logs/nginx.pid;
# 2. 事件驱动配置段(events):仅影响Nginx的事件处理机制,不涉及业务配置
events {
use epoll;
worker_connections 65535;
}
# 3. HTTP配置段:所有HTTP/HTTPS相关配置的父级,可嵌套多个Server块,所有Server块继承该配置
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 虚拟主机配置段(Server块):对应一个域名/IP,可配置多个,实现虚拟主机
server {
listen 80;
server_name localhost;
# 路径匹配配置段(Location块):匹配请求URI,实现精细化的请求处理,可配置多个
location / {
root html;
index index.html index.htm;
}
}
}
# 4. Stream配置段:四层TCP/UDP代理配置,可嵌套多个Server块,1.9+版本支持
stream {
server {
listen 3306;
proxy_pass 172.25.254.20:3306;
}
}
2. 高并发核心优化配置
针对 Linux 系统和 Nginx 自身进行优化,提升 Nginx 的并发处理能力,解决「Too many open files」「连接数受限」等问题,核心优化分为Nginx 配置优化和系统内核优化两部分。
(1)Nginx 配置优化(修改 nginx.conf)
# 全局段优化
worker_processes auto; # 自动匹配CPU核心数,最大化利用多核资源
worker_cpu_affinity 0001 0010 0100 1000; # 进程绑定CPU核心,避免上下文切换
worker_rlimit_nofile 65535; # 设置Worker进程最大打开文件数,突破系统默认限制
error_log logs/error.log warn; # 日志级别设为warn,减少日志写入开销
# 事件段优化
events {
use epoll; # 启用epoll事件驱动模型,适配Linux系统
worker_connections 65535; # 单个Worker进程最大并发连接数
accept_mutex on; # 开启连接竞争互斥锁,解决惊群问题
multi_accept on; # 单个Worker进程同时接受多个连接,提升连接处理效率
}
# HTTP段优化
http {
include mime.types;
default_type application/octet-stream;
sendfile on; # 启用sendfile零拷贝技术,提升静态资源传输效率
tcp_nopush on; # 开启TCP推模式,减少网络包数量
tcp_nodelay on; # 开启TCP无延迟,提升实时性
keepalive_timeout 65; # 长连接超时时间,单位秒
keepalive_requests 100; # 单个长连接最大处理请求数
client_max_body_size 10m; # 客户端最大请求体大小,避免大文件上传导致的异常
}
(2)Linux 系统内核优化(修改 /etc/security/limits.conf)
# 编辑系统限制配置文件
vim /etc/security/limits.conf
# 在文件末尾添加以下内容,提升系统最大打开文件数和最大进程数
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
# 使配置生效
ulimit -n 65535
3. 配置文件分离最佳实践
生产环境中,若所有配置均写在主配置文件nginx.conf中,会导致配置文件庞大、难以维护,最佳实践是采用「主配置文件 + 子配置文件」的方式,将虚拟主机、负载均衡等配置分离到独立的子配置文件中,通过include指令引入主配置文件。
(1)创建子配置文件目录
# 在conf目录下创建conf.d目录,用于存放所有子配置文件
mkdir /usr/local/nginx/conf/conf.d
(2)在主配置文件中引入子配置文件
修改/usr/local/nginx/conf/nginx.conf的 HTTP 段,添加include指令:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 引入conf.d目录下的所有.conf后缀的子配置文件
include conf.d/*.conf;
}
(3)子配置文件命名规范
子配置文件以「业务名称 / 功能名称 +.conf」命名,便于运维管理,例如:
- 虚拟主机配置:vhost_lee.conf
- 负载均衡配置:upstream_web.conf
- PHP 代理配置:php_fpm.conf
四、Nginx 企业级核心配置实战
1. 基于域名的虚拟主机配置
实现一个 Nginx 实例部署多个域名,每个域名对应独立的 Web 根目录和配置,是企业级 Nginx 最常用的配置之一,实验需求:配置域名lee.timinglee.org,指向自定义 Web 根目录/webdata/nginx/lee/html。
(1)创建 Web 根目录并添加测试文件
# 创建自定义Web根目录
mkdir -p /webdata/nginx/lee/html
# 添加测试首页
echo "Hello Nginx! Domain: lee.timinglee.org" > /webdata/nginx/lee/html/index.html
# 设置目录权限,避免权限不足导致403错误
chown -R nginx:nginx /webdata/nginx/
(2)创建子配置文件
vim /usr/local/nginx/conf/conf.d/vhost_lee.conf
(3)写入虚拟主机配置
server {
listen 80; # 监听80端口
server_name lee.timinglee.org; # 配置域名,多个域名用空格分隔
# 配置访问日志,独立日志文件便于问题排查
access_log logs/lee.timinglee.org_access.log main;
error_log logs/lee.timinglee.org_error.log warn;
# 根路径匹配,处理域名根请求
location / {
root /webdata/nginx/lee/html; # 自定义Web根目录
index index.html index.htm; # 默认首页
deny 192.168.1.100; # 禁止指定IP访问
allow all; # 允许其他所有IP访问
}
# 自定义404错误页
error_page 404 /404.html;
location = /404.html {
root /webdata/nginx/lee/error; # 错误页目录
index 404.html;
}
# 自定义50x错误页(500、502、503、504)
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /webdata/nginx/lee/error;
index 50x.html;
}
}
(4)校验配置并生效
# 校验配置文件语法
nginx -t
# 平滑重载配置,使新配置生效
nginx -s reload
(5)访问测试
配置本地 Hosts 解析(将lee.timinglee.org指向 Nginx 服务器 IP),通过浏览器或 curl 命令访问:
curl lee.timinglee.org
# 输出测试内容「Hello Nginx! Domain: lee.timinglee.org」即配置成功
2. Location 规则匹配实战
Location 用于匹配客户端的请求 URI,实现精细化的请求处理,是 Nginx 配置的核心,掌握 Location 的匹配语法和优先级,是实现复杂业务配置的基础。
(1)匹配语法与优先级
Location 的匹配语法为:location [ 修饰符 ] URI { ... },修饰符决定匹配规则,优先级从高到低依次为:=(精确匹配) > ^~(前缀匹配,跳过正则) > ~(正则匹配,区分大小写)/~*(正则匹配,不区分大小写) > 普通前缀匹配(无修饰符) > /(通用匹配,匹配所有未命中的请求)
(2)核心修饰符说明
=:精确匹配,仅当请求 URI 与配置的 URI 完全一致时才匹配,例如location = /index.html仅匹配http://domain/index.html;^~:前缀匹配,当请求 URI 以配置的 URI 为前缀时匹配,匹配成功后跳过后续所有正则匹配,提升效率;~:正则匹配,区分大小写,支持 PCRE 正则表达式;~*:正则匹配,不区分大小写,适用于文件后缀、路径匹配;- 无修饰符:普通前缀匹配,按配置的 URI 长度从长到短匹配;
/:通用匹配,所有未被其他 Location 匹配的请求均会匹配到该规则。
(3)企业级实战配置
server {
listen 80;
server_name lee.timinglee.org;
root /webdata/nginx/lee;
# 精确匹配:访问/logo.png时匹配,优先级最高
location = /logo.png {
root /webdata/nginx/lee/images;
expires 7d; # 设置浏览器缓存7天
}
# 前缀匹配:访问/images/开头的URI时匹配,跳过后续正则
location ^~ /images {
root /webdata/nginx/lee;
expires 30d;
allow 192.168.0.0/16;
deny all;
}
# 正则匹配:匹配所有图片后缀,不区分大小写
location ~* \.(gif|jpg|png|jpeg|webp)$ {
root /webdata/nginx/lee/static;
expires 15d;
}
# 正则匹配:匹配所有JS/CSS文件,不区分大小写
location ~* \.(js|css)$ {
root /webdata/nginx/lee/static;
expires 7d;
gzip on; # 开启压缩
}
# 普通前缀匹配:访问/abc开头的URI时匹配
location /abc {
root /webdata/nginx/lee;
index index.html;
}
# 通用匹配:匹配所有未命中的请求
location / {
root /webdata/nginx/lee/html;
index index.html;
}
}
3. 访问控制与防盗链配置
(1)基于账号密码的访问控制
为指定路径添加账号密码认证,限制未授权访问,基于 Nginx 原生的ngx_http_auth_basic_module模块实现,无需额外扩展。
步骤 1:安装 htpasswd 密码生成工具
dnf install -y httpd-tools
步骤 2:生成密码文件
# -c:创建新文件;-m:MD5加密;-b:直接指定密码
htpasswd -cmb /usr/local/nginx/conf/.htpasswd admin 123456
# 添加第二个用户(去掉-c,避免覆盖现有文件)
htpasswd -mb /usr/local/nginx/conf/.htpasswd lee 654321
# 设置密码文件权限,提升安全性
chmod 600 /usr/local/nginx/conf/.htpasswd
步骤 3:配置访问控制
server {
listen 80;
server_name lee.timinglee.org;
root /webdata/nginx/lee;
# 为/admin路径添加密码认证
location /admin {
root /webdata/nginx/lee;
index index.html;
auth_basic "Nginx Admin Auth"; # 认证提示语
auth_basic_user_file "/usr/local/nginx/conf/.htpasswd"; # 密码文件路径
}
}
(2)资源防盗链配置
禁止其他网站引用本站的图片、JS、CSS 等静态资源,避免带宽被盗用,基于 Nginx 原生的ngx_http_referer_module模块实现,核心通过校验Referer请求头判断请求来源。
server {
listen 80;
server_name lee.timinglee.org;
root /webdata/nginx/lee;
# 对图片资源配置防盗链
location ~* \.(gif|jpg|png|jpeg|webp)$ {
root /webdata/nginx/lee/images;
# 允许的请求来源:none(无Referer,直接访问)、blocked(Referer被屏蔽)、本站域名、百度搜索引擎
valid_referers none blocked server_names *.timinglee.org ~/.baidu/.;
# 非法来源,返回404错误
if ($invalid_referer) {
return 404;
# 可选:将盗链请求重定向至防盗链提示图
# rewrite ^/ http://lee.timinglee.org/anti_steal.png permanent;
}
}
}
4. Gzip 压缩与状态监控配置
(1)Gzip 压缩配置
启用 Gzip 压缩,减小响应数据的体积,提升客户端访问速度,降低服务器带宽消耗,基于 Nginx 原生的ngx_http_gzip_module模块实现,核心配置在 HTTP 段,全局生效。
http {
gzip on; # 启用Gzip压缩
gzip_comp_level 5; # 压缩级别,1-9,级别越高压缩比越大,CPU消耗越高,5为折中
gzip_min_length 1k; # 最小压缩文件大小,小于1k的文件不压缩
gzip_buffers 4 16k; # 压缩缓冲区大小
gzip_http_version 1.1; # 支持的HTTP协议版本
# 需要压缩的文件类型,按需配置
gzip_types text/plain text/html text/css application/javascript application/json image/png image/jpeg;
gzip_vary on; # 向响应头添加Vary: Accept-Encoding,告知浏览器启用压缩
gzip_proxied any; # 对反向代理的请求也进行压缩
}
(2)Nginx 状态监控配置
启用 Nginx 内置的状态监控页面,实时查看 Nginx 的运行状态(如活动连接数、总请求数、进程状态),是 Nginx 运维监控的核心,基于ngx_http_stub_status_module模块实现。
server {
listen 80;
server_name lee.timinglee.org;
# 配置状态监控页面路径
location /nginx_status {
stub_status; # 启用状态监控
auth_basic "Nginx Status Auth"; # 添加密码认证,避免未授权访问
auth_basic_user_file "/usr/local/nginx/conf/.htpasswd";
allow 192.168.0.0/16; # 仅允许内网IP访问
allow 127.0.0.1;
deny all; # 拒绝其他所有IP
}
}
状态页面核心指标说明
访问http://lee.timinglee.org/nginx_status,输入账号密码后,可查看以下核心指标:
- Active connections:当前活动连接数;
- accepts/handled/requests:Nginx 启动以来总接受连接数 / 总处理连接数 / 总请求数;
- Reading:正在读取客户端请求头的连接数;
- Writing:正在向客户端发送响应数据的连接数;
- Waiting:处于空闲长连接状态的连接数。
五、Nginx 反向代理与负载均衡实战
1. HTTP 七层反向代理配置
将客户端的 HTTP/HTTPS 请求转发至后端的 Web 服务器(如 Apache、Tomcat、PHP-FPM),实现前端统一入口,后端服务集群的架构,是企业级微服务架构的核心配置。
(1)单台后端服务器代理
实验需求:将www.timinglee.org的请求转发至后端 Apache 服务器(IP:172.25.254.30,端口:80)。
server {
listen 80;
server_name www.timinglee.org;
access_log logs/www_access.log main;
location / {
proxy_pass http://172.25.254.30:80; # 后端服务器地址
# 透传客户端真实IP至后端服务器
proxy_set_header X-Forwarded-For $remote_addr;
# 透传客户端请求的Host头
proxy_set_header Host $host;
# 透传客户端请求的协议
proxy_set_header X-Forwarded-Proto $scheme;
# 反向代理连接超时时间
proxy_connect_timeout 6s;
# 反向代理读取超时时间
proxy_read_timeout 60s;
# 启用反向代理缓冲区
proxy_buffering on;
proxy_buffers 4 16k;
}
}
(2)HTTP 七层负载均衡配置
实验需求:配置后端 Web 服务器集群(172.25.254.20:80、172.25.254.30:80),实现请求的负载均衡,基于 Nginx 原生的ngx_http_upstream_module模块实现。
核心调度算法
Nginx 内置多种负载均衡调度算法,生产环境可根据业务需求选择,主流算法如下:
- 轮询(默认):请求按顺序依次转发至后端服务器,负载分布均匀;
- 权重轮询(weight):为后端服务器设置权重,权重越高,接收的请求越多,适用于后端服务器性能不一致的场景;
- IP 哈希(ip_hash):根据客户端 IP 进行哈希计算,将同一客户端的请求始终转发至同一台后端服务器,实现会话保持;
- 最少连接(least_conn):将请求转发至当前连接数最少的后端服务器,适用于请求处理时间不一致的场景;
- URL 哈希(url_hash):根据请求 URI 进行哈希计算,将同一 URI 的请求始终转发至同一台后端服务器,实现缓存命中优化(需第三方模块支持)。
企业级配置示例
http {
# 定义后端服务器组,命名为webserver
upstream webserver {
server 172.25.254.20:80 weight=2 max_fails=3 fail_timeout=30s; # 权重2,失败3次标记为不可用,30s后重试
server 172.25.254.30:80 weight=1 max_fails=3 fail_timeout=30s; # 权重1
server 172.25.254.40:80 backup; # 备份服务器,主服务器均不可用时启用
# ip_hash; # 启用IP哈希,实现会话保持,注释则使用默认轮询
# least_conn; # 启用最少连接算法,按需开启
}
# 配置虚拟主机,代理至后端服务器组
server {
listen 80;
server_name www.timinglee.org;
access_log logs/www_access.log main;
location / {
proxy_pass http://webserver; # 代理至后端服务器组
# 透传客户端真实IP和Host头
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
# 后端服务器不可用时,返回503错误
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_connect_timeout 6s;
proxy_read_timeout 60s;
}
}
}
2. TCP/UDP 四层负载均衡配置
Nginx 1.9 + 版本通过stream模块实现TCP/UDP 四层负载均衡,突破 HTTP 七层代理的限制,支持数据库(MySQL、Redis)、中间件(Kafka、ZooKeeper)等非 Web 服务的代理与负载均衡,实验需求如下:
(1)MySQL TCP 负载均衡
将 3306 端口的 MySQL 请求转发至后端 MySQL 集群(172.25.254.20:3306、172.25.254.30:3306)。
# Stream段,四层代理核心配置
stream {
# 定义MySQL后端服务器组
upstream mysql_server {
server 172.25.254.20:3306 max_fails=3 fail_timeout=30s;
server 172.25.254.30:3306 max_fails=3 fail_timeout=30s;
}
# 配置四层代理服务,监听3306端口
server {
listen 172.25.254.10:3306; # 绑定Nginx服务器的内网IP,避免公网访问
proxy_pass mysql_server; # 代理至MySQL服务器组
proxy_connect_timeout 30s; # 连接超时时间
proxy_timeout 300s; # 代理超时时间
proxy_buffer_size 4k; # 代理缓冲区大小
}
}
(2)DNS UDP 负载均衡
将 53 端口的 DNS 请求(UDP 协议)转发至后端 DNS 服务器集群(172.25.254.20:53、172.25.254.30:53)。
stream {
# 定义DNS后端服务器组
upstream dns_server {
server 172.25.254.20:53;
server 172.25.254.30:53;
}
# 配置UDP协议的四层代理
server {
listen 53 udp; # 监听UDP 53端口
proxy_pass dns_server; # 代理至DNS服务器组
proxy_timeout 1s; # UDP超时时间
proxy_responses 1; # 期望接收的UDP响应报文数
}
}
六、Nginx+PHP-FPM 实战(LNMP 环境搭建)
实现 Nginx 与 PHP-FPM 的联动,搭建LNMP(Linux+Nginx+MySQL+PHP) 环境,处理 PHP 动态请求,是企业级 PHP 网站的主流架构,Nginx 通过 FastCGI 协议与 PHP-FPM 通信,核心基于ngx_http_fastcgi_module模块实现。
1. PHP-FPM 编译安装与配置
(1)安装 PHP 编译依赖
dnf install -y gcc libxml2-devel sqlite-devel libpng-devel libcurl-devel oniguruma-devel bzip2-devel systemd-devel
(2)编译安装 PHP 8.3.9(含 FPM 模块)
# 下载并解压PHP源码包
cd /usr/local/src
wget https://www.php.net/distributions/php-8.3.9.tar.gz
tar zxf php-8.3.9.tar.gz
cd php-8.3.9
# 配置编译参数,启用FPM模块
./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-fpm \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--with-curl \
--with-openssl \
--enable-mysqlnd \
--with-mysqli \
--with-pdo-mysql \
--with-png \
--with-zlib
#更多推荐



所有评论(0)