前言

之前有一天在看后台的时候突然发现客户端 IP 显示的只有代理服务器的 IP 172.17.0.1,即使是不同网络情况下依旧只显示这一个 IP,大概就像这样

然后尝试试了一下不通过 Nginx,直接带端口访问之后,后台能正确显示客户端 IP,于是就确定了是 Nginx 反代导致的问题

知道了原因之后在网上也查了下 Nginx 怎么获取真实 IP,然后发现查询到的配置都是在已经配置好了的,所以并没有起到什么作用,后来也去 AdGuard Home 项目的 Issues 里查了查,也没有找到什么有用的帮助 (主要还是英语不太行)

因为那会一直没找到原因 (其实当时忘记去看官方文档了),网上也没找到靠谱的解决方法,就一直摆烂下去了,直到前段时间在机缘巧合之下在官方文档看到了可能是解决问题的办法,于是进行尝试一下,结果意想不到的是解决掉了这个问题

解决方法

以下为当时参考的官方文档及解决方法



  1. 在 Nginx 的反代配置中加入相应配置,省略号部分请自行补全
1
2
3
4
5
6
location /dns-query {
···
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
···
}
  1. 修改 AdGuard Home配置文件 AdGuardHome.yaml
    中的 trusted_proxies 选项,将所显示代理服务器 IP 网段加入,如我的是 172.0.0.1,可加入网段 172.0.0.0/16,以下为默认配置
1
2
3
trusted_proxies:
- 127.0.0.0/8
- ::1/128

加入后的示例配置

1
2
3
4
trusted_proxies:
- 127.0.0.0/8
- ::1/128
- 172.0.0.0/16
  1. 修改完成后分别需要手动重载 Nginx 和 重启 AdGuard Home 即可生效