通过 AWS Application Load Balancer 提供 Django 内容

Serving Django content through AWS Application Load Balancer

我正在 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 Group 说实例是健康的。目标群体说目标是健康的。 ALB 正在侦听端口 80 和 443 并将流量转发到目标组。

有谁知道为什么静态内容在通过注册域名时不呈现,即使在直接通过 Public IP 地址访问它时可以正常显示?

听起来您的静态内容 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 的静态内容,因为如果您有多个需要同步其 static/media 文件的服务器实例,这将更有意义。

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