【问题标题】:Nginx Laravel config returning 403Nginx Laravel 配置返回 403
【发布时间】:2018-10-31 14:36:03
【问题描述】:

我在 VPS 上建立了一个新的 Laravel 5.7 站点。我以前使用valet 在本地运行该站点,没有任何问题。但是,现在当我使用 https://mysite.mydomain.net/dashboard 导航到我的 dashboard 路由时,我收到了 nginx 返回的 403 错误(没有 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/ 中提供内容
  • 你可以去掉 try_files $uri /index.php?$query_string; 这一行中的 $uri/ 但是最好不要让你的应用程序成为站点根目录以避免这些混淆
  • @AntonyGibbs 是的,我有一个 public/dashboard 来保存我的混合 css / js 等资产。
  • @AntonyGibbs - 有效,删除 $uri/ 解决了这个问题。请做出你的回答,我会接受的。谢谢!

标签: php laravel nginx


【解决方案1】:

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

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

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

作为一种快速解决方法,您可以去掉这一行中的 $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;
}

【讨论】:

    【解决方案2】:

    试试php artisan cache:clear


    我实际上经历过同样的事情。奇怪的是,我通过在我的web.php(路由文件)的顶部写dd( 'Blah' );,以某种方式“按摩”了错误。完成此操作后,我将 dd-line 向下移动了几行(每次移动时都会加载有问题的 URL)。最后,dd( 'Blah' ) 在文件的底部, - 我所有的路线都在工作(所以它必须是某种缓存)。在执行此操作之前,我也曾尝试清除缓存。 ...我不知道它为什么起作用。但确实如此。在我这样做之前,我有 45 分钟的错误。

    如果这没有帮助,那么也许检查/var/log/nginx/laravel-error.log; 的内容(正如您在 Nginx 配置中所写的那样)。

    如果这没有帮助,请尝试暂时将路由从 /dashboard 更改为 /newdashboard,看看是否会出现错误。 ...或者您可以尝试复制/test-route 并重命名它,看看是否可行。 ... 或者您可以更改路线的顺序。

    我还遇到了另一个类似的问题,这似乎是一个中间件问题,但那是很久以前的事了。我只是提到它,所以你有几个地方要检查。

    但我看不出你写的有什么问题。所以我会把钱放在路由的顺序上,或者在服务器上运行的其他东西上,占用那个 URL。

    【讨论】:

      猜你喜欢
      • 2015-10-12
      • 2021-10-26
      • 2021-09-17
      • 2017-07-25
      • 1970-01-01
      • 2011-11-21
      • 2021-03-12
      • 1970-01-01
      • 2016-09-24
      相关资源
      最近更新 更多