You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AWS Lightsail容器部署Django遇Invalid HTTP_HOST header错误

解决AWS Lightsail容器部署Django的Invalid HTTP_HOST错误

核心问题

Lightsail容器服务会通过内部反向代理转发请求,你的Django应用接收到的是**内部容器IP(172.26.43.151)**而非外部访问的域名/IP。哪怕设置了ALLOWED_HOSTS=['*'],如果Nginx没正确传递Host头、或者Django没配置信任代理转发的头,还是会触发这个错误。


1. 修改Django配置(base.py)

打开你的Django配置文件,添加/修改以下配置:

# settings/base.py
ALLOWED_HOSTS = ['*']  # 也可以直接填Lightsail容器服务给你的公共域名,比如xxx.awslightsail.com
USE_X_FORWARDED_HOST = True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
  • USE_X_FORWARDED_HOST:让Django优先读取代理传递的X-Forwarded-Host头(也就是用户实际访问的Host),而不是直接用内部容器IP
  • SECURE_PROXY_SSL_HEADER:告诉Django请求是通过HTTPS转发的(如果用了Lightsail的HTTPS证书)

2. 修正Nginx配置

如果用Nginx做反向代理,必须确保传递正确的头信息:

# nginx.conf 或站点配置文件
server {
    listen 80;
    server_name _;  # 填你的实际域名,或者用_匹配所有

    location / {
        proxy_pass http://django:8000;  # 对应docker-compose里的Django服务名
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # 静态文件路由(如果用Django管理静态文件)
    location /static/ {
        alias /usr/share/nginx/html/static/;  # 对应Nginx容器里的静态文件路径
    }
}

重点是proxy_set_header Host $host;——这个会把用户实际访问的Host传递给Django,而不是内部容器IP。

3. 优化Dockerfile

生产环境别用Django自带的runserver,换成gunicorn,同时设置信任代理转发:

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

# 收集静态文件(提前做好,避免容器启动时重复执行)
RUN python manage.py collectstatic --noinput

# 用gunicorn启动,允许所有代理的转发头
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "--forwarded-allow-ips=*", "你的项目名.wsgi:application"]

--forwarded-allow-ips=*让gunicorn信任Lightsail的内部代理,确保Django能正确拿到转发的Host头。

4. docker-compose.yml配置

确保服务网络连通,Nginx能访问Django:

version: '3.8'

services:
  django:
    build: .
    env_file:
      - .env
    volumes:
      - ./static:/app/static  # 挂载静态文件目录
    networks:
      - app-network

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
      - ./static:/usr/share/nginx/html/static
    depends_on:
      - django
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

5. Lightsail容器部署注意事项

  • 把本地构建的镜像上传到Lightsail容器镜像仓库
  • 创建容器部署时,设置端口映射:容器80端口映射到公共80端口
  • 环境变量里务必设置DEBUG=False,以及你的SECRET_KEY等敏感信息

部署完成后,通过Lightsail提供的公共域名访问,就不会再出现HTTP_HOST错误了。


内容的提问来源于stack exchange,提问作者Essam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 19:36:56