手动安装WordPress需要配置哪些Nginx和PHP参数?

手动安装 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_filesizepost_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/wordpress
chmod -R 755 /var/www/html/wordpress
chmod 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 方案吗?