前言:
此时看官们对“nginx 请求ip”都比较关怀,你们都想要知道一些“nginx 请求ip”的相关内容。那么小编同时在网摘上收集了一些关于“nginx 请求ip””的相关文章,希望我们能喜欢,朋友们快快来了解一下吧!简介
在使用 nginx 做反向代理时,后端要获取到客户端 IP,需要在 nginx 上设置对应的配置。
设置转发请求头
设置 HTTP 请求头中的 X-Forwarded-For,X-Real-IP
... location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # proxy_set_header X-Forwarded-For $remote_addr; proxy_pass ; } ...
X-Real-IP 如果有多层转发,只要在第一层设置就可以了,防止变量被覆盖。 X-Forwarded-For 由于取前一个的值,相当于经过 nginx 代理就会追加一个 IP,只要获取第一个就是真实的客户端 IP。
后端获取先获取 X-Real-IP如果获取不到 X-Real-IP,通过 X-Forwarded-For 取如果再取不到,就直接取 remote_addrnginx 配置 X-Forwarded-For 的风险
用户可以通过自己设置请求头来伪造 ip。
比如在发起 http 请求时设置请求头 x-forwarded-for:1.1.1.1。
那么服务器通过 x-forwarded-for 获取到的第一个 ip 就是用户伪造的 ip。
防止伪造方案在只有 1 层 nginx 代理的情况下,设置 nginx 配置
proxy_set_header X-Forwarded-For $remote_addr;
此时$remote_addr 获取的是用户的真实 ip
在有多层反向代理的情况下设置 最外层 nginx 配置和情况 只有一层代理 一样proxy_set_header X-Forwarded-For $remote_addr; 除了最外层之外的 nginx 配置proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
这样就防止了用户通过伪造请求头来伪造真实 ip。
后台只需要从 x-forwarded-for 请求头中取出第一个 ip 就是用户的真实 ip。
后面如果有多个 ip,就是反向代理的 ip
X-Real-IP
只要 第一层 nginx 代理情况下只需配置即可:
proxy_set_header X-Real-IP $remote_addr;
当有多层反向代理时,只能在最外层代理设置
proxy_set_header X-Real-IP $remote_addr;
如果在非最外层设置,则获取到的是反向代理机器的 ip
标签: #nginx 请求ip