php - Nginx Laravel 配置返回 403

标签 php laravel nginx

我在 VPS 上建立了一个新的 Laravel 5.7 站点。我之前曾使用 valet 在本地运行该网站,没有出现任何问题。但是,现在当我使用 https://mysite.mydomain.net/dashboard 导航到我的 dashboard 路线时,我收到了 403 nginx 返回的错误(没有 laravel 错误,所以我假设它根本不会到达 laravel)。

与具有类似结构的其他路线相连接的其他路径似乎不受影响。

我尝试运行 php artisan route:clear 以确保它不会命中较旧的缓存路由。

路线很简单:

Route::get('/dashboard', function () {
    return "yo";
})->name('dashboard'); // returns 403

几乎完全相同的路线会毫无问题地返回预期结果:

Route::get('/test', function() {
    return "test";
})->name('test'); // returns "test"

这是 nginx 配置:

server {

         # Log files for Debugging
         access_log /var/log/nginx/laravel-access.log;
         error_log /var/log/nginx/laravel-error.log;

         # Webroot Directory for Laravel project
         root /var/www/mysite/public;
         index index.php index.html index.htm;

         # Your Domain Name
         server_name mysite.mydomain.net;

         location / {
                 try_files $uri $uri/ /index.php?$query_string;
         }

         # PHP-FPM Configuration Nginx
         location ~ \.php$ {
                 try_files $uri =404;
                 fastcgi_split_path_info ^(.+\.php)(/.+)$;
                 fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
                 fastcgi_index index.php;
                 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                 include fastcgi_params;
         }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/mysite.mydomain.net/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/mysite.mydomain.net/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = mysite.mydomain.net) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


         listen 80;
         listen [::]:80 ipv6only=on;
         server_name mysite.mydomain.net;
    return 404; # managed by Certbot


}

laravel 身份验证是否会抛出 nginx 403 错误?我希望它至少能显示一条 laravel 错误消息——而且,这条路线上没有中间件。可能发生什么情况?

nginx错误日志显示:

2018/10/30 20:46:48 [error] 19626#19626: *2201 directory index of "/var/www/mysite/public/dashboard/" is forbidden, client: 98.146.255.247, server: mysite.mydomain.net, request: "GET /dashboard/ HTTP/1.1", host: "rem$

最佳答案

听起来您的站点根目录中有一个名为仪表板的文件夹。

try_files $uri $uri/ /index.php?$query_string;

无法调用 php,因为 nginx 尝试在 $uri/中提供内容

作为快速修复,您可以删除此行中的 $uri/

try_files $uri /index.php?$query_string;

但最好不要让您的应用程序成为网站根目录,以避免这些困惑。 您可以将 css 等...放在文件夹/assets 中并将该行更改为

try_files $uri $uri/ assets/$uri /index.php?$query_string;

或者类似的东西

location /assets {
    try_files $uri $uri/ =404;
}

location / {
    try_files /index.php?$query_string =503;
}

不要忘记(在任何其他位置之前,因为顺序很重要)

# protect hidden files/folders ex: .git
location ~ /\. {
    deny all;
}

关于php - Nginx Laravel 配置返回 403,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53076103/

相关文章:

php - 如何在编辑表单中填充组合框

mysql - Laravel Group By 和 Order By 不起作用

javascript - Laravel - 仅当屏幕尺寸 > 768px 时包含文件

linux - Nginx 运行与否?

php - <a> 标签中带有 PHP vars onclick 的 JS 函数不起作用

javascript - 在 php 循环中单击复选框时将 1 添加到输入值

phpspec 单元测试 - 使用 ioc/service registry 来交付要测试的具体类

php - 部署时文件存储在 Laravel 项目上不起​​作用

nginx - 使用 POST args 对 NGINX 进行速率限制

nginx如何重定向到本地主机中的不同路由