我的应用程序在可以正常工作
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 /
答案 0 :(得分:1)
location
是互斥的,即一次只能匹配一个。当第一个位置(正则表达式)匹配时,第二个位置/
中的指令将被忽略,并且Nginx将继续使用该位置块中定义的 outside (如果未定义)中的任何内容。对于您而言,很明显root /usr/share/nginx/html
是在外部级别的某个地方定义的。
一个简单的解决方案是将相同的include
和uwsgi_pass
添加到第一个位置块,但是由于您正在提供静态文件,所以为什么不让Nginx通过添加{{1}来处理它}?
在实践中,最好将所有文件放在一个位置并使用基于前缀的匹配,而不是使用正则表达式来匹配文件扩展名:
root /path/to/your/static/files
您可能想读this answer来了解location /static/ {
alias /ProjectDirectory/assets/;
}
和root
之间的区别。