企业高性能 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-FPM
        fastcgi_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)、日志分析、监控告警等功能,进一步增强服务的安全性和可维护性。

相关推荐
G_H_S_3_7 分钟前
【网络运维】Linux:LNMP 项目实践
linux·运维·服务器·网络
Clownseven1 小时前
如何搭建私有Git服务器?Gitea安装与配置超详细教程 (替代GitHub/Gitee)
服务器·git·gitea
感觉不怎么会2 小时前
SIP - Centos 7 搭建freeswitch服务器
linux·服务器·centos
wdfk_prog2 小时前
[Linux]学习笔记系列 -- [arm][lds]
linux·运维·arm开发·笔记·学习
MUTA️3 小时前
服务器使用ADB调试手机
服务器·adb·智能手机
CAE虚拟与现实4 小时前
调度系统部署架构是什么样的呢?
linux·运维·服务器·架构·集群队列·计算节点
Fanmeang4 小时前
MPLS LDP概述
运维·网络·华为·路由·mpls·标签·ldp
小孙姐5 小时前
Linux-Day14.自动批量装机
linux·运维·服务器
稚辉君.MCA_P8_Java6 小时前
常见通信协议详解:TCP、UDP、HTTP/HTTPS、WebSocket 与 GRPC
服务器·tcp/ip·http·https·udp