香港服务器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/s | 14,200 req/s | +398% |
| WordPress首页(动态,无缓存) | 82 req/s | 98 req/s | +20% |
| WordPress首页(+Varnish缓存) | 2,100 req/s | 12,000 req/s | +471% |
| 空载内存占用 | 120MB | 28MB | -77% |
| 100并发时内存占用 | 380MB | 95MB | -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 的独立站,无需升级服务器配置。