部署 PHP 应用与 Nginx 配置

更新于 2026年8月21日

适用人群:环境已就绪、要部署 PHP 框架应用的开发者。

核心概念

关键:root 指向 public

Laravel/ThinkPHP 的入口是 public/index.php,Nginx 的 root 必须指向 public 目录,框架其余代码在 public 之外,杜绝源码和 .env 被公开访问。

伪静态

框架路由依赖把非文件请求回退到 index.php——Nginx 用 try_files $uri $uri/ /index.php?$query_string 实现。

目录权限

Laravel 的 storage、bootstrap/cache(ThinkPHP 的 runtime)需要可写,属主设为 Web 运行用户。

操作步骤

  1. 步骤 1部署代码

    把项目传到服务器(Git 或打包上传),在项目目录运行 composer install --no-dev 装生产依赖。

  2. 步骤 2配 .env

    复制 .env 模板填数据库、密钥等;Laravel 用 php artisan key:generate 生成 APP_KEY。

  3. 步骤 3初始化数据库

    运行迁移(Laravel php artisan migrate / ThinkPHP 对应命令)建表。

  4. 步骤 4配 Nginx

    server 块 root 指向 public,加 PHP 的 fastcgi_pass 和伪静态 try_files。

  5. 步骤 5设权限

    storage、cache/runtime 目录设为可写,属主为 Web 运行用户。

实际示例

server {
    listen 80;
    server_name example.com www.example.com;
    root /www/wwwroot/example.com/public;   # 指向 public!
    index index.php;
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

常见错误

  • ⚠️root 指向项目根目录而非 public,.env 和源码可被公网下载(严重安全问题)
  • ⚠️没配伪静态 try_files,除首页外的路由全部 404
  • ⚠️storage/runtime 目录不可写,报权限错误、日志/缓存写不进去
  • ⚠️生产装依赖没加 --no-dev,把开发依赖也装进去

对应工具

常见问题

为什么 root 一定要指向 public?
框架把入口放在 public,源码和 .env 放在 public 之外。root 指错会让 .env、配置、源码被公网直接访问下载,是高危安全问题。
非首页路由都是 404?
没配伪静态。PHP 框架路由需要 try_files 把请求回退到 index.php,缺了它只有首页能开。

相关教程

相关文章

官方资料来源