我不知道为什么nginx别名不起作用。
为什么这条线不起作用:
location /static/ {
alias /home/django11/example.com/finansuinfo/static_root/;
}
实际上它可能正常工作但我的管理页面静态文件没有服务。我收到static / admin / ...不存在的错误。
我猜它只提供静态文件夹中的文件,但不提供static_root文件夹,其中所有文件都是由manage.py collectstatic收集的
这是我的配置:
server {
listen 80;
server_name example.com www.example.com;
root /home/django11/example.com/example;
location / {
include uwsgi_params;
uwsgi_pass unix:/home/django11/example.com/example/example.sock;
}
location /static/ {
alias /home/django11/example.com/example/static_root/;
}
# Media: images, icons, video, audio, HTC
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
expires 1M;
access_log off;
add_header Cache-Control "public";
}
# CSS and Javascript
location ~* \.(?:css|js|woff)$ {
expires 1M;
access_log off;
add_header Cache-Control "public";
}
}
我发现别名因为以下原因而无效:
# Media: images, icons, video, audio, HTC
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
expires 1M;
access_log off;
add_header Cache-Control "public";
}
# CSS and Javascript
location ~* \.(?:css|js|woff)$ {
expires 1M;
access_log off;
add_header Cache-Control "public";
}
您有什么建议如何解决?因为当我删除这个static_root时。
答案 0 :(得分:2)
查看nginx中location
config的文档:
位置可以由前缀字符串或正则表达式定义。使用前面的“〜*”修饰符(对于不区分大小写的匹配)或“〜”修饰符(对于区分大小写的匹配)指定正则表达式。 要查找与给定请求匹配的位置,nginx首先检查使用前缀字符串(前缀位置)定义的位置。其中,选择并记住具有最长匹配前缀的位置。 然后按照它们在配置文件中的出现顺序检查正则表达式。正则表达式的搜索在第一次匹配时终止,并使用相应的配置。如果找不到与正则表达式的匹配,则使用先前记住的前缀位置的配置。
您问题中的案例可以从中解释:
当您尝试访问静态文件(我猜是css,js或media文件之一)时,它首先匹配前缀字符串:
location /static/ {
alias /home/django11/example.com/example/static_root/;
}
然后,它开始搜索正则表达式,如果下面的css或js文件将获得匹配:
# CSS and Javascript
location ~* \.(?:css|js|woff)$ {
expires 1M;
access_log off;
add_header Cache-Control "public";
}
搜索终止并使用上述配置。并且,在此配置中,别名未定义,因此不使用别名。
删除此正则表达式位置块时,将使用前缀位置的配置。并且,由于这包括别名,它可以工作。