Laravel在Nginx下正常运行必须将root指向public目录,配置try_files重写、fastcgi_param SCRIPT_FILENAME用$realpath_root,并禁止访问.env;否则将暴露敏感文件且路由404。

要让Laravel项目在Nginx下正确响应所有路由、加载静态资源、不暴露敏感目录,必须严格设置root指向public子目录、启用try_files重写规则、配置正确的fastcgi_param,并阻止对.env等文件的Web访问。
Nginx站点配置文件创建与基础结构
进入Nginx站点配置目录:sudo nano /etc/nginx/sites-available/myapp
粘贴以下最小可行配置(请将/var/www/myapp替换为你的实际项目路径):
server {
listen 80;
server_name example.com;
root /var/www/myapp/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
}
location ~ /\.env { deny all; }
}
这一步不能跳过——如果root写成/var/www/myapp而非/var/www/myapp/public,Nginx会直接列出app/、config/、vendor/等全部源码目录,造成严重安全泄露。
启用配置并验证语法
创建软链接启用该站点:sudo ln -sf /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
测试Nginx配置语法是否正确:sudo nginx -t
若返回“syntax is ok”和“test is successful”,说明配置无硬性错误;若报错,请重点检查root路径末尾是否有/public、fastcgi_param行是否完整、括号是否配对。
重新加载Nginx使配置生效:sudo systemctl reload nginx
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
关键路径与权限校验
确认PHP-FPM socket路径与配置中fastcgi_pass一致。常见路径有:
• /var/run/php/php8.1-fpm.sock(Ubuntu 22.04+默认)
• /run/php/php8.2-fpm.sock(较新系统)
• 若使用Docker或自定义PHP版本,需用ls -l /var/run/php/确认真实socket文件名。
确保Nginx worker进程用户(通常是www-data)对public/目录及其父目录具备执行(x)权限,否则会报403 Forbidden。执行:
sudo chmod 755 /var/www/myapp && sudo chmod 755 /var/www/myapp/public
【storage和bootstrap/cache必须可写,但public目录绝不可写】——这是生产环境铁律。public/仅用于读取静态资源,写入权限会导致恶意JS/CSS被上传覆盖。
HTTPS强制跳转与伪静态增强
第一步:在server块中添加HTTP到HTTPS重定向
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
第二步:复制原server块,修改listen为443 ssl,并补充SSL证书路径
第三步:为Vue Router history模式或API前缀添加排除规则(如项目含/api/v1/):
location ^~ /api/ {
try_files $uri $uri/ /index.php?$query_string;
}
第四步:删除所有location ~ /\.htaccess|\.htpasswd { deny all; }类规则——Nginx根本不读.htaccess,这类配置纯属冗余且干扰调试。

















