laravel生产环境稳定运行需将web服务器根目录设为public,nginx用try_files实现url重写,apache启用rewrite并允许.htaccess覆盖,同时设置storage和bootstrap/cache可写权限及正确归属www-data用户。

要让 Laravel 项目文档(或整个应用)在生产环境稳定对外提供服务,核心不是“写文档”,而是确保 Web 服务器正确指向 Laravel 的 public 目录,并启用 URL 重写——否则所有路由 404、静态资源加载失败、甚至 .env 等敏感文件直接暴露。Nginx 和 Apache 配置逻辑不同,但目标一致:只允许通过 public/index.php 入口访问,其余请求由它统一调度。
Nginx 配置要点
Nginx 不解析 .htaccess,必须在 server 块中显式声明规则:
-
root 必须指向 public 目录,例如:
root /var/www/myapp/public;。设成项目根目录会泄露配置文件且所有路由失效。 - 添加标准路由转发块:
location / { try_files $uri $uri/ /index.php?$query_string; }。这是 Laravel 路由生效的硬性前提,缺一不可。 - PHP 处理需用
$realpath_root构造脚本路径:fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;,避免符号链接场景下报 “No input file specified”。 - 确认
fastcgi_pass指向真实运行的 PHP-FPM socket,如unix:/run/php/php8.1-fpm.sock;测试并重载:sudo nginx -t && sudo systemctl reload nginx。
Apache 配置要点
Apache 依赖 .htaccess 实现重写,因此必须开启模块并授权覆盖:
- 启用重写模块:
sudo a2enmod rewrite。 -
DocumentRoot 必须是 public 目录,例如:
DocumentRoot /var/www/myapp/public。 - 在
<directory></directory>块中允许 .htaccess 生效:AllowOverride All,并开放访问:Require all granted。 - 确保
/var/www/myapp/public/.htaccess文件存在且内容为 Laravel 默认重写规则(通常已自带),无需手动改写。 - 重启服务:
sudo systemctl restart apache2。
权限与安全收尾
配置完服务器,还需保障 Laravel 运行时有足够权限写入缓存和日志:
- 设置可写目录:
sudo chmod -R 775 storage bootstrap/cache。 - 将项目归属设为 Web 用户(如 Ubuntu 的
www-data):sudo chown -R www-data:www-data /var/www/myapp。 - 检查
APP_URL与实际访问协议(http/https)和域名一致,尤其在反代或 HTTPS 场景下,否则生成的链接可能跳转错误。
不复杂但容易忽略。只要 root/DocumentRoot 指对 public、重写规则到位、权限无阻塞,Laravel 就能稳定响应所有请求。











