本文记录一次穷到极致的WordPress高并发折腾过程:WordPress多站点、MySQL8.0优化、PHP双版本并存、Redis7.4缓存、Nginx内网反代,全部塞进三台低配阿里云ECS,日活1.5万IP依旧丝滑。
一、先把锅分清楚——三台服务器的活怎么干
服务器 | 配置 | 职责 | 公网IP |
---|---|---|---|
A(DB) | 2核1.5G | MySQL 8.0,只对内网172.16.0.10开放3306 | 不需要 |
B(APP) | 2核3.5G | PHP8.2 + PHP7.4 + Redis7.4 + 图床,监听内网端口8081/8082/8083 | 不需要 |
C(EDGE) | 2核2G+200M | Nginx反向代理 + HTTPS终端 + 缓存,唯一公网入口 | 需要 |
二、A服务器:2核1.5G的MySQL 8.0——“榨干最后一滴内存”
1. 系统级偷懒
sudo swapoff -a
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
2. my.cnf最小可跑版
[mysqld]
bind-address = 172.16.0.10
max_connections = 80
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
default_authentication_plugin = mysql_native_password
3. 建库建用户(一次性搞定)
CREATE DATABASE wp1 DEFAULT CHARACTER SET utf8mb4;
CREATE DATABASE wp2 DEFAULT CHARACTER SET utf8mb4;
CREATE DATABASE wp3 DEFAULT CHARACTER SET utf8mb4;
CREATE USER 'wp_all'@'172.16.0.%' IDENTIFIED BY 'W0rdpr3ss!';
GRANT ALL ON wp1.* TO 'wp_all'@'172.16.0.%';
GRANT ALL ON wp2.* TO 'wp_all'@'172.16.0.%';
GRANT ALL ON wp3.* TO 'wp_all'@'172.16.0.%';
FLUSH PRIVILEGES;
三、B服务器:3.5G内存塞俩PHP版本+Redis——“双版本不打架”
1. 装Remi仓库并双版本并存
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
sudo dnf module reset php -y
sudo dnf module install php:remi-8.2 -y
sudo dnf install -y php82-php-fpm php82-php-mysqlnd php82-php-gd php82-php-redis
sudo dnf install -y php74-php-fpm php74-php-mysqlnd php74-php-gd php74-php-redis
2. 端口区分两版本
# /etc/opt/remi/php82/php-fpm.d/www.conf
listen = /run/php-fpm82.sock
# /etc/opt/remi/php74/php-fpm.d/www.conf
listen = /run/php-fpm74.sock
3. Redis 7.4极简配置
bind 127.0.0.1 172.16.0.11
maxmemory 1gb
maxmemory-policy allkeys-lru
save 900 1
4. Nginx虚拟主机(内网端口)
# /etc/nginx/conf.d/site1.conf
server {
listen 8081;
root /var/www/site1;
index index.php;
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm82.sock;
include fastcgi_params;
}
location ~* \.(jpg|png|gif|mp4)$ {
root /var/www/static;
expires 30d;
access_log off;
}
}
# site2.conf -> 8082 + php74
# site3.conf -> 8083 + php82
四、C服务器:200M带宽的“门面担当”——域名、HTTPS、缓存一把抓
1. 域名解析
site1.com
→ C服务器公网IPsite2.com
→ C服务器公网IPsite3.com
→ C服务器公网IP
2. Nginx反代+缓存
# /etc/nginx/conf.d/upstream.conf
upstream site1 { server 172.16.0.11:8081; }
upstream site2 { server 172.16.0.11:8082; }
upstream site3 { server 172.16.0.11:8083; }
# /etc/nginx/conf.d/site1.conf
server {
listen 80;
listen 443 ssl http2;
server_name site1.com www.site1.com;
ssl_certificate /etc/letsencrypt/live/site1.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/site1.com/privkey.pem;
proxy_cache_path /var/cache/nginx/site1 levels=1:2 keys_zone=site1:10m inactive=60m;
location / {
proxy_pass http://site1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache site1;
proxy_cache_valid 200 302 10m;
proxy_cache_use_stale error timeout updating;
}
# 静态文件直接回源B服务器,不走缓存
location ~* \.(jpg|png|gif|mp4)$ {
proxy_pass http://site1;
expires 30d;
add_header Cache-Control "public, immutable";
}
}
# site2.conf & site3.conf 同理
3. Let’s Encrypt一键证书(三条命令)
sudo dnf install -y certbot-nginx
sudo certbot --nginx -d site1.com -d www.site1.com
sudo certbot --nginx -d site2.com -d www.site2.com
sudo certbot --nginx -d site3.com -d www.site3.com
五、WordPress最后三板斧
- wp-config.php里把Redis前缀改掉,避免串站:
define('WP_CACHE_KEY_SALT', 'site1_');
- 对象缓存插件:Redis Object Cache
- 定时备份:凌晨3点把A服务器数据库打包上传到OSS,MySQL自动备份脚本网上一搜一大把。
六、踩坑吐槽墙
- MySQL8.0认证失败:PHP7.4老客户端不认
caching_sha2_password
,改回mysql_native_password
。 - 内网只有100Mbps:安全组没放行内网段,哭死。
- Redis频繁OOM:透明大页没关,
echo never > /sys/kernel/mm/transparent_hugepage/enabled
。
七、一句话总结
域名只解析到C服务器,B服务器只用内网端口,A服务器连公网都不需要。穷人也能用三台低配机把WordPress高并发玩成“德芙”。关键词再刷一遍:WordPress高并发、MySQL8.0优化、PHP8.2、Redis7.4、阿里云内网反代。
没有回复内容