Skip to content

可信请求

在使用单个 Web 服务器为网站提供服务的正常设置中,获取用户信息(如主机和 IP 地址)将开箱即用。但是,如果您的 Yii 应用程序在反向代理后面运行,则需要添加配置来检索此信息,因为直接客户端现在是代理,用户 IP 地址由代理设置的标头传递给 Yii 应用程序。

除非您明确信任代理,否则不应盲目信任代理提供的标头。Yii 支持通过 Yiisoft\Yii\Web\Middleware\TrustedHostsNetworkResolver 配置可信代理。您应该将其添加到中间件堆栈

以下是在一组反向代理后面运行的应用程序的请求配置,这些代理位于 10.0.2.0/24 IP 网络中:

php
/** @var \Yiisoft\Yii\Web\Middleware\TrustedHostsNetworkResolver $trustedHostsNetworkResolver */
$trustedHostsNetworkResolver = $trustedHostsNetworkResolver->withAddedTrustedHosts(['1.0.2.0/24']);

代理默认在 X-Forwarded-For 标头中发送 IP,协议(httphttps)在 X-Forwarded-Proto 中。

如果您的代理使用不同的标头,您可以使用请求配置来调整这些,例如:

php
/** @var \Yiisoft\Yii\Web\Middleware\TrustedHostsNetworkResolver $trustedHostsNetworkResolver */
$trustedHostsNetworkResolver = $trustedHostsNetworkResolver
    ->withAddedTrustedHosts(
        ['1.0.2.0/24'],
        ['X-ProxyUser-Ip'],
        ['Front-End-Https'],
        [],
        [],
        ['X-Proxy-User-Ip']
    );

使用上述配置,X-ProxyUser-IpFront-End-Https 标头用于获取用户 IP 和协议。