前置准备
请确认已完成LNMP基础环境搭建(使用lnmp.org官方一键包,避免环境不兼容),服务器为CentOS 7/8、Ubuntu 18.04/20.04/22.04系统,且已绑定WordPress域名、配置好SSL证书。
第一部分:Nginx配置优化
1.1 全局Nginx配置
编辑/usr/local/nginx/conf/nginx.conf(lnmp一键包默认路径):
```nginx
user www www;
worker_processes auto; 自动匹配CPU核心数,最多不超过32
worker_cpu_affinity auto; 自动绑定CPU核心,提升性能
error_log /home/wwwlogs/nginx_error.log crit; 只记录严重错误,减少磁盘IO
pid /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile 65535; 提升最大打开文件数
events
{
use epoll; Linux高性能IO模型
worker_connections 65535; 单worker最大连接数
multi_accept on; 允许一次性接受多个连接
}
http
{
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128; 解决长域名无法解析问题
client_header_buffer_size 32k; 优化请求头大小
large_client_header_buffers 4 32k; 大请求头额外分配
client_max_body_size 100m; 允许上传100M文件(可按需调整)
sendfile on; 启用零拷贝传输,静态文件加速
tcp_nopush on; 配合sendfile,一次性发送数据包
tcp_nodelay on; 禁用Nagle算法,提升实时性
keepalive_timeout 60; 保持连接60秒
client_body_timeout 10; 客户端请求体超时
client_header_timeout 10; 客户端请求头超时
send_timeout 10; 服务器发送超时
Gzip压缩
gzip on;
gzip_min_length 1k; 小于1k不压缩,避免反降性能
gzip_buffers 4 16k; 压缩缓冲区
gzip_comp_level 6; 压缩等级6(性价比最高)
gzip_types text/plain text/css text/xml text/javascript application/json application/javascript application/xml+rss application/rss+xml application/xml application/xhtml+xml image/svg+xml image/x-icon; 压缩常见格式,排除图片/视频(已压缩)
gzip_vary on; 给代理服务器加Vary头,避免缓存问题
gzip_disable "MSIE [1-6]\."; 兼容IE6及以下
开启文件缓存(静态资源)
open_file_cache max=10240 inactive=60s; 最多缓存10240个文件,60秒未访问删除
open_file_cache_valid 60s; 60秒检查一次文件有效性
open_file_cache_min_uses 1; 访问1次就缓存
open_file_cache_errors on; 缓存文件不存在等错误信息
include vhost/.conf;
}
```
保存后执行lnmp nginx reload平滑重启生效。
1.2 WordPress站点专属Nginx配置
编辑/usr/local/nginx/conf/vhost/你的域名.conf:
```nginx
server
{
listen 80;
listen 443 ssl http2; 强制开启HTTP/2,需先配置SSL
server_name 你的域名 www.你的域名;
index index.php index.html index.htm;
root /home/wwwroot/你的域名;
SSL配置(使用lnmp一键包会自动生成,无需修改)
ssl_certificate /usr/local/nginx/conf/ssl/你的域名/fullchain.pem;
ssl_certificate_key /usr/local/nginx/conf/ssl/你的域名/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
add_header Strict-Transport-Security "max-age=63072000" always;
禁止访问隐藏文件
location ~ /\.
{
deny all;
access_log off;
log_not_found off;
}
WordPress伪静态规则
location /
{
try_files $uri $uri/ /index.php?$args;
}
PHP处理
location ~ [^/]\.php(/|$)
{
fastcgi_pass unix:/tmp/php-cgi.sock; lnmp一键包默认PHP-FPM socket
fastcgi_index index.php;
include fastcgi.conf;
禁用pathinfo(安全+性能),如果插件必须用pathinfo,可单独调整
fastcgi_split_path_info ^(.+?\.php)(/.)$;
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
try_files $fastcgi_script_name =404; 严格检查PHP文件存在性
}
静态资源缓存
location ~ .\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico|webp)$
{
expires 30d; 缓存30天
access_log off;
add_header Cache-Control "public, immutable";
}
location ~ .\.(js|css|svg|woff|woff2|ttf|eot)$
{
expires 7d; 缓存7天
access_log off;
add_header Cache-Control "public, immutable";
}
access_log /home/wwwlogs/你的域名.log;
}
```
保存后再次执行lnmp nginx reload。
第二部分:PHP-FPM配置优化

先查看当前PHP版本:php -v,假设为PHP 8.1(推荐用PHP 7.4以上版本,性能提升明显),编辑/usr/local/php/etc/php-fpm.conf:
```ini
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice 只记录通知级以上错误
emergency_restart_threshold 10 1分钟内10个进程崩溃则重启
emergency_restart_interval 1m
process_control_timeout 10s 子进程等待主进程信号超时
[www]
user = www
group = www
listen = /tmp/php-cgi.sock
listen.owner = www
listen.group = www
listen.mode = 0666
pm = dynamic 动态进程模式,适合中小站点
pm.max_children = 50 最大子进程数(CPU核心数×20,单核1G内存最大10,2核2G最大30,以此类推,避免内存溢出)
pm.start_servers = 5 启动时的子进程数(CPU核心数×2)
pm.min_spare_servers = 2 最小空闲子进程数(CPU核心数×1)
pm.max_spare_servers = 10 最大空闲子进程数(CPU核心数×4)
pm.max_requests = 1024 每个子进程处理1024次请求后自动重启,避免内存泄漏
request_terminate_timeout = 30s 单个请求超时30秒自动终止,避免死锁
request_slowlog_timeout = 2s 单个请求超过2秒记录慢日志
slowlog = /home/wwwlogs/php-slow.log
```
同时优化/usr/local/php/etc/php.ini(搜索对应参数修改):
```ini
max_execution_time = 30 单个PHP脚本最大执行时间
max_input_time = 60 最大接收POST/GET时间
memory_limit = 256M 单个PHP脚本最大内存(可按需调整到512M)
post_max_size = 100M 最大POST数据(和Nginx的client_max_body_size一致)
upload_max_filesize = 100M 最大上传文件(同上)
date.timezone = Asia/Shanghai 设置时区为中国
opcache.enable=1 开启OPcache(PHP 7以上默认开启,但需验证)
opcache.memory_consumption=256 OPcache内存大小(2G内存以下128M,2-4G256M)
opcache.interned_strings_buffer=16 字符串常量缓存大小
opcache.max_accelerated_files=10000 最多缓存10000个PHP文件
opcache.revalidate_freq=60 60秒检查一次PHP文件是否更新
opcache.fast_shutdown=1 快速关闭(PHP 7以上已废弃,但保留不报错)
opcache.enable_cli=0 关闭CLI模式OPcache
```
保存后执行lnmp php-fpm reload。
第三部分:MySQL配置优化
先查看当前MySQL版本:mysql -V,假设为MariaDB 10.6(lnmp一键包默认,和MySQL兼容),编辑/etc/my.cnf(CentOS)或/etc/mysql/mariadb.conf.d/50-server.cnf(Ubuntu):
```ini
[mysqld]
user = mysql
port = 3306
socket = /tmp/mysql.sock
pid-file = /usr/local/mysql/var/mysql.pid
basedir = /usr/local/mysql
datadir = /usr/local/mysql/var
基础配置
default-storage-engine = InnoDB 强制用InnoDB,性能+事务安全
character-set-server = utf8mb4 支持emoji
collation-server = utf8mb4_unicode_ci
skip-name-resolve 禁用DNS解析,提升连接速度
max_connections = 200 最大连接数(中小站点100-300足够)
table_open_cache = 2048 打开表缓存数
table_definition_cache = 2048 表定义缓存数
InnoDB优化(关键)
innodb_buffer_pool_size = 1G 核心参数,设为服务器内存的50%-70%(2G内存1G,4G内存2.5G,8G内存5G)
innodb_log_file_size = 256M 日志文件大小,设为innodb_buffer_pool_size的25%
innodb_log_buffer_size = 64M 日志缓冲区大小
innodb_flush_log_at_trx_commit = 2 每1秒刷日志到磁盘,性能高但断电丢失1秒数据(个人博客完全可接受)
innodb_file_per_table = 1 每个表单独存文件,方便管理
innodb_flush_method = O_DIRECT 直接IO,避免双缓存
innodb_read_io_threads = 8 读IO线程数(CPU核心数×2)
innodb_write_io_threads = 8 写IO线程数(同上)
查询缓存(MySQL 8.0已删除,MariaDB 10.6仍保留但建议关闭,命中率低)
query_cache_type = 0
query_cache_size = 0
慢查询日志
slow_query_log = 1
slow_query_log_file = /home/wwwlogs/mysql-slow.log
long_query_time = 2 超过2秒记录
log_queries_not_using_indexes = 1 记录未使用索引的查询
```
保存后执行lnmp mysql restart(必须重启,不能平滑)。
第四部分:WordPress后台极简配置
进入WordPress后台:
- 设置-固定链接:选择“文章名”或“自定义结构(/%postname%.html)”,保存生效伪静态
- 安装WP Super Cache插件:搜索安装启用,进入“设置-WP Super Cache”,勾选“启用缓存功能”,选择“简单模式”,点击“更新状态”