NGINX 访问模块和内部 DNS:如何仅允许本地客户端

NGINX 访问模块和内部 DNS:如何仅允许本地客户端

我搜索了 serverfault,但找不到答案。也许我只是不知道正确的关键字,或者这是一个概念上的误解。任何帮助都将不胜感激!

情况:

  1. 我的本地服务在 NGINX 反向代理后面运行
  2. 我用的是路由器上的 LAN DNS(Draytek)将对 *.example.com 的本地请求直接解析到我的本地服务器(192.168.1.2)。

即使没有互联网连接,域名也会解析到本地服务器,所有服务都可以访问。这就是我使用 LAN DNS 的原因。到目前为止一切顺利。

现在我想仅允许本地客户端使用NGINX 访问模块和:

allow 192.168.1.0/24;
deny all;

但是 NGINX 只能看到路由器的公网 IP,而看不到客户端的 IP(192.168.1.100),因此所有请求都会被拒绝:

[...] access forbidden by rule, client: 123.123.123.123, server: service.example.de, request: [...]"

我的问题是:

在这种情况下,如何区分 NGINX 上的本地客户端和远程客户端?

链接至网络图


答案1

首先是一个假设/条件,即检查你的路由器是否添加了X-转发标题或类似内容(保留实际客户端 IP 的踪迹)

您应该首先通过以下方式解析客户端 IP:ngx_http_realip_module

那里提供的示例配置:

set_real_ip_from  192.168.1.0/24;
set_real_ip_from  192.168.2.1;
set_real_ip_from  2001:0db8::/32;
real_ip_header    X-Forwarded-For;
real_ip_recursive on;

这样,用于访问检查的 IP 应该是正确的(实际客户端)。

需要注意的是,在这样的配置下,无法将路由器添加到 X-Forwarded-For 标头自动地使用 proxy_add_x_forwarded_for,因为通过此命令添加的 IP 将被前一个指令更改。该特定案例已在关于堆栈溢出

相关内容