【问题标题】:Serving Django content through AWS Application Load Balancer通过 AWS Application Load Balancer 提供 Django 内容
【发布时间】:2019-01-25 22:54:01
【问题描述】:

我正在一个 ec2 实例上构建一个 django Web 应用程序,该实例位于一个自动缩放组中,并以 Application Load Balancer 为前端。

我已经配置好 uwsgi 和 nginx 并且当我运行命令时

uwsgi --socket /tmp/uwsgi.sock --module MyProject.wsgi --chmod-socket=666 --virtualenv /path/to/my/virtual/env/

当我通过 IP 地址访问应用程序时,一切正常。我可以导航到该站点,并且一切正常。

但是,当我尝试使用我拥有并通过 Route 53 注册的域名通过 URL 访问该网站时,该网站的功能正常工作并且正在提供服务,但静态内容(css 文件等)却没有渲染。

我的 Auto-Scaling 组说实例运行状况良好。目标群体说目标是健康的。 ALB 正在侦听端口 80 和 443 并将流量转发到目标组。

有谁知道为什么静态内容在通过注册域名时没有呈现,即使它在直接通过公共 IP 地址访问它时有效?

【问题讨论】:

    标签: django amazon-web-services static render elastic-load-balancer


    【解决方案1】:

    听起来您的静态内容网址未解析到您的域。您应该检查模板上给出的 url 是否符合预期,然后确保 nginx 已正确设置为从该位置提供内容。

    server {
    root /www/data;
    
    location /static/ { # serve files from /www/data/static/ to /static/
    }
    }
    

    https://docs.nginx.com/nginx/admin-guide/web-server/serving-static-content/

    您可能还希望参考 django 静态文件文档,也许您需要确保您的设置正确以映射到正确的 url。

    https://docs.djangoproject.com/en/2.1/howto/static-files/deployment/

    我建议将您的实例配置为从 s3 提供静态内容,因为如果您有多个需要同步静态/媒体文件的服务器实例,这将更有意义。

    https://simpleisbetterthancomplex.com/tutorial/2017/08/01/how-to-setup-amazon-s3-in-a-django-project.html

    【讨论】:

    • 是的,我绝对认为我明白你在说什么。但是我项目的 nginx 配置文件的 FQDN 在server_name
    • 没关系,我搞定了。我不得不更改主要的 nginx 配置文件,而不是我的项目。谢谢!
    • 这很好,但如果你有一个自动伸缩组,我真的建议你为你的静态文件使用 cdn,因为你必须保持静态文件同步,即使没有上传到s3 支持您可以轻松地将静态文件指向您的 s3 存储桶,并为自己节省大量重新部署的麻烦。
    猜你喜欢
    • 1970-01-01
    • 2019-01-30
    • 2021-01-21
    • 2018-03-06
    • 2019-06-08
    • 2017-07-30
    • 2017-11-23
    • 2018-03-08
    • 1970-01-01
    相关资源
    最近更新 更多