部署 PHP 应用与 Nginx 配置
适用人群:环境已就绪、要部署 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部署代码
把项目传到服务器(Git 或打包上传),在项目目录运行 composer install --no-dev 装生产依赖。
步骤 2配 .env
复制 .env 模板填数据库、密钥等;Laravel 用 php artisan key:generate 生成 APP_KEY。
步骤 3初始化数据库
运行迁移(Laravel php artisan migrate / ThinkPHP 对应命令)建表。
步骤 4配 Nginx
server 块 root 指向 public,加 PHP 的 fastcgi_pass 和伪静态 try_files。
步骤 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?
非首页路由都是 404?
相关教程
相关文章
网站 HTTPS 怎么配置?SSL 证书申请、Nginx 部署与自动续期
HTTPS 已经是网站上线的标配:浏览器会对纯 HTTP 站点提示"不安全",搜索引擎也更青睐 HTTPS。配置 HTTPS 的核心是申请一张 SSL/TLS 证书、在服务器上部署、并确保它自动续期不过期。本文按运维实操讲清楚。 先分清:HTTPS 和备案是两回事 SSL 证书解决的是"传输加密与身份可信",ICP …
备案站点的 Nginx 反向代理配置要点
反向代理在备案站点里的位置 典型链路是"用户 → Nginx(反向代理/负载)→ 后端应用"。备案约束的是"域名 + 接入服务商",反向代理层本身不改变备案,但它的配置直接影响可用性、日志质量与合规展示——配错了轻则路由错乱,重则埋下核查隐患。 回源与 Host 透传 反代把请求转发给后端时,要让后端拿到正确的域名信…
网站上线前怎么测试?测试环境、预发布与上线前检查清单
直接把没测过的网站推到线上,很容易上线即翻车:页面报错、链接失效、证书没配好,甚至因为空白页被判备案不合格。正式上线前做一轮测试和逐项检查,能把问题挡在用户之前。本文讲清测试环境怎么搭、备案期间怎么合规地测,以及上线前该核对什么。 为什么要先测 功能验证:注册、表单、支付、接口等关键流程能不能跑通; 展示验证:各页面…
网站上线备案与等保测评的先后顺序如何衔接
网站正式对外提供服务前,通常涉及ICP备案与网络安全等级保护(等保)测评两项合规工作,但二者监管逻辑并不相同,很多运营者容易把顺序搞混。 备案与等保测评管的是两件事 ICP备案由通信管理局主管,核验的是网站主办者身份和接入信息,解决“谁在办网站、通过谁接入”的问题;等保测评由公安机关网络安全保卫部门主管,评估的是信息…
Docker 容器化部署网站怎么做?镜像、编排、反代与备案上线全流程
Docker 把应用连同运行环境打包成镜像,做到"一次构建、到处运行",避免了"本地能跑、服务器跑不起来"的环境差异问题。本文从镜像、编排、反代到备案,讲清用 Docker 容器化部署网站上线的完整流程与常见坑。 为什么用 Docker 环境一致:镜像里封装了运行时、依赖和配置,开发、测试、生产跑的是同一套,消除环境…
官方资料来源