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

如何限制部署在Render上的Django Admin仅指定IP可访问?

限制Django Admin面板仅指定IP访问(Render基础套餐适用)

针对Render基础套餐无法直接用平台级防火墙限制IP的情况,推荐通过Django自定义中间件实现IP白名单控制,具体步骤如下:

方法一:自定义IP限制中间件

  1. 在你的Django项目根目录下创建middleware.py文件,写入以下代码:
from django.http import HttpResponseForbidden

# 替换成你自己的公网IP,可添加多个备用IP
ALLOWED_ADMIN_IPS = ['123.45.67.89', '98.76.54.32']

class RestrictAdminIPMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # 仅拦截admin路径的请求
        if request.path.startswith('/admin/'):
            # 从Render传递的请求头中获取真实客户端IP
            client_ip = request.META.get('HTTP_X_REAL_IP') or \
                        request.META.get('HTTP_X_FORWARDED_FOR', '').split(',')[0].strip() or \
                        request.META.get('REMOTE_ADDR')
            
            # 检查IP是否在白名单内
            if client_ip not in ALLOWED_ADMIN_IPS:
                return HttpResponseForbidden("无访问权限:你的IP不在Admin面板允许列表中")
        
        response = self.get_response(request)
        return response
  1. 在项目的settings.py中,将这个中间件添加到MIDDLEWARE列表末尾:
MIDDLEWARE = [
    # 保留原有的其他中间件...
    '你的项目名.middleware.RestrictAdminIPMiddleware',
]
  1. 确保settings.py中配置了正确的代理头(Render部署必需):
USE_X_FORWARDED_HOST = True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

注意事项

  • 你的公网IP可以通过搜索引擎查询“我的IP”获取,若使用动态IP,需定期更新白名单中的IP地址
  • 部署到Render后,测试时用非允许IP访问/admin/,应该会返回403禁止访问页面
  • 此方法对所有admin路径生效,包括子页面,无需单独修改admin视图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:41:01