【Django】MIME type (‘text/html‘) is not a supported stylesheet MIME type | uWsgi | Nginx

问题分析

这是浏览器正常的请求类型分析:互联网上的资源有各种类型,通常浏览器会根据响应头的Content-Type字段来分辨它们的类型。例如:”text/html”代表html文档,”image/png”是PNG图片,”text/css”是CSS样式文档。然而,有些资源的Content-Type是错的或者未定义。这时,某些浏览器会启用MIME-sniffing来猜测该资源的类型,解析内容并执行。

所以解决方法中不能通过屏蔽猜测来解决,排除在配置文件中手动屏蔽的方法:SECURE_CONTENT_TYPE_NOSNIFF = False(此解决方法对我也无效);在配置文件末尾手动声明资源类型又破坏了规范的完整性:
import mimetypes mimetypes.add_type('text/css', '.css') mimetypes.add_type('application/javascript', '.js')

注:以上两种解决方法均来自参考二

解决方法

开发环境

在主urls.py中添加路由定位到static文件夹。
From:EvalAI源码

# evalai/urls.py 主路由
# DJANGO-SPAGHETTI-AND-MEATBALLS URLs available during development only.
from django.conf.urls.static import static

if settings.DEBUG:
    urlpatterns += (
        [... ]
        + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
        + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    )

EvalAI是一个AI竞赛平台。

生产环境

添加nginx服务器与uwsgi的socket对接即可。
uWsgi对于mime-types的校验文件位于/etc/mime.types
文档地址:https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/StaticFiles.html#mime
uWsgi配置如下,其中主要配置为声明socket端口而不是http服务。

# web为地址
[uwsgi]
chdir = /code
module = web.wsgi:application
master = true
processes = 4
socket = :8001
vaccum = true
python-autoreload = 1
buffer-size=32768
chmod-socket = 777

因为我所使用的为docker-compose部署,nginx和django属于同一网关下,所以在upstream轮询规则中定义django即可,其中监听80端口,对于/的访问定义uwsgi_pass指向django这一轮询规则,对于static则指明django的静态文件目录,code/uwsgi_params来源于https://github.com/nginx/nginx/blob/master/conf/uwsgi_params,放置到你所指定目录即可,里面是请求头部规则声明。
Nginx配置如下:

upstream django {
    server django:8001;  # 和ini文件中的socket端口保持一致
}

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    access_log  /var/log/nginx/host.access.log  main;
    error_log  /var/log/nginx/error.log  error;

    location / {
        uwsgi_pass  django;
        include /code/uwsgi_params;
    }

    location /static {
         alias /code/static; # 静态资源路径
    }

    location /media {
        alias /code/media; # 你项目中静态文件的存放路径
    }
}

参考

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dongbo X

感谢!!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值