搜索全站
安装部署 8 分钟阅读

LNMP 一键包部署 WordPress 的 Nginx 配置要点与避坑指南

用 LNMP 一键安装包部署 WordPress 时,Nginx 配置决定了站点能不能正常跑。本文讲清伪静态 include 写法、PHP-FPM 监听方式、防跨目录 open_basedir、上传限制与 HTTPS 强制跳转的完整配置,附常见 502、404、无法安装插件的排查方案。

U
UFO_PF 2020-09-11 · 阅读 8 分钟
LN 安装部署
阅读提示
本文约 2,815 字,预计阅读 8 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:一键包省了事,也埋了坑

LNMP 一键安装包(lnmp.org)是国内站长最常用的环境之一,几条命令就能有 Nginx + MySQL + PHP。但”能跑起来”和”能稳定跑 WordPress”是两回事。

最常见的三类问题:内页全是 404(伪静态没 include)、后台装插件要 FTP 凭据(属主不对)、上传主题提示”无法创建目录”(open_basedir 或权限)。这三个问题无一例外都出在 Nginx / PHP-FPM 配置层,而不是 WordPress 本身。

原理分析:Nginx 和 PHP-FPM 是怎么协作的

Nginx 本身不执行 PHP。请求进来后:

  1. Nginx 根据 server_name 匹配到对应的 server 块;
  2. 命中 location ~ \.php$,通过 FastCGI 协议把请求转给 PHP-FPM;
  3. PHP-FPM 执行 index.php,WordPress 启动,查数据库,返回 HTML;
  4. Nginx 把结果回给浏览器。

WordPress 的固定链接(比如 /2026/10/10/hello)在磁盘上并不存在文件,要靠 try_files 把所有找不到的路径都交给 index.php 处理。这一步就是”伪静态”,也是 LNMP 部署最容易漏掉的地方。

保姆级实操

第一步:添加虚拟主机

lnmp vhost add

按提示填域名、站点目录、是否开启伪静态。伪静态那一步选择 wordpress(lnmp 内置规则),或者选 other 后手动配置。

第二步:确认伪静态生效

查看生成的配置:

cat /usr/local/nginx/conf/vhost/mimangfei.com.conf

核心部分应包含:

server {
    listen 80;
    server_name mimangfei.com www.mimangfei.com;
    index index.html index.php;
    root  /home/wwwroot/mimangfei.com;

    include rewrite/wordpress.conf;

    location ~ [^/]\.php(/|$) {
        fastcgi_pass  unix:/tmp/php-cgi.sock;
        fastcgi_index index.php;
        include       fastcgi.conf;
        fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|webp)$ {
        expires 30d;
    }
}

rewrite/wordpress.conf 的内容本质是:

location / {
    try_files $uri $uri/ /index.php?$args;
}

第三步:上传大小限制

LNMP 默认限制偏小,编辑 /usr/local/php/etc/php.ini:

upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 300

改完重启:

lnmp php-fpm restart

同时 Nginx 也要放行:

client_max_body_size 64m;

第四步:解决”需要 FTP 凭据”

原因是 PHP-FPM 运行用户(一般是 www)对站点目录没有写权限:

chown -R www:www /home/wwwroot/mimangfei.com
find /home/wwwroot/mimangfei.com -type d -exec chmod 755 {} \;
find /home/wwwroot/mimangfei.com -type f -exec chmod 644 {} \;

第五步:防跨目录(open_basedir)

LNMP 默认会加 open_basedir 限制,这是好事,但如果你把 wp-content 移到别处、或者用了某些缓存插件写临时文件,会被拦住。临时放开:

fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/:/home/wwwroot/";

更彻底的做法是在 php.ini 里注释掉,但会牺牲安全性,不建议长期关闭。

第六步:强制 HTTPS

server {
    listen 80;
    server_name mimangfei.com www.mimangfei.com;
    return 301 https://mimangfei.com$request_uri;
}

常见踩坑与失败案例

  1. 内页 404,首页正常 —— 90% 是没 include 伪静态规则。用 nginx -t 检查语法,lnmp nginx reload 生效。
  2. 502 Bad Gateway —— PHP-FPM 没起来或 sock 路径不对。看 /usr/local/php/var/log/php-fpm.log,常见问题有 pm.max_children 太小导致进程耗尽、sock 文件权限不对。
  3. 案例:某站启用插件后前台 500,查日志是 open_basedir restriction in effect,因为插件要往 /tmp 之外写缓存。把缓存目录改到 /tmp 下解决。
  4. SSL 配好后样式全丢(混合内容) —— 后台”站点地址”还写着 http,需要在数据库里批量替换,或临时用 WP_HOME/WP_SITEURL 常量救场。
  5. 改了配置不生效 —— LNMP 修改了配置必须 lnmp nginx reload,仅重启服务有时读的还是旧配置缓存。

总结

LNMP 部署 WordPress 的关键配置就四处:伪静态 try_files、PHP-FPM 监听与权限、上传限制(php.ini + client_max_body_size 双管齐下)、open_basedir。把这四处配明白,剩下的都是 WordPress 层面的事。建议每次改配置都做一次 nginx -t,并保留一份配置文件的 Git 快照,出问题时 diff 一下就能定位。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。