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

Docker部署Nginx+Django时ALLOWED_HOSTS请求受限问题解决

针对两种访问控制场景的API配置调整方案

场景1:允许本地Python客户端调用

Django settings.py 调整

修改ALLOWED_HOSTS,添加本地访问所需的主机/IP:

ALLOWED_HOSTS = [
    'localhost',
    '127.0.0.1',
    '0.0.0.0',  # 适配Docker容器内服务的网络绑定需求
]

注:0.0.0.0 让Django服务能绑定到容器的所有网络接口,确保Nginx容器和本地主机可正常请求。

Nginx 配置 (nginx.conf)

在server块中添加本地IP段的允许规则,拒绝其他来源请求:

server {
    listen 80;
    server_name _;

    # 允许本地回环地址、Docker默认桥接网络IP段
    allow 127.0.0.1;
    allow 172.17.0.0/16;
    deny all;

    location / {
        proxy_pass http://django:8000;  # 对应docker-compose中Django服务名
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Docker Compose 调整

限制端口暴露范围,避免API对外公开:

services:
  django:
    build: ./django
    command: python manage.py runserver 0.0.0.0:8000
    networks:
      - api_network
    # 注释端口映射,仅让内部网络访问Django服务
    # ports:
    #   - "8000:8000"

  nginx:
    build: ./nginx
    ports:
      - "127.0.0.1:80:80"  # 仅绑定本地80端口,外部无法直接访问
    networks:
      - api_network
    depends_on:
      - django

networks:
  api_network:
    driver: bridge

场景2:仅允许指定IP地址调用,封禁其余IP

Django settings.py 调整

添加指定客户端IP到ALLOWED_HOSTS,保留容器内部访问配置:

ALLOWED_HOSTS = [
    '127.0.0.1',
    '0.0.0.0',
    '192.168.1.100',  # 替换为你需要允许的客户端IP
]

Nginx 配置 (nginx.conf)

明确指定允许的IP,拒绝所有其他请求:

server {
    listen 80;
    server_name _;

    # 可添加多个allow行,配置多个允许的IP
    allow 192.168.1.100;  # 目标客户端IP
    allow 127.0.0.1;  # 保留本地测试权限(可选)
    deny all;

    location / {
        proxy_pass http://django:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Docker Compose 调整(可选)

进一步限制Nginx端口的绑定范围:

services:
  nginx:
    ports:
      - "192.168.1.100:80:80"  # 仅让指定IP能访问Nginx端口

验证方法

部署后用curl测试规则是否生效:

# 从允许的IP请求,应返回正常响应
curl http://你的API地址/目标端点

# 从禁止的IP请求,应返回403 Forbidden
curl http://你的API地址/目标端点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 21:23:12