当前位置: 首页 > news >正文

企业高性能 Web 服务部署实践(基于 RHEL 9)

一、实验环境准备

1.1 系统要求

  • 操作系统:Red Hat Enterprise Linux 9(RHEL 9)

  • 内核版本:4.18+(可通过 uname -r 验证)

  • 网络:确保服务器可连接互联网(用于安装依赖和下载源码)。

1.2 安装基础依赖

# 安装编译工具和依赖库  
sudo dnf install -y gcc pcre-devel zlib-devel openssl-devel make wget
  • 说明:

    • gcc:C 语言编译器,用于编译 Nginx 源码。

    • pcre-devel:支持正则表达式功能(如 URL 重写)。

    • zlib-devel:支持 Gzip 压缩,减少传输数据量。

    • openssl-devel:支持 SSL/TLS 加密,实现 HTTPS 服务。

    • make:自动化构建工具,用于编译源码。

二、Nginx 源码编译安装

2.1 创建 Nginx 用户

# 创建nginx用户(禁止登录,仅用于运行服务)  
sudo useradd -r -s /sbin/nologin nginx

2.2 下载并解压源码

# 进入源码目录(统一存放源码的规范路径)  
cd /usr/local/src  # 下载Nginx源码(以1.24.0版本为例,可替换为最新稳定版)  
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.3 配置编译参数

./configure \
--prefix=/usr/local/nginx \          # 安装路径  
--user=nginx \                       # 运行Nginx的用户(需提前创建) 
--group=nginx \                      # 运行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 \     # 支持静态Gzip压缩(预压缩文件直接传输) 
--with-pcre \                        # 支持正则表达式(URL匹配、重写)  
--with-stream \                      # 支持TCP/UDP反向代理(如数据库代理)  
--with-stream_ssl_module \           # 支持TCP/UDP SSL加密  
--with-stream_realip_module          # 支持TCP/UDP场景获取真实IP

2.4 编译和安装

# 编译(可加-j参数启用多核心加速,如make -j 4)  
make && make install

2.5 创建 Systemd 服务文件

# 创建服务文件(便于系统管理Nginx生命周期)  
sudo vim /etc/systemd/system/nginx.service

服务文件内容

[Unit]  
Description=The NGINX HTTP and reverse proxy server  
After=syslog.target network-online.target  [Service]  
Type=forking  
PIDFile=/usr/local/nginx/logs/nginx.pid  
ExecStartPre=/usr/local/nginx/sbin/nginx -t  # 启动前检查配置文件语法  
ExecStart=/usr/local/nginx/sbin/nginx        # 启动命令  
ExecReload=/bin/kill -s HUP $MAINPID         # 平滑重载配置(不中断服务)  
ExecStop=/bin/kill -s QUIT $MAINPID          # 优雅关闭(处理完现有连接)  
PrivateTmp=true  [Install]  
WantedBy=multi-user.target

2.6 添加 Nginx 环境变量(系统级配置)

为避免仅当前用户生效,建议配置系统级环境变量:

将 nginx 可执行文件的路径添加到系统环境变量 PATH 中,就能直接使用nginx命令。

# 创建环境变量配置文件  
sudo vim /etc/profile.d/nginx.sh  # 写入内容:  
export PATH=$PATH:/usr/local/nginx/sbin  # 生效配置  
source /etc/profile.d/nginx.sh

2.7 启动 Nginx 并设置开机自启

# 重新加载Systemd配置(识别新服务)  
sudo systemctl daemon-reload  # 启动Nginx服务  
sudo systemctl start nginx  # 验证服务状态  
sudo systemctl status nginx  # 设置开机自启  
sudo systemctl enable nginx

三、Nginx 性能调优配置

3.1 高并发核心配置

# 编辑Nginx主配置文件  
sudo vim /usr/local/nginx/conf/nginx.conf

关键配置内容

worker_processes  auto;           # 自动匹配CPU核心数(1核心1进程,避免切换开销)  
worker_rlimit_nofile 100000;      # 每个工作进程最大文件句柄数(需系统支持)  events {worker_connections  65535;        # 每个进程支持的最大连接数  use epoll;                        # 启用epoll事件驱动(Linux高性能IO模型)  multi_accept on;                  # 一次接受多个新连接,减少系统调用  
}http {include       mime.types;         default_type  application/octet-stream;  sendfile        on;               # 启用sendfile(零拷贝,减少用户态/内核态切换)  tcp_nopush      on;               # 配合sendfile使用,批量发送数据  tcp_nodelay     on;               # 小数据不延迟发送(提升交互性)  keepalive_timeout  65;            # 长连接超时时间(减少握手开销)  
}

3.2 系统级限制调整(避免高并发瓶颈)

# 临时调整进程最大文件句柄数(当前会话生效)  
ulimit -n 100000  # 永久调整(重启生效)  
sudo vim /etc/security/limits.conf  
# 加入以下内容:  
* soft nofile 100000  
* hard nofile 100000  

3.3 性能测试方法

# 安装压测工具  
sudo dnf install -y httpd-tools  # 测试(10000总请求,1000并发,注意提前调整ulimit)  
ab -n 10000 -c 1000 http://172.25.254.60/  

四、反向代理与负载均衡配置

4.1 负载均衡核心配置

sudo vim /usr/local/nginx/conf/nginx.conf

配置内容

upstream backend {  server 172.25.254.61:8080 weight=3;  # 后端服务器A(权重3,接收75%流量)  server 172.25.254.62:8080;           # 后端服务器B(权重1,接收25%流量)  # 可选:添加健康检查  # server 172.25.254.63:8080 backup;  # 备用服务器(主服务故障时启用)  
}  server {  listen 80;  server_name 172.25.254.60;  location / {  proxy_pass http://backend;  proxy_set_header Host $host;                  # 传递原始主机名  proxy_set_header X-Real-IP $remote_addr;      # 传递客户端真实IP  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 记录代理链  }  
}

4.2 后端服务准备(测试用)

服务器 61

echo "Backend A (172.25.254.61)" > /root/index.html  
python3 -m http.server 8080 --bind 0.0.0.0  # 仅用于测试,生产环境需替换为正式服务  

服务器 62

echo "Backend B (172.25.254.62)" > /root/index.html  
python3 -m http.server 8080 --bind 0.0.0.0  

4.3 验证配置

# 检查配置语法  
nginx -t  # 平滑重载配置  
sudo systemctl reload nginx  # 测试负载均衡效果(多次访问观察返回内容)  
curl http://172.25.254.60  

五、动态内容处理(PHP-FPM 集成)

5.1 安装 PHP-FPM(需启用 EPEL 源)

# 启用EPEL源(RHEL默认源无php-fpm)  
sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm  # 安装PHP及FPM  
sudo dnf install -y php php-fpm

5.2 创建测试页面

echo "<?php phpinfo(); ?>" > /usr/local/nginx/html/index.php

5.3 配置 Nginx 支持 PHP

sudo vim /usr/local/nginx/conf/nginx.conf

配置内容

server {listen 80;server_name 172.25.254.60;# 静态文件处理location / {root   /usr/local/nginx/html;index  index.html index.php;}# PHP动态请求处理location ~ \.php$ {root           /usr/local/nginx/html;fastcgi_pass   127.0.0.1:9000;  # 转发至PHP-FPMfastcgi_index  index.php;include        fastcgi_params;# 定义PHP文件路径(必须正确,否则报404)fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;}
}

5.4 配置 PHP-FPM

# 编辑PHP-FPM配置(调整运行用户和监听地址)  
sudo vim /etc/php-fpm.d/www.conf  # 修改以下参数:  
listen = 127.0.0.1:9000  
user = nginx  
group = nginx  
  • 确保 listen 地址和端口与 Nginx 配置中的 fastcgi_pass 一致。

  • 如果用户不是 nginx,需修改为当前 Nginx 进程运行的用户(通常为 nginxwww-data)。

5.5 启动 PHP-FPM 并验证

sudo systemctl start php-fpm  
sudo systemctl enable php-fpm  # 测试PHP页面  
curl http://172.25.254.60/index.php  # 应返回PHP信息页

预期结果:

  • 返回PHP信息页面(phpinfo()输出),表示PHP-FPM和Nginx集成成功。

六、缓存与加速配置

6.1 启用代理缓存

sudo vim /usr/local/nginx/conf/nginx.conf

配置内容

# 定义缓存目录(levels:目录层级;keys_zone:内存区;max_size:最大磁盘空间)  
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;upstream backend_servers {server 172.25.254.61:80; server 172.25.254.62:80;     
}server {listen 80;server_name 172.25.254.60;location / {proxy_pass http://backend_servers;proxy_cache my_cache;                # 启用缓存proxy_cache_valid 200 302 10m;       # 成功响应缓存10分钟proxy_cache_valid 404 1m;            # 404响应缓存1分钟add_header X-Cache-Status $upstream_cache_status;  # 显示缓存状态(HIT/MISS)}
}

6.2 配置缓存目录权限

# 创建缓存目录并授权(确保Nginx可读写)  
sudo mkdir -p /var/cache/nginx  
sudo chown -R nginx:nginx /var/cache/nginx  

6.3 验证缓存效果

# 重载配置  
sudo systemctl reload nginx  # 测试缓存(首次MISS,后续HIT)  
curl -I http://172.25.254.60/  

  • 验证结果:

    缓存:响应头中出现 X-Cache-Lookup 表示缓存命中。

总结

本文基于 RHEL 9 环境,从源码编译安装 Nginx 开始,逐步实现了高性能 Web 服务的核心能力:

  1. 基础部署:通过源码编译定制 Nginx 功能,结合 Systemd 实现服务化管理;

  2. 性能调优:通过调整进程数、连接数、系统限制及 IO 模型,提升并发处理能力;

  3. 负载均衡:基于权重的流量分配,实现后端服务的负载分担与高可用;

  4. 动态处理:集成 PHP-FPM,支持动态内容生成;

  5. 缓存加速:启用代理缓存减少后端压力,提升响应速度。

实际生产环境中,还需结合 SSL 证书配置(HTTPS)、日志分析、监控告警等功能,进一步增强服务的安全性和可维护性。

http://www.lryc.cn/news/617924.html

相关文章:

  • Jupyter lab保姆级教程和自动补齐功能实现
  • VMware 安装Ubuntu server 20.04
  • IPCP(IP Control Protocol,IP控制协议)
  • Rust 库开发全面指南
  • 《C++中 type_traits 的深入解析与应用》
  • 10种经典学习方法的指令化应用
  • 使用docker compose 部署dockge
  • 训推一体 | 暴雨X8848 G6服务器 x Intel®Gaudi® 2E AI加速卡
  • 【k近邻】 K-Nearest Neighbors算法k值的选择
  • es基本概念-自学笔记
  • Java多线程并发控制:使用ReentrantLock实现生产者-消费者模型
  • Redis中的AOF原理详解
  • 在 Linux 中通过 yum 安装和使用 Nginx
  • OrbStack 入门教程:macOS 上的轻量级容器与虚拟机管理工具
  • vue+django 大模型心理学智能诊断评测系统干预治疗辅助系统、智慧心理医疗、带知识图谱
  • 基于8×8 DCT变换的图像压缩MATLAB实现
  • 云服务器部署SSM项目
  • Kubernetes生产环境健康检查自动化指南
  • 7.Java的继承
  • 北京朝阳区中小学生信息学竞赛选拔赛C++真题
  • 左子树之和
  • 【数据可视化-86】中国育儿成本深度可视化分析(基于《中国统计年鉴2023》数据):用Python和pyecharts打造炫酷可视化大屏
  • 矩阵游戏(二分图最大匹配)
  • (3万字详解)Linux系统学习:深入了解Linux系统开发工具
  • MCU中的存储器映射(Memory Map)
  • Docker 网络-单机版
  • 在 .NET Core 5.0 中启用 Gzip 压缩 Response
  • js异步操作 Promise :fetch API 带来的网络请求变革—仙盟创梦IDE
  • Qwen2.5-vl源码解读系列:ImageProcessor
  • Android14 QS编辑页面面板的加载解析