我的 nginx 后端服务器应该只接受来自前端 1.2.3.4 的请求。但是,我还希望 nginx 记录正确的 IP 地址,因此我使用set_real_ip_from
。但这样做会导致allow
配置中的规则不匹配,并且 nginx 将始终返回 403。以下是相关配置:
allow 1.2.3.4;
deny all;
set_real_ip_from 1.2.3.4;
real_ip_heaader X-Real-IP;
我该如何解决这个问题?
答案1
我自己也在寻找这个问题,因为我花了“一段时间”才找到解决方案,所以我将它放在这里以方便其他人。
在这种情况下,允许/拒绝构造将不起作用,因为它们不适用于真实的 IP 变量。
相反,你可以使用$http_x_forwarded_for多变的:
## this goes before server section
## it allows us to check if forwarded ip is allowed to make request or not
map $http_x_real_ip $allowed {
default false;
## your ip goes here
~\s111.111.111.111 true;
## other ips you want to allow
}
server {
## ... other instructions...
set_real_ip_from 1.2.3.4;
real_ip_header X-Forwarded-For;
## you may want to add this to get "truly" real ip
real_ip_recursive on;
## ... other instructions...
## or any other location you need
location / {
if ($allowed = false) {
return 403;
}
## ... other instructions...
}
}