Symfony 的请求和反向代理

发布于 2024-11-28 14:26:37 字数 217 浏览 2 评论 0原文

我有apache2和nginx。我在配置中将“信任代理标头”设置为 true,但无论如何在调用 $request->getClientIp(); 时获取内部 ip 我做错了什么?

如果我使用参数 $proxy = true 调用 getClientIp ,那么我会得到正确的 IP。但是有启用代理标头的配置,这还不够吗?

I've apache2 and nginx. I set "trust proxy headers" to true in configuration, but anyway get internal ip when calls $request->getClientIp(); What do I wrong?

If I calling getClientIp with parameter $proxy = true then I getting correct IP. But there is configuration where proxy headers enabled, aren't that enough?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你穿错了嫁妆 2024-12-05 14:26:37

简而言之:如果您计划使用某种反向代理,则始终需要使用$proxy = true。设置此参数(并启用 trustProxyData();)后,$this->getClientIp(); 将使用反向代理返回正确的 IP。

说明:即使配置后,代理标头仍将返回 HTTP_X_FORWARDED_FORHTTP_CLIENT_IP 作为用户 IP,而 REMOTE_ADDR 将返回服务器本地主机地址(最有可能是 127.0.0.1)。 $proxy = true 正是检查这一点。这是该函数的源代码:

public function getClientIp($proxy = false)
{
    if ($proxy) {
        if ($this->server->has('HTTP_CLIENT_IP')) {
            return $this->server->get('HTTP_CLIENT_IP');
        } elseif (self::$trustProxy && $this->server->has('HTTP_X_FORWARDED_FOR')) {
            return $this->server->get('HTTP_X_FORWARDED_FOR');
        }
    }

    return $this->server->get('REMOTE_ADDR');
}

In short: you always need to use $proxy = true if you're planning on using some kind of reverse proxy. With this parameter set (and trustProxyData(); enabled), $this->getClientIp(); will return the correct IP with reverse proxy.

Explanation: even after configured, proxy headers will return HTTP_X_FORWARDED_FOR or HTTP_CLIENT_IP as the user IP, while REMOTE_ADDR will return server localhost address (most likely 127.0.0.1). $proxy = true checks exactly that. Here's the source code for this function:

public function getClientIp($proxy = false)
{
    if ($proxy) {
        if ($this->server->has('HTTP_CLIENT_IP')) {
            return $this->server->get('HTTP_CLIENT_IP');
        } elseif (self::$trustProxy && $this->server->has('HTTP_X_FORWARDED_FOR')) {
            return $this->server->get('HTTP_X_FORWARDED_FOR');
        }
    }

    return $this->server->get('REMOTE_ADDR');
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文