laravel 10在nginx上正常运行的核心是root必须指向public目录,配置try_files $uri $uri/ /index.php?$query_string,并用$realpath_root设置script_filename;否则将导致404或.env泄露。

要让 Laravel 10 在 Nginx 上正常运行,核心是确保所有请求都经由 public/index.php 入口处理,同时杜绝敏感文件暴露和路径解析错误。配置错一个关键点,轻则首页 404,重则 .env 被直接下载。
根目录必须指向 public 子目录
这是最常出错也最危险的一环。Nginx 的 root 指令绝不能设为项目根目录(如 /var/www/myapp),否则访问 https://yoursite.com/.env 就会直接返回明文配置。
- 正确写法:
root /var/www/myapp/public; - 确认该路径下存在
index.php、css/、js/等资源 - 在宝塔等面板中,需手动修改「网站目录」为
public/层级,不是public/index.php
必须启用路由转发规则
Laravel 所有非静态资源的 URL(如 /login、/api/users)都依赖 Nginx 把请求“兜底”给 index.php,否则一律 404。
- 在
location / { }块中加入:try_files $uri $uri/ /index.php?$query_string; - 注意空格与符号:末尾是
?$query_string,不是&$query_string - 若用 Vue Router history 模式或部署在子路径(如
/admin/),需额外调整try_files或加alias
PHP-FPM 处理必须用 $realpath_root
很多 500 错误或 “No input file specified” 都源于 SCRIPT_FILENAME 拼错了路径,尤其在使用软链接部署(如 current → releases/20260915)时。
- 在
location ~ \.php$ { }块中,必须写:fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; - 禁用
$document_root——它不解析符号链接,会导致路径错乱 - 推荐包含标准片段:
include snippets/fastcgi-php.conf;,再覆盖SCRIPT_FILENAME - 末尾加
try_files $uri =404;,防恶意构造/fake.php/xxx绕过规则
安全防护不能省略
这些规则要放在 server 块内、location / 之前,否则会被覆盖失效。
- 禁止访问敏感后缀:
location ~ \.(env|git|htaccess|ini|log|sh|sql|yml|yaml|xml)$ { deny all; } - 封锁敏感目录:
location ~ ^/(resources|app|config|bootstrap|storage|vendor)/ { deny all; } - 若启用了 HTTPS,还需透传头信息:
fastcgi_param HTTPS on;和fastcgi_param HTTP_X_FORWARDED_PROTO https;,否则url()生成 http 链接











