在 2GB 内存的服务器上运行 WordPress,核心思路是减少 PHP 进程数、优化数据库查询、启用缓存层、限制资源消耗。以下是经过验证的关键配置方法(按优先级排序):
一、Web 服务器与 PHP 优化(Nginx + PHP-FPM)
✅ Nginx 配置要点
# nginx.conf 或站点配置中
worker_processes auto;
worker_rlimit_nofile 65535;
location ~ .php$ {
fastcgi_pass unix:/run/php/php8.1-fpm.sock; # 根据实际版本调整
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
# 关键:限制单个请求最大执行时间 & 内存
fastcgi_read_timeout 60s;
fastcgi_send_timeout 60s;
}
# 静态资源缓存(图片/CSS/JS)
location ~* .(jpg|jpeg|png|gif|ico|css|js|woff|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
access_log off;
}
✅ PHP-FPM 优化(www.conf 或 pool.d/*.conf)
; 使用 ondemand 模式(最省内存)
pm = ondemand
pm.max_children = 4 ; 2GB 服务器建议 ≤4(避免 OOM)
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 500 ; 防止内存泄漏累积
; 限制单进程资源
php_admin_value[memory_limit] = 256M
php_admin_value[max_execution_time] = 60
php_admin_flag[display_errors] = off
php_admin_flag[log_errors] = on
💡 为什么用
ondemand?
dynamic模式会常驻多个子进程,2GB 下极易触发 Swap 甚至 OOM Killer。ondemand仅在请求时启动进程,空闲后自动回收。
二、WordPress 核心优化
1. 禁用后台更新检查 & 心跳
添加至 wp-config.php:
define('WP_CRON', false); // 改用系统 cron 调度
define('DISABLE_WP_CRON', true);
// 禁用文章修订版(节省 DB 空间)
define('WP_POST_REVISIONS', 3);
define('AUTOSAVE_INTERVAL', 120);
// 禁用后台插件/主题文件编辑
define('DISALLOW_FILE_EDIT', true);
// 禁用 REST API 非必要端点(若无需移动端 API)
add_filter('rest_enabled', '__return_false');
add_filter('rest_jsonp_enabled', '__return_false');
✅ 替代方案:用 systemd 定时任务调用 WP-Cron:
# /etc/cron.d/wp-cron
*/15 * * * * root wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
2. 精简插件与主题
- 删除所有未使用插件(尤其 SEO、备份类重复功能)
- 使用轻量主题(如 GeneratePress、Astra)
- 禁用
wp_head()多余输出:remove_action('wp_head', 'wp_generator'); remove_action('wp_head', 'rsd_link'); remove_action('wp_head', 'wlwmanifest_link'); remove_action('wp_head', 'adjacent_posts_rel_link_wp_head');
三、数据库优化(MySQL/MariaDB)
✅ my.cnf 配置(/etc/mysql/my.cnf 或 /etc/my.cnf.d/server.cnf)
[mysqld]
innodb_buffer_pool_size = 512M ; 占物理内存 25%~30%
innodb_log_file_size = 64M
max_connections = 50 ; 配合 PHP-FPM pm.max_children=4
query_cache_type = 0 ; MySQL 8+ 已弃用,MariaDB 可用但慎用
sort_buffer_size = 256K
read_buffer_size = 128K
join_buffer_size = 128K
tmp_table_size = 32M
max_heap_table_size = 32M
# 关键:关闭慢查询日志(生产环境)
slow_query_log = 0
long_query_time = 2
⚠️ 注意:
innodb_buffer_pool_size不要超过总内存的 40%,预留空间给 OS 和 Web 服务。
✅ WordPress 数据库优化
- 定期清理:安装 WP-Optimize 插件(手动运行 > 自动)
- 开启 SQL 查询缓存(仅 MariaDB 10.5+ 推荐):
SET GLOBAL query_cache_type = 1; SET GLOBAL query_cache_size = 32M;
四、缓存层(必须部署!)
✅ 对象缓存 + 页面缓存组合方案
| 组件 | 推荐方案 | 内存占用 |
|---|---|---|
| Redis | 对象缓存(WP Object Cache) | ~50MB |
| OPcache | PHP 字节码缓存 | ~30MB |
| Page Cache | Redis 驱动(Redis Object Cache + LiteSpeed Cache / WP Rocket) | 动态 |
安装 Redis + 配置
sudo apt install redis-server # Ubuntu
sudo yum install redis # CentOS
# 修改 redis.conf
maxmemory 128mb
maxmemory-policy allkeys-lru
bind 127.0.0.1
WordPress 启用 Redis 对象缓存
- 安装插件:Redis Object Cache(作者 Till Krüssig)
- 或在
wp-config.php添加:define('WP_CACHE', true); - 安装 LiteSpeed Cache(免费且支持 Redis 页面缓存)或 W3 Total Cache(需手动配置)
📌 优势:将频繁查询(如选项、用户数据)存入 Redis,减少 MySQL 压力;页面缓存直接返回 HTML,PHP 几乎不执行。
五、其他关键措施
- 禁用 XML-RPC(防暴力破解):
RewriteRule ^xmlrpc.php$ - [F,L] - 启用 Gzip/Brotli 压缩(Nginx):
gzip on; gzip_types text/plain application/json text/css application/javascript; gzip_min_length 1024; - 限制上传大小(防大文件拖垮内存):
upload_max_filesize = 10M post_max_size = 12M - 监控工具:
htop实时查看内存/CPUmysqladmin status检查连接数redis-cli info memory确认 Redis 使用量
📊 预期效果对比
| 指标 | 优化前 | 优化后 |
|---|---|---|
| 首屏加载时间 | 3~5s | <1s |
| 并发处理能力 | ≤10 QPS | 50~100 QPS |
| MySQL 负载 | 高(频繁全表扫描) | 低(90% 查询命中 Redis) |
| OOM 风险 | 高频 | 极低 |
✅ 最后建议:优先部署 PHP-FPM (ondemand) + Redis 缓存 + OPcache,这三项即可提升 70% 性能;再逐步叠加数据库和静态资源优化。
需要我提供完整的 nginx.conf、php-fpm.conf 或 my.cnf 模板文件吗?
CLOUD技术笔记