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

相关推荐
Fcy6481 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满1 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠2 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
主机哥哥2 小时前
阿里云OpenClaw部署全攻略,五种方案助你快速部署!
服务器·阿里云·负载均衡
Harvey9032 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技3 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀3 小时前
Linux环境变量
linux·运维·服务器
zzzsde3 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
qq_297574674 小时前
Linux 服务器 Java 开发环境搭建保姆级教程
java·linux·服务器
聆风吟º5 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann