Laravel 8 + nginx - 来自公共/未加载的 app.css 和 app.js 资源 - 未找到 404

时间:2021-02-23 16:45:43

标签: javascript css nginx http-status-code-404 laravel-8

这似乎是一个重复的问题,但它是不同的。相信我,我为这个问题研究了整个堆栈、laracast、reddit 和 github

<块引用>

我在带有 Laravelubuntu VM 上有一个 nginx 应用程序。我的问题 我的 Laravel 8 应用程序没有加载 app.cssapp.js 文件来自 public/。我已经运行了 npm install & npm run dev/prod ,但仍然出现 404 错误 - 在 chrome 中找不到 控制台。 所以我的 app.css and .js 在我的 public/css - /js 个文件夹。路径也为 资源/资产。仍然无法正常工作。我尝试了几种 server block 配置,但都没有成功。

如果您遇到同样的问题并尝试过 npm install and run dev, 使用 asset 辅助函数生成 path<script src="{{ asset('/js/app.js') }}" defer></script><link href="{{ asset('/css/app.css') }}" rel="stylesheet"> 但它仍然不是 工作在下面检查我的答案,*它可能会为您节省我花费的 1 周时间 搜索。*强调文本

1 个答案:

答案 0 :(得分:0)

解决方案,如果你有和我一样的配置,就非常简单。

我在 /home/myUsername/myLaravelAppName 中安装了我的 Laravel 应用,在 /var/www/myLaravelSiteName 中带有 index.php 的符号链接 - /var/www/myLaravelSiteName为网站提供服务的默认 nginx 根目录 - 如您所知。

解决方案:也为每个 /public/css/ 和 /public/js/ 目录创建一个符号链接到 /var/www/myLaravelSiteName,因为index.php 符号链接也不提供来自 /public/ 的 css 和 js 文件夹。显然这对我来说不是很明显。

或者您可以将整个 /public/ 目录符号链接到 /var/wwwmyLaravelSiteName

如果这仍然不起作用,您可能还有其他问题,因此请继续搜索,因为还有其他修复程序可以解决这些问题。 一种快速但“肮脏”的解决方法是使用引导程序中的在线CDN 链接并将它们添加到app.blade.php。它会起作用,但不推荐这样做。

此外,您添加的任何新自定义 css/js 文件都必须加载,因此首选正确的运行方式。如果单独提供而不是与整个 public/ 目录一起提供,这些将必须有符号链接。

附注。不要忘记将符号链接从网站可用到启用网站。

我的工作服务器块:

server {
    listen 80;
    listen [::]:80;



    root /var/www/laravel;


    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    charset utf-8;

    index index.php index.html index.htm ;

    server_name laravel www.laravel;

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }
    
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

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

    location ~* \.(jpg|jpeg|png|gif|css|js|ico|html)$ {

        access_log off;
        expires max;
        log_not_found off;
    }


    location ~/\.ht {
        deny all;
    }

    sendfile off;

}