Django ALLOWED_HOSTS 通过 Apache 接受本地 IP
Django ALLOWED_HOSTS to accept local IPs through Apache
我正在使用 Apache 提供 Django 应用程序。
在 Django 的 settings.py 中,我有 DEBUG = False
,因此我不得不允许一些主机,例如:ALLOWED_HOSTS = ['.dyndns.org', 'localhost']
。这工作正常,但我也希望通过其内部 IP 地址在本地网络上访问服务器,例如:192.168.0.x
或 127.0.0.1
等。我如何定义 192.*
或 ALLOWED_HOSTS
中的 127.*
,如果我想避免完全打开访问权限 ALLOWED_HOSTS = ['*']
?
根据@rnevius 的建议,并根据@AlvaroAV 在how to setup custom middleware in django 中的指导方针,我设法用这个中间件解决了问题:
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
和 settings.py
中的设置 ALLOWED_HOSTS = ['*']
不再以不受控制的方式为所有主机打开。
谢谢大家! :)
对于那些想知道这在 Django 2 中应该是什么的人。0.dev(与@Zorgmorduk 的回答一致)
您需要使对象可调用:django middleware docs
- 在yourproject/yourapp/
中创建名为middleware的文件夹
- 在 yourproject/yourapp/middleware 文件夹中创建一个空文件
__init__.py
。
- 创建另一个文件,在本例中为
filter_host_middleware.py
在filter_host_middleware.py
内添加这段代码:
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):`
# use the same process_request definition as in @Zorgmorduk's answer
- 将你的应用程序.middleware.filter_host_middleware.FilterHostMiddleware添加到你项目
settings.py
中的中间件;另外更改 ALLOWED_HOSTS=['*']
大功告成!
我正在使用 Apache 提供 Django 应用程序。
在 Django 的 settings.py 中,我有 DEBUG = False
,因此我不得不允许一些主机,例如:ALLOWED_HOSTS = ['.dyndns.org', 'localhost']
。这工作正常,但我也希望通过其内部 IP 地址在本地网络上访问服务器,例如:192.168.0.x
或 127.0.0.1
等。我如何定义 192.*
或 ALLOWED_HOSTS
中的 127.*
,如果我想避免完全打开访问权限 ALLOWED_HOSTS = ['*']
?
根据@rnevius 的建议,并根据@AlvaroAV 在how to setup custom middleware in django 中的指导方针,我设法用这个中间件解决了问题:
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
和 settings.py
中的设置 ALLOWED_HOSTS = ['*']
不再以不受控制的方式为所有主机打开。
谢谢大家! :)
对于那些想知道这在 Django 2 中应该是什么的人。0.dev(与@Zorgmorduk 的回答一致)
您需要使对象可调用:django middleware docs
- 在yourproject/yourapp/ 中创建名为middleware的文件夹
- 在 yourproject/yourapp/middleware 文件夹中创建一个空文件
__init__.py
。 - 创建另一个文件,在本例中为
filter_host_middleware.py
在
filter_host_middleware.py
内添加这段代码: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):` # use the same process_request definition as in @Zorgmorduk's answer
- 将你的应用程序.middleware.filter_host_middleware.FilterHostMiddleware添加到你项目
settings.py
中的中间件;另外更改ALLOWED_HOSTS=['*']
大功告成!