描述: | 用代理或负载平衡器通过请求标头提供的用户代理IP地址列表替换用于连接的原始客户端IP地址。 |
---|---|
状态: | 基础 |
模块标识符: | remoteip_module |
源文件: | mod_remoteip.c |
此模块用于将发起请求的用户代理视为httpd标识的发起用户代理,以进行授权和记录,即使该用户代理位于负载均衡器,前端服务器或代理服务器之后。
该模块使用在使用RemoteIPHeader
伪指令配置的请求标头中报告的用户代理IP地址覆盖连接的客户端IP地址。
此外,使用该
指令时,此模块可实现HAProxy的PROXY协议的服务器端
RemoteIPProxyProtocol
。
一旦更换的指示,此重写用户代理的IP地址,然后使用该mod_authz_host
Require ip
功能,被报道mod_status
,并且被记录
mod_log_config
%a
和core
%a
格式字符串。连接的基础客户端IP在%{c}a
格式字符串中可用。
Apache默认情况下使用连接的client_ip值标识useragent,并且连接remote_host和remote_logname从该值派生。这些字段在身份验证,授权和日志记录以及其他可加载模块的其他用途中起作用。
在请求期间,mod_remoteip会使用由代理或负载平衡器提供的广告用户代理IP覆盖连接的客户端IP。负载平衡器可能会与服务器建立长期的keepalive连接,并且即使负载平衡器的基础客户端IP地址保持不变,每个请求也将具有正确的用户代理IP。
标头值中列出了多个逗号分隔的用户代理IP地址时,将按从右到左的顺序处理它们。当不信任给定的用户代理IP地址来显示先前的IP地址时,处理将暂停。标头字段将更新为该未确认IP地址的其余列表,或者如果所有IP地址都受信任,则此标头将从请求中完全删除。
在覆盖客户端IP时,模块将中间主机列表存储在remoteip-proxy-ip-list注释中,该注释mod_log_config
可以使用%{remoteip-proxy-ip-list}n
格式令牌进行记录。如果管理员需要将其存储为其他标头,则也可以使用指令将该相同的值记录为标头
RemoteIPProxiesHeader
。
RemoteIPInternalProxy
内部(内部网)代理处于以下状态时由mod_remoteip评估:注册。描述: | 声明应该为用户代理IP地址解析的标头字段 |
---|---|
句法: | RemoteIPHeader header-field |
内容: | 服务器配置,虚拟主机 |
状态: | 基础 |
模块: | mod_remoteip |
该RemoteIPHeader
指令触发
mod_remoteip
将指定的
标头字段标头的值视为useragent IP地址或中间useragent IP地址列表,这取决于RemoteIPInternalProxy
and
RemoteIPTrustedProxy
指令的进一步配置。除非使用这些其他指令,mod_remoteip
否则将信任所有提供RemoteIPHeader
IP值的主机。
RemoteIPHeader X-Client-IP
RemoteIPHeader X-Forwarded-For
描述: | 声明受信任的客户端Intranet IP地址以显示RemoteIPHeader值 |
---|---|
句法: | RemoteIPInternalProxy proxy-ip|proxy-ip/subnet|hostname ... |
内容: | 服务器配置,虚拟主机 |
状态: | 基础 |
模块: | mod_remoteip |
该RemoteIPInternalProxy
指令在呈现用户代理IP的有效RemoteIPHeader值时,添加了一个或多个地址(或地址块)以进行信任。与RemoteIPTrustedProxy
指令不同
,从这些代理服务器传递时,此标头中显示的任何IP地址(包括专用Intranet地址)都是受信任的。
RemoteIPHeader X-Client-IP RemoteIPInternalProxy 10.0.2.0/24 RemoteIPInternalProxy gateway.localdomain
描述: | 声明受信任的客户端Intranet IP地址以显示RemoteIPHeader值 |
---|---|
句法: | RemoteIPInternalProxyList filename |
内容: | 服务器配置,虚拟主机 |
状态: | 基础 |
模块: | mod_remoteip |
该RemoteIPInternalProxyList
伪指令指定在启动时解析的文件,并构建一个地址(或地址块)列表以表示用户代理IP的有效RemoteIPHeader值,从而值得信任。
' #
'哈希字符表示注释行,否则,每个空格或换行符分隔的条目均与RemoteIPInternalProxy
指令相同地处理。
RemoteIPHeader X-Client-IP RemoteIPInternalProxyList conf/trusted-proxies.lst
# Our internally trusted proxies; 10.0.2.0/24 #Everyone in the testing group gateway.localdomain #The front end balancer
描述: | 声明标题字段,该字段将记录所有中间IP地址 |
---|---|
句法: | RemoteIPProxiesHeader HeaderFieldName |
内容: | 服务器配置,虚拟主机 |
状态: | 基础 |
模块: | mod_remoteip |
该RemoteIPProxiesHeader
指令指定一个头成mod_remoteip
将收集所有的中间客户端IP地址的列表信任解析请求的用户代理IP。请注意,中间
RemoteIPTrustedProxy
地址记录在此标头中,而任何中间
RemoteIPInternalProxy
地址都将被丢弃。
RemoteIPHeader X-Forwarded-For RemoteIPProxiesHeader X-Forwarded-By
描述: | 启用或禁用代理协议处理 |
---|---|
句法: | RemoteIPProxyProtocol On|Off |
内容: | 服务器配置,虚拟主机 |
状态: | 基础 |
模块: | mod_remoteip |
兼容性: | RemoteIPProxyProtocol仅在httpd 2.4.31及更高版本中可用 |
该RemoteIPProxyProtocol
指令启用或禁用PROXY协议连接头的读取和处理。如果启用了该On
标志,则上游客户端
每次打开连接时都必须发送标头,否则该连接将被中止,除非该主机在RemoteIPProxyProtocolExceptions
指令提供的禁用主机列表中
。
尽管可以在任何虚拟主机中指定此指令,但重要的是要了解,因为PROXY协议基于连接并且与协议无关,所以启用和禁用实际上是基于IP地址和端口的。这意味着,如果同一主机和端口具有多个基于名称的虚拟主机,并且为其中任何一个启用了虚拟主机,则将为所有这些主机(具有该主机和端口)启用虚拟主机。这也意味着,如果您尝试在一个协议中启用PROXY协议,而在另一个协议中禁用,则将无效。在这种情况下,最后一个获胜,并会记录一条通知,指出哪个设置已被覆盖。
Listen 80 <VirtualHost *:80> ServerName www.example.com RemoteIPProxyProtocol On #Requests to this virtual host must have a PROXY protocol # header provided. If it is missing, the connection will # be aborted </VirtualHost> Listen 8080 <VirtualHost *:8080> ServerName www.example.com RemoteIPProxyProtocol On RemoteIPProxyProtocolExceptions 127.0.0.1 10.0.0.0/8 #Requests to this virtual host must have a PROXY protocol # header provided. If it is missing, the connection will # be aborted except when coming from localhost or the # 10.x.x.x RFC1918 range </VirtualHost>
描述: | 禁用某些主机或网络的PROXY标头处理 |
---|---|
句法: | RemoteIPProxyProtocolExceptions host|range [host|range] [host|range] |
内容: | 服务器配置,虚拟主机 |
状态: | 基础 |
模块: | mod_remoteip |
兼容性: | RemoteIPProxyProtocolExceptions仅在httpd 2.4.31和更高版本中可用 |
该RemoteIPProxyProtocol
指令启用或禁用PROXY协议连接头的读取和处理。有时,要求客户端提供PROXY标头,但允许其他客户端在没有它的情况下进行连接是理想的。该指令允许服务器管理员配置单个主机或CIDR范围内的主机。通常,这对于监视和管理直接到上游负载均衡器后面的服务器的虚拟主机的通信非常有用。
描述: | 声明受信任的客户端Intranet IP地址以显示RemoteIPHeader值 |
---|---|
句法: | RemoteIPTrustedProxy proxy-ip|proxy-ip/subnet|hostname ... |
内容: | 服务器配置,虚拟主机 |
状态: | 基础 |
模块: | mod_remoteip |
该RemoteIPTrustedProxy
指令在呈现用户代理IP的有效RemoteIPHeader值时,添加了一个或多个地址(或地址块)以进行信任。与该RemoteIPInternalProxy
指令不同
,此类代理报告的任何Intranet或私有IP地址,包括10 / 8、172.16 / 12、192.168 / 16、169.254 / 16和127/8块(或IPv6公用2000 :: / 3块之外) )不被视为用户代理IP,而是保留在
RemoteIPHeader
标头的值中。
RemoteIPHeader X-Forwarded-For RemoteIPTrustedProxy 10.0.2.16/28 RemoteIPTrustedProxy proxy.example.com
描述: | 声明受信任的客户端Intranet IP地址以显示RemoteIPHeader值 |
---|---|
句法: | RemoteIPTrustedProxyList filename |
内容: | 服务器配置,虚拟主机 |
状态: | 基础 |
模块: | mod_remoteip |
该RemoteIPTrustedProxyList
伪指令指定在启动时解析的文件,并构建一个地址(或地址块)列表以表示用户代理IP的有效RemoteIPHeader值,从而值得信任。
' #
'哈希字符表示注释行,否则,每个空格或换行符分隔的条目均与RemoteIPTrustedProxy
指令相同地处理。
RemoteIPHeader X-Forwarded-For RemoteIPTrustedProxyList conf/trusted-proxies.lst
# Identified external proxies;
192.0.2.16/28 #wap phone group of proxies
proxy.isp.example.com #some well known ISP