Django ALLOWED_HOSTS通过Apache

时间:2016-03-25 12:48:26

标签: django apache mod-wsgi

我正在使用Apache提供Django应用程序。 在Django的settings.py中我有DEBUG = False,因此我必须允许一些主机,例如:ALLOWED_HOSTS = ['.dyndns.org', 'localhost']。这很好,但是我想通过其内部IP地址在本地网络上访问服务器,例如:192.168.0.x127.0.0.1等。我如何定义{{1}如果我想完全通过192.*打开访问权限,请{}} 127.*ALLOWED_HOSTS

2 个答案:

答案 0 :(得分:9)

根据@rnevius的建议,并根据how to setup custom middleware in django中@AlvaroAV的指导原则,我设法用这个中间件解决了问题:

from django.http import HttpResponseForbidden

class FilterHostMiddleware(object):

    def process_request(self, request):

        allowed_hosts = ['127.0.0.1', 'localhost']  # specify complete host names here
        host = request.META.get('HTTP_HOST')

        if host[len(host)-10:] == 'dyndns.org':  # if the host ends with dyndns.org then add to the allowed hosts
            allowed_hosts.append(host)
        elif host[:7] == '192.168':  # if the host starts with 192.168 then add to the allowed hosts
            allowed_hosts.append(host)

        if host not in allowed_hosts:
            raise HttpResponseForbidden

        return None

并在ALLOWED_HOSTS = ['*']中设置settings.py不再以不受控制的方式为所有主机打开。

谢谢你们! :)

答案 1 :(得分:2)

对于那些想知道Django 2.0.dev应该是什么的人(符合@ Zorgmorduk的回答)

您需要使对象可调用:django middleware docs

  1. yourproject / yourapp /
  2. 中创建名为 middleware 的文件夹
  3. yourproject / yourapp / middleware 文件夹中创建一个空文件__init__.py
  4. 创建另一个文件,在本例中为filter_host_middleware.py
  5. filter_host_middleware.py
  6. 中添加此代码

    from django.http import HttpResponseForbidden class FilterHostMiddleware(object): def __init__(self, process_request): self.process_request = process_request def __call__(self, request): response = self.process_request(request) return response def process_request(self, request): 使用与@ Zorgmorduk的回答相同的process_request定义

    1. yourapp .middleware.filter_host_middleware.FilterHostMiddleware添加到项目settings.py中的 MIDDLEWARE ;另外更改ALLOWED_HOSTS=['*']
    2. 你们都准备好了!