【问题标题】:django permission error /admin/fonts/Roboto-Regular-webfont.woffdjango 权限错误 /admin/fonts/Roboto-Regular-webfont.woff
【发布时间】:2025-11-30 23:15:02
【问题描述】:

我收到权限错误。我的 docker 容器上的 /admin/fonts/Roboto-Regular-webfont.woff 权限被拒绝。我通过命令 docker exec -it container /bin/bash 进入 docker 容器并运行 curl -XGET 'http://localhost' 它在我的基础上的行 {% stylesheet 'style' %} 上显示错误.html。泊坞窗位于 aws 上的 ubuntu 机器内。我正在使用 nginx 和 uwsgi 运行这个应用程序。 uwsgi .ini 中的 uid 和 gid 是 www-data。请帮我解决这个问题。

请查找 docker 日志

root@ip-10-252-14-11:/home/ubuntu/workarea/sourcecode/ntdl/ntdl# docker logs 
ntdl

> ntdl@1.0.2 start-prod /home/ntdl/code
> concurrently --no-color "uwsgi --ini /home/ntdl/code/uwsgi.ini" "nginx" 
 "npm run render-prod"

[0] [uWSGI] getting INI configuration from /home/ntdl/code/uwsgi.ini
[2]
[2] > ntdl@1.0.2 render-prod /home/ntdl/code
[2] > babel-node node/react-render.jsx
[2]
[2] React render server listening at http://0.0.0.0:9009
[2] *****  app. post
[2] Warning: Accessing PropTypes via the main React package is deprecated, 
and will be removed in  React v16.0. Use the latest available v15.* prop- 
types package from npm instead. For info on usage, compatibility, migration 
and more, see 
[2] advancedFacets - constructor - props []
[2] _updateProps []
[2] render advanced Facets - facets []
[2] global ntdl - react render - url http://54.252.92.17/api/search
[2] AJAX Failed: Error: connect ECONNREFUSED 54.252.92.17:80
[2] advancedFacets - constructor - props []
[2] _updateProps []
[2] render advanced Facets - facets []
[2] *****  app. post
[2] advancedFacets - constructor - props []
[2] _updateProps []
[2] render advanced Facets - facets []
[2] global ntdl - react render - url http://54.252.92.17/api/search
[2] AJAX Failed: Error: connect ECONNREFUSED 54.252.92.17:80
[2] advancedFacets - constructor - props []
[2] _updateProps []
[2] render advanced Facets - facets []
[2] *****  app. post
[2] advancedFacets - constructor - props []
[2] _updateProps []
[2] render advanced Facets - facets []  
[2] global ntdl - react render - url http://54.252.92.17/api/search
[2] AJAX Failed: Error: connect ECONNREFUSED 54.252.92.17:80
[2] advancedFacets - constructor - props []
[2] _updateProps []
[2] render advanced Facets - facets []
[2] *****  app. post
[2] advancedFacets - constructor - props [] 
[2] _updateProps []
[2] render advanced Facets - facets []
[2] global ntdl - react render - url http://54.252.92.17/api/search
[2] AJAX Failed: Error: connect ECONNREFUSED 54.252.92.17:80
[2] advancedFacets - constructor - props []
[2] _updateProps []
[2] render advanced Facets - facets []
[2] *****  app. post
[2] advancedFacets - constructor - props []
[2] _updateProps []
[2] render advanced Facets - facets [] 
[2] global ntdl - react render - url http://54.252.92.17/api/search
[2] AJAX Failed: Error: connect ECONNREFUSED 54.252.92.17:80
[2] advancedFacets - constructor - props []
[2] _updateProps []
[2] render advanced Facets - facets []
[2] *****  app. post
[2] advancedFacets - constructor - props []
[2] _updateProps []
[2] render advanced Facets - facets []
[2] global ntdl - react render - url http://54.252.92.17/api/search
[2] AJAX Failed: Error: connect ECONNREFUSED 54.252.92.17:80
[2] advancedFacets - constructor - props []
[2] _updateProps []
[2] render advanced Facets - facets []

嗨 Gasman,您可以看到权限错误 实际上,roboto 字体文件在该路径中可用。其次它在 {% stylesheet 'style' %} 请告诉我会是什么问题。

非常感谢, 巴拉特AK

【问题讨论】:

    标签: django amazon-web-services ubuntu docker wagtail


    【解决方案1】:

    发生这种情况是因为您(大概)在 Amazon S3 上托管字体。从远程域加载字体时,当前浏览器需要有效的CORS HTTP 标头。

    如果您使用的是storages.backends.s3boto.S3BotoStorage 后端,则可以通过将以下行添加到您的设置文件中来添加相应的标头:

    AWS_HEADERS = {
        'Access-Control-Allow-Origin': '*'
    }
    

    并重新运行./manage.py collectstatic。详情请见http://docs.wagtail.io/en/v2.1/advanced_topics/deploying.html#cloud-storage

    【讨论】:

    • 嗨 Gasman,我已经按照您在 setting.py 中所说的进行了更改,但我仍然遇到同样的错误。请指导我可以做什么。我无法附加 curl 输出,它很大 请建议如何附加 curl 输出 .html 以便您有一个想法非常感谢,Bharath AK
    • 嗨,伙计。我已经在上面的问题上添加了 docker 日志以获取更多详细信息,但我没有附加 curl 输出,因为它太大了。请帮我解决这个问题。非常感谢 bharath AK
    • 当我运行 root@fb9955d98b4d:/home/ntdl/code# ss -tlp 'sport = 80' 我得到如下结果 State Recv-Q Send-Q Local Address:Port Peer Address :Port LISTEN 0 128 :http *: users:(("nginx",pid=27,fd=6)) 但是对于ajax调用连接被拒绝你可以从上面的docker日志中看到
    • Dockerfile 中有 EXPOSE 80。 80 端口暴露。
    • 请阅读developer.mozilla.org/en-US/docs/Web/HTTP/CORS。如果 AJAX 和字体请求失败,那么问题几乎肯定是您从远程域请求它们,并且需要返回适当的 HTTP 标头。这与您的端口配置无关。