<-
Apache HTTP 服务器 2.4 > Apache模块mod_remoteip

Apache模块mod_remoteip

描述:用代理或负载平衡器通过请求标头提供的用户代理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 %acore %a格式字符串。连接的基础客户端IP在%{c}a格式字符串中可用。

仅从此服务器信任的中间主机(代理等)启用此行为非常重要,因为远程用户代理模拟另一个用户代理很简单。
支持Apache!

主题

指令

错误修正清单

也可以看看

最佳

远程IP处理

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

IPv4 over IPv6映射的地址

一般而言,与httpd一样,任何IPv4-over-IPv6映射地址都以其IPv4表示形式记录。

内部(私人)地址

所有内部地址10 / 8、172.16 / 12、192.168 / 16、169.254 / 16和127/8块(以及公共2000 :: / 3块之外的IPv6地址)仅在RemoteIPInternalProxy 内部(内部网)代理处于以下状态时由mod_remoteip评估:注册。
最佳

RemoteIPHeader 指令

描述:声明应该为用户代理IP地址解析的标头字段
句法:RemoteIPHeader header-field
内容:服务器配置,虚拟主机
状态:基础
模块:mod_remoteip

RemoteIPHeader指令触发 mod_remoteip将指定的 标头字段标头的值视为useragent IP地址或中间useragent IP地址列表,这取决于RemoteIPInternalProxyand RemoteIPTrustedProxy指令的进一步配置。除非使用这些其他指令,mod_remoteip否则将信任所有提供RemoteIPHeaderIP值的主机。

内部(负载均衡器)示例

RemoteIPHeader X-Client-IP

代理示例

RemoteIPHeader X-Forwarded-For
最佳

RemoteIPInternalProxy 指令

描述:声明受信任的客户端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
最佳

RemoteIPInternalProxyList 指令

描述:声明受信任的客户端Intranet IP地址以显示RemoteIPHeader值
句法:RemoteIPInternalProxyList filename
内容:服务器配置,虚拟主机
状态:基础
模块:mod_remoteip

RemoteIPInternalProxyList伪指令指定在启动时解析的文件,并构建一个地址(或地址块)列表以表示用户代理IP的有效RemoteIPHeader值,从而值得信任。

' #'哈希字符表示注释行,否则,每个空格或换行符分隔的条目均与RemoteIPInternalProxy指令相同地处理。

内部(负载均衡器)示例

RemoteIPHeader X-Client-IP
RemoteIPInternalProxyList conf/trusted-proxies.lst

conf / trusted-proxies.lst目录

# Our internally trusted proxies;
10.0.2.0/24         #Everyone in the testing group
gateway.localdomain #The front end balancer
最佳

RemoteIPProxiesHeader 指令

描述:声明标题字段,该字段将记录所有中间IP地址
句法:RemoteIPProxiesHeader HeaderFieldName
内容:服务器配置,虚拟主机
状态:基础
模块:mod_remoteip

RemoteIPProxiesHeader指令指定一个头成mod_remoteip将收集所有的中间客户端IP地址的列表信任解析请求的用户代理IP。请注意,中间 RemoteIPTrustedProxy地址记录在此标头中,而任何中间 RemoteIPInternalProxy地址都将被丢弃。

RemoteIPHeader X-Forwarded-For
RemoteIPProxiesHeader X-Forwarded-By
最佳

RemoteIPProxyProtocol 指令

描述:启用或禁用代理协议处理
句法: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>
最佳

RemoteIPProxyProtocolExceptions 指令

描述:禁用某些主机或网络的PROXY标头处理
句法:RemoteIPProxyProtocolExceptions host|range [host|range] [host|range]
内容:服务器配置,虚拟主机
状态:基础
模块:mod_remoteip
兼容性:RemoteIPProxyProtocolExceptions仅在httpd 2.4.31和更高版本中可用

RemoteIPProxyProtocol指令启用或禁用PROXY协议连接头的读取和处理。有时,要求客户端提供PROXY标头,但允许其他客户端在没有它的情况下进行连接是理想的。该指令允许服务器管理员配置单个主机或CIDR范围内的主机。通常,这对于监视和管理直接到上游负载均衡器后面的服务器的虚拟主机的通信非常有用。

最佳

RemoteIPTrustedProxy 指令

描述:声明受信任的客户端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
最佳

RemoteIPTrustedProxyList 指令

描述:声明受信任的客户端Intranet IP地址以显示RemoteIPHeader值
句法:RemoteIPTrustedProxyList filename
内容:服务器配置,虚拟主机
状态:基础
模块:mod_remoteip

RemoteIPTrustedProxyList伪指令指定在启动时解析的文件,并构建一个地址(或地址块)列表以表示用户代理IP的有效RemoteIPHeader值,从而值得信任。

' #'哈希字符表示注释行,否则,每个空格或换行符分隔的条目均与RemoteIPTrustedProxy指令相同地处理。

可信(负载均衡器)示例

RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxyList conf/trusted-proxies.lst

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

可用语言: zh  |  fr 

最佳

注释

注意:
这不是“问答”部分。此处放置的评论应指向有关改进文档或服务器的建议,如果实施或被认为无效/偏离主题,我们的主持人可以将其删除。有关如何管理Apache HTTP Server的问题,应直接指向我们的IRC频道#httpd(位于Freenode上),或发送至我们的邮件列表
目前,此页面已禁用评论。