Nginx - 允许原始IP
Nginx - Allowing origin IP
Nginx 支持 allow
和 deny
语法来限制 IP,例如allow 192.168.1.1;
。但如果流量通过反向代理,IP 将引用代理的 IP。那么如何将其配置为将特定来源 IP 列入白名单并拒绝所有其他传入请求?
remote_addr 将引用代理,但您可以将代理配置为发送带有头字段 X-Real-IP/X-Forwarded-For.
的客户端地址
结合ngx_http_realip模块,可以修改传入的header,使用remote_addr的真实客户端地址。我相信这将按预期使用 allow/deny 语法。
澄清一下 -- allow/deny 语法在启用和配置模块后应该是相同的。在下面替换您的 IP 和代理地址。
后端nginx allow/deny:
location / {
allow <your ip>;
allow 127.0.0.1;
deny all;
}
后端nginx realip配置:
set_real_ip_from <your proxy>;
real_ip_header X-Forwarded-For;
在您的 nginx 代理配置上:
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
如果涉及多个中间代理,则需要使用 set_real_ip_from 指令启用 real_ip_recursive 并将额外地址列入白名单。
我使用 http_geo
模块使用以下配置使其工作:
geo $remote_addr $give_access {
proxy 172.0.0.0/8; # <-- Private IP range here
default 0;
11.22.33.44 1; # <-- Allowed IP here
}
server {
# more config ...
location ^~ /secure_url_here {
if ($give_access = 0) {
return 403;
}
try_files $uri $uri/ /index.php?$args; # <-- Your directive here
}
}
Nginx 支持 allow
和 deny
语法来限制 IP,例如allow 192.168.1.1;
。但如果流量通过反向代理,IP 将引用代理的 IP。那么如何将其配置为将特定来源 IP 列入白名单并拒绝所有其他传入请求?
remote_addr 将引用代理,但您可以将代理配置为发送带有头字段 X-Real-IP/X-Forwarded-For.
的客户端地址结合ngx_http_realip模块,可以修改传入的header,使用remote_addr的真实客户端地址。我相信这将按预期使用 allow/deny 语法。
澄清一下 -- allow/deny 语法在启用和配置模块后应该是相同的。在下面替换您的 IP 和代理地址。
后端nginx allow/deny:
location / {
allow <your ip>;
allow 127.0.0.1;
deny all;
}
后端nginx realip配置:
set_real_ip_from <your proxy>;
real_ip_header X-Forwarded-For;
在您的 nginx 代理配置上:
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
如果涉及多个中间代理,则需要使用 set_real_ip_from 指令启用 real_ip_recursive 并将额外地址列入白名单。
我使用 http_geo
模块使用以下配置使其工作:
geo $remote_addr $give_access {
proxy 172.0.0.0/8; # <-- Private IP range here
default 0;
11.22.33.44 1; # <-- Allowed IP here
}
server {
# more config ...
location ^~ /secure_url_here {
if ($give_access = 0) {
return 403;
}
try_files $uri $uri/ /index.php?$args; # <-- Your directive here
}
}