手动安装 WordPress 时,Nginx 和 PHP-FPM 的配置是核心环节。以下是关键参数和配置要点,适用于大多数标准部署场景(如 Ubuntu/Debian + Nginx + PHP 8.x):
✅ 一、Nginx 配置要点
1. 基础站点配置示例(/etc/nginx/sites-available/wordpress)
server {
listen 80;
server_name your-domain.com www.your-domain.com;
root /var/www/html/wordpress;
index index.php index.html;
# 启用 HTTPS(生产环境强烈建议)
# include /etc/letsencrypt/options-ssl-nginx.conf;
# ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
# 防止访问敏感文件
location ~ /.ht {
deny all;
}
# 禁止访问 wp-config.php
location = /wp-config.php {
deny all;
}
# 禁止访问 wp-includes 目录中的脚本
location ~* ^/wp-includes/.*.php$ {
deny all;
}
# 禁止访问上传的恶意文件(如 .php 在 uploads 目录)
location ~* ^/wp-content/uploads/.*.php$ {
deny all;
}
# 静态资源缓存(图片、CSS、JS)
location ~* .(jpg|jpeg|png|gif|ico|css|js|pdf|txt)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
try_files $uri =404;
}
# PHP 处理
location ~ .php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 根据实际 PHP 版本调整
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
# 关键优化参数
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_read_timeout 60s;
fastcgi_send_timeout 60s;
}
# 重写规则(WordPress 伪静态)
location / {
try_files $uri $uri/ /index.php?$args;
}
# 限制 POST 大小(避免上传失败)
client_max_body_size 64M;
}
🔔 注意:
fastcgi_pass路径需匹配实际 PHP-FPM socket 或 TCP 地址(可用systemctl status php8.2-fpm查看)。client_max_body_size需与 PHP 的upload_max_filesize和post_max_size协调设置。
✅ 二、PHP-FPM 配置要点(/etc/php/8.2/fpm/pool.d/www.conf)
编辑对应 pool 配置文件(通常为 www.conf),确保以下参数合理:
; 用户/组权限(必须与网站目录所有者一致,如 www-data)
user = www-data
group = www-data
; 监听方式(推荐 Unix socket,性能更好)
listen = /run/php/php8.2-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
; 进程管理
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
; 超时设置(匹配 Nginx 的 fastcgi_*_timeout)
request_terminate_timeout = 60s
request_slowlog_timeout = 10s
slowlog = /var/log/php-fpm/slow.log
; 安全与功能限制
security.limit_extensions = .php
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
; 上传相关(与 Nginx 的 client_max_body_size 联动)
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
memory_limit = 256M
⚠️ 关键提醒:
security.limit_extensions应仅允许.php,防止其他扩展被误执行。pm.max_children需根据服务器内存估算(每子进程约 30–50MB)。- 修改后务必重启 PHP-FPM:
sudo systemctl restart php8.2-fpm
✅ 三、其他必要检查项
| 项目 | 要求 |
|---|---|
| 目录权限 | chown -R www-data:www-data /var/www/html/wordpresschmod -R 755 /var/www/html/wordpresschmod 777 /var/www/html/wordpress/wp-content/uploads(或更精细控制) |
| 数据库 | 创建 DB 用户并授权(MySQL/MariaDB) |
| WP 配置 | 安装后需手动编辑 wp-config.php 中的 DB 信息 |
| HTTPS | 使用 Let’s Encrypt 证书(certbot --nginx) |
| 防火墙 | 开放 80/443 端口 |
🛠 验证配置是否生效
# 测试 Nginx 配置语法
sudo nginx -t
# 重载服务
sudo systemctl reload nginx
sudo systemctl reload php8.2-fpm
# 检查 PHP-FPM 日志
tail -f /var/log/php-fpm/error.log
如需支持多站点(Multisite)、CDN 集成或特定插件兼容性,可进一步定制 location 块或添加自定义 header。需要我提供完整自动化脚本或 Docker Compose 方案吗?
PHPWP博客