如何解决Nginx静态资产未找到错误

时间:2020-08-20 10:26:45

标签: python nginx flask

我的应用程序在可以正常工作

location / {
        include uwsgi_params;
        uwsgi_pass unix:/tmp/socket_file.sock;
}

但是当我包括静态资产位置location ~* .\(css|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rtf)时,css,js文件会显示404 not found错误

server {
    listen 8080;
    server_name your_domain www.your_domain;
    location ~* \.(css|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rtf)$ {
       expires max;
       log_not_found off;
       access_log off;
    }

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/tmp/socket_file.sock;
    }
}

nginx错误日志显示`

“ / usr / share / nginx / html / static / js / jspdf.js”失败(2:无此类文件或目录) ' 当我的静态资产位于/ ProjectDirectory / assets /

1 个答案:

答案 0 :(得分:1)

location是互斥的,即一次只能匹配一个。当第一个位置(正则表达式)匹配时,第二个位置/中的指令将被忽略,并且Nginx将继续使用该位置块中定义的 outside (如果未定义)中的任何内容。对于您而言,很明显root /usr/share/nginx/html是在外部级别的某个地方定义的。

一个简单的解决方案是将相同的includeuwsgi_pass添加到第一个位置块,但是由于您正在提供静态文件,所以为什么不让Nginx通过添加{{1}来处理它}?

在实践中,最好将所有文件放在一个位置并使用基于前缀的匹配,而不是使用正则表达式来匹配文件扩展名:

root /path/to/your/static/files

您可能想读this answer来了解location /static/ { alias /ProjectDirectory/assets/; } root之间的区别。