Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django request.get_host()在哪里获取它';什么信息来自?(如何使其具有主机名,而不是IP?)_Django - Fatal编程技术网

Django request.get_host()在哪里获取它';什么信息来自?(如何使其具有主机名,而不是IP?)

Django request.get_host()在哪里获取它';什么信息来自?(如何使其具有主机名,而不是IP?),django,Django,我有一个django实例,它使用apache和mod_wsgi在虚拟机上提供服务(不是由我管理) 我从request.get\u host()(和build\u absolute\u uri())中获取的值是虚拟机的内部网络IP地址,而不是我用于发出HTTP请求的internet DNS主机名 django外部需要进行什么配置才能使django认为它的主机就是外部主机名 (目前我在settings.py中遇到了一个漏洞,我在其中写入主机名并使用它来构建URL等,作为一种解决方法)。如果您设置了d

我有一个django实例,它使用apache和mod_wsgi在虚拟机上提供服务(不是由我管理)

我从
request.get\u host()
(和
build\u absolute\u uri()
)中获取的值是虚拟机的内部网络IP地址,而不是我用于发出HTTP请求的internet DNS主机名

django外部需要进行什么配置才能使django认为它的主机就是外部主机名


(目前我在settings.py中遇到了一个漏洞,我在其中写入主机名并使用它来构建URL等,作为一种解决方法)。

如果您设置了django设置
use_X_FORWARDED_host
集,那么django将查找名为
X-FORWARDED-host
的请求头并使用它

如果上述情况无法实现,django将使用
Host
请求头

如果上述两种方法都不起作用(这种情况应该很少见),django将使用WSGI环境变量
SERVER\u NAME
,它很可能是python应用程序服务器正在侦听的套接字的IPv4/v6地址


最有可能的情况是,您正在python服务器前面运行一个反向代理服务器,代理正在更改原始请求的主机头。如果是这种情况,您可能需要设置设置。在django中使用_X_FORWARDED_HOST,并告诉您的代理在
X-FORWARDED-HOST

中传递原始主机头。如果设置了django设置
使用_X_FORWARDED_HOST
,django将查找名为
X-FORWARDED-HOST
的请求头并使用它

如果上述情况无法实现,django将使用
Host
请求头

如果上述两种方法都不起作用(这种情况应该很少见),django将使用WSGI环境变量
SERVER\u NAME
,它很可能是python应用程序服务器正在侦听的套接字的IPv4/v6地址


最有可能的情况是,您正在python服务器前面运行一个反向代理服务器,代理正在更改原始请求的主机头。如果是这种情况,您可能需要设置设置。在django中使用_X_FORWARDED_HOST,并告诉您的代理在
X-FORWARDED-HOST

中传递原始主机头。如果设置了django设置
使用_X_FORWARDED_HOST
,django将查找名为
X-FORWARDED-HOST
的请求头并使用它

如果上述情况无法实现,django将使用
Host
请求头

如果上述两种方法都不起作用(这种情况应该很少见),django将使用WSGI环境变量
SERVER\u NAME
,它很可能是python应用程序服务器正在侦听的套接字的IPv4/v6地址


最有可能的情况是,您正在python服务器前面运行一个反向代理服务器,代理正在更改原始请求的主机头。如果是这种情况,您可能需要设置设置。在django中使用_X_FORWARDED_HOST,并告诉您的代理在
X-FORWARDED-HOST

中传递原始主机头。如果设置了django设置
使用_X_FORWARDED_HOST
,django将查找名为
X-FORWARDED-HOST
的请求头并使用它

如果上述情况无法实现,django将使用
Host
请求头

如果上述两种方法都不起作用(这种情况应该很少见),django将使用WSGI环境变量
SERVER\u NAME
,它很可能是python应用程序服务器正在侦听的套接字的IPv4/v6地址


最有可能的情况是,您正在python服务器前面运行一个反向代理服务器,代理正在更改原始请求的主机头。如果是这种情况,您可能需要设置设置。使用django中的\X\u FORWARDED\u HOST,并告诉您的代理在
X-FORWARDED-HOST
中传递原始主机头。我想稍微扩展一下ender672的答案

当您向Django发送请求时,在请求对象中有META arrtibute(request.META) 该属性是一个包含大量键/值的字典。以下是我的例子中的META:

看这幅画的结尾。你看到HTTP_X_主机了吗?那把钥匙是自动生成的。它将始终出现在这里,除非您开始更改请求类的源代码

所以服务器知道它的外部IP(您用来访问服务器),但它在Django内部不使用它,因为默认情况下
使用\ux\uForwarded\uHost=False
。在这个场景中,它将使用request.META.HTTP_主机,您可以看到上面的图片

这就是为什么需要在Django设置中添加新行:

USE_X_FORWARDED_HOST = True

之后,它将开始用外部地址替换其内部地址。

我想稍微扩展一下ender672的答案

当您向Django发送请求时,在请求对象中有META arrtibute(request.META) 该属性是一个包含大量键/值的字典。以下是我的例子中的META:

看这幅画的结尾。你看到HTTP_X_主机了吗?那把钥匙是自动生成的。它将始终出现在这里,除非您开始更改请求类的源代码

所以服务器知道它的外部IP(您用来访问服务器),但它在Django内部不使用它,因为默认情况下
使用\ux\uForwarded\uHost=False
。在这个场景中,它将使用request.META.HTTP_主机,您可以看到上面的图片

这就是为什么需要在Django设置中添加新行:

USE_X_FORWARDED_HOST = True

之后,它将开始用外部地址替换其内部地址。

我想稍微扩展一下ender672的答案

当您向Django发送请求时,在请求对象中有META arrtibute(request.META) 那是一种措辞