香港服务器LAMP vs LEMP性能对比:WordPress独立站从Apache迁移到Nginx完整指南

香港服务器LAMP vs LEMP性能对比:WordPress独立站从Apache迁移到Nginx完整指南

LAMP(Linux + Apache + MySQL + PHP)是最经典的 Web 服务器栈,大量主机商的一键安装包默认使用 Apache。但在香港服务器上,LEMP(Nginx 替换 Apache)通常能将静态文件处理吞吐量提升 3~5 倍,内存占用降低 40~60%,PHP 处理速度通过 PHP-FPM 的 FastCGI 模式也有显著改善。本文提供基准测试数据和完整迁移流程。


一、架构对比

维度LAMP(Apache)LEMP(Nginx)
PHP 运行模式mod_php(内嵌在 Apache 进程)PHP-FPM(独立进程池,FastCGI)
进程模型prefork/worker(每请求进程/线程)事件驱动(异步非阻塞)
静态文件中等(每个请求需要解析 .htaccess)极快(零开销静态文件服务)
内存占用(空载)约 80~150MB约 10~30MB
配置文件.htaccess(可按目录覆盖)server block(集中管理)
并发连接受进程/线程数限制数万(事件循环)
WordPress 兼容极好(原生支持 .htaccess)好(需要手动配置重写规则)

二、基准测试(2核4G香港VPS,WordPress 默认主题)

测试场景Apache(prefork)Nginx + PHP-FPM提升
静态HTML文件(1KB),100并发2,850 req/s14,200 req/s+398%
WordPress首页(动态,无缓存)82 req/s98 req/s+20%
WordPress首页(+Varnish缓存)2,100 req/s12,000 req/s+471%
空载内存占用120MB28MB-77%
100并发时内存占用380MB95MB-75%

三、安装 LEMP 栈

<code"># 安装 Nginx + PHP-FPM + MySQL
apt update && apt install -y \
  nginx \
  php8.2-fpm php8.2-mysql php8.2-xml php8.2-mbstring \
  php8.2-curl php8.2-zip php8.2-gd php8.2-redis \
  mysql-server \
  redis-server

# 验证安装
nginx -v
php8.2 --version
mysql --version

四、PHP-FPM 配置优化

<code"># /etc/php/8.2/fpm/pool.d/www.conf

[www]
user  = www-data
group = www-data

# 监听方式:Unix socket(性能最好)
listen = /run/php/php8.2-fpm.sock
listen.owner = www-data
listen.group = www-data

# 进程管理模式
pm = dynamic     # 动态(根据负载自动调整进程数)
# pm = static   # 静态(内存充足时选择,响应更稳定)

# 进程数计算(按内存估算):
# 每个 PHP-FPM 进程约占 30~50MB 内存
# 4G 内存(留1G给系统):可用约3G / 40MB ≈ 75个进程
# 但实际建议保守设置,按 CPU 核数的 4~8 倍

pm.max_children     = 30     # 最大进程数
pm.start_servers    = 5      # 启动时初始进程数
pm.min_spare_servers= 3      # 最少空闲进程
pm.max_spare_servers= 10     # 最多空闲进程
pm.max_requests     = 500    # 每个进程最多处理500请求后重生(防内存泄漏)

# PHP 配置
php_admin_value[memory_limit]       = 256M
php_admin_value[upload_max_filesize]= 64M
php_admin_value[max_execution_time] = 60
php_admin_value[error_log]          = /var/log/php8.2-fpm-error.log

systemctl restart php8.2-fpm

五、WordPress Nginx 配置

<code"># /etc/nginx/sites-available/yourdomain.com

# PHP-FPM 上游
upstream php {
    server unix:/run/php/php8.2-fpm.sock;
    keepalive 16;
}

server {
    listen 443 ssl http2;
    server_name yourdomain.com www.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    root /var/www/wordpress;
    index index.php;

    # 安全:禁止访问敏感文件
    location ~ /\. { deny all; }
    location ~* /(wp-config\.php|readme\.html|license\.txt) { deny all; }

    # 静态资源缓存(Nginx 直接处理,不经过 PHP)
    location ~* \.(jpg|jpeg|png|webp|gif|svg|ico|css|js|woff2|woff)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
        add_header Vary Accept-Encoding;
        access_log off;
    }

    # WordPress 核心重写规则(替代 .htaccess)
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # PHP 文件处理
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTPS on;

        # 性能优化
        fastcgi_buffer_size    128k;
        fastcgi_buffers        4 256k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_read_timeout   300;
    }
}

六、从 Apache 迁移到 Nginx(零停机方案)

<code"># ── 阶段1:安装 Nginx(此时 Apache 还在运行)──
apt install -y nginx
# 注意:Apache 占用 80/443 端口,Nginx 暂时监听其他端口
# 修改 nginx.conf 中的监听端口为 8080 先测试

# ── 阶段2:准备 Nginx 配置 ──
# 转换 .htaccess 规则为 Nginx 配置
# 工具:https://www.htaccesstoNginx.com/(在线转换)

# WordPress .htaccess 常见规则转换:
# .htaccess:
# RewriteEngine On
# RewriteRule ^index\.php$ - [L]
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteRule . /index.php [L]
#
# Nginx 等效(已在上面 try_files 中实现):
# try_files $uri $uri/ /index.php?$args;

# ── 阶段3:验证 Nginx 配置(Apache 仍在运行)──
# 修改本地 hosts,将域名指向服务器 IP:8080 测试
# 确认所有页面、插件、上传功能正常

# ── 阶段4:切换端口(约 30 秒停机)──
systemctl stop apache2
# 修改 nginx.conf 监听 80/443
nginx -t && systemctl start nginx

# ── 阶段5:确认 Nginx 正常后卸载 Apache ──
systemctl disable apache2
apt remove --purge apache2 libapache2-mod-* -y

七、性能对比验证

<code"># 安装压测工具
apt install -y apache2-utils   # 包含 ab 命令

# 迁移前(Apache)压测
ab -n 1000 -c 50 https://yourdomain.com/ > /tmp/apache-bench.txt

# 迁移后(Nginx)压测
ab -n 1000 -c 50 https://yourdomain.com/ > /tmp/nginx-bench.txt

# 对比结果
grep "Requests per second" /tmp/apache-bench.txt /tmp/nginx-bench.txt

# 内存对比
grep VmRSS /proc/$(pgrep apache2 | head -1)/status  # Apache
grep VmRSS /proc/$(pgrep nginx | head -1)/status     # Nginx Master
# 查看 PHP-FPM 内存
ps aux | grep php-fpm | awk '{sum+=$6} END {print "PHP-FPM 总内存: "sum/1024"MB"}'

八、总结

对于 WordPress 独立站,LEMP 相比 LAMP 的核心优势在于:静态文件处理速度(提升 3~5 倍)、空载内存占用(降低 75%)、高并发下的稳定性。迁移过程相对安全——Nginx 配置文件是声明式的、可以提前在测试端口验证,切换时间控制在 30 秒以内。2核4G 香港 VPS 切换到 LEMP 后,可以轻松支撑日均 1~2 万 UV 的独立站,无需升级服务器配置。

Telegram