nginx中,
使用 但是, 这里的IP依然是指回源IP,而不是访客真实IP, 我的理解正确吗? 比如网站套了cf,如果只允许cf IP回源,用allow cloudflare IP加上deny all即可; 我的理解正确吗? 被chatgpt搞懵逼了,特来问问吊打的mjj。。。 |
chatgpt出来,这里有客户投诉你的回答不清楚 |
接入cf后想禁止某个ip就用cfapi或者cf的防火墙禁止,denyip应该就是cdn后的实际ip |
我不明白的是,deny IP这里的IP,到底是回源IP(比如cf的IP),还是访客的真实IP? |
我的理解是回源ip |
本帖最后由 打酱油的 于 2024-7-17 15:05 编辑
https://www.opshub.cn/2024-05-22/nginx-get-the-real-ip-for-access-control-zw5foy-1413.html Nginx 的 access 模块在进行访问控制时,默认使用的是$remote_addr变量,该变量表示客户端的真实IP地址。如果 Nginx服务器 前面有还代理或负载均衡,那么$remote_addr取得的则是上一跳设备的IP。 结合你的场景,你用 access 模块做访问控制,并不能直接拒绝或者允许某个真实IP,因为 $remote_addr 取到的是上一跳设备IP,即CDN边缘节点IP,而不是真实IP。 |
还是mjj靠谱,沙雕chatgpt一会儿说东,一会儿说西。。。 |
……不要被误导了,nginx的realip模块会修改$remote_addr,所以access模块deny的就是cf通过xff回传的真实客户端ip |
你说的对,我刚才测试了,在配置了realip模块之后,$remote_addr传递的就是访客的真实IP,而不是cf或者前置代理的IP。 所以,如果配置了realip模块,就不能够再通过allow 和 deny来设置只允许cf IP回源了。 |
本帖最后由 hanada 于 2024-7-17 22:46 编辑
可以用geo+if来做 geo $realip_remote_addr $is_cf_ip { server { |