首页 > 解决方案 > 通过 AWS Application Load Balancer 提供 Django 内容

问题描述

我正在一个 ec2 实例上构建一个 django Web 应用程序,该实例位于一个自动缩放组中,并带有一个应用程序负载均衡器。

我已经配置了 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 地址访问它时有效?

标签: djangoamazon-web-servicesstaticrenderelastic-load-balancer

解决方案


听起来您的静态内容 url 没有解析到您的域。您应该检查模板上给出的 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


推荐阅读