用了阿里云 cdn 后, nginx 下方的服务如何获取真实 ip? 不太懂 nginx 的配置

2021-08-18 23:58:28 +08:00
 find456789

我不太懂 ngxin 的配置,半斤八两,网上搜了一些资料,似乎还是有些迷糊


我的环境是这样的:

我用的 Python, 然后外面套了一个 nginx, 然后接入了阿里云的 cdn

流量是先到 阿里云 cdn, 再到我的 nginx, 最后到我的 Python web 服务


用了阿里云的 cdn 后, 无法简单快速的 到真实的 ip,

搜索后发现 在 nginx 里添加 一段配置代码,似乎勉强可以

proxy_set_header Host $host;   
proxy_set_header Ali-CDN-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    

但是我加了这个代码后, 在客户端的 headers 里,ali-cdn-real-ip 获取的并不是客户端的真实 ip,而是阿里云 cdn 的 ip (每次刷新会变)

只有 headers 里的 x-forwarded-for 获取的第一个 ip 是客户端真实 ip (没有重新拨号的情况下,刷新也不会改变)


我想问问,阿里云为什么要搞一个 Ali-CDN-Real-IP, 为什么无法用 x-real-ip 获取到真实 ip 呢

阿里云是自己搞了一套标准吗? 它为什么不遵守行业标准, 让 x-real-ip 获取的就是客户端的真实 ip 呢?

我该怎么让 获取真实 ip 这个流程更具有鲁棒性呢?(比如我下次可能换腾讯云的 cdn,或者其他 cdn,是否有一个标准,可以让我更换 cdn 厂家后,我不用改配置文件,也可以获取到 真实的客户端 ip )

谢谢

1535 次点击
所在节点    问与答
7 条回复
find456789
2021-08-19 00:19:28 +08:00
搞定了, 删除配置里的
```
proxy_set_header Ali-CDN-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
```

header 里默认就有 Ali-CDN-Real-IP , 用 Ali-CDN-Real-IP 就可以获取到真实 ip


---

真不知道,为什么阿里云要搞这么复杂, 而且文档也不好找, 我祝福阿里云能倒闭
pupboss
2021-08-19 01:48:26 +08:00
从头到尾没觉得阿里云有什么问题。上了 CDN 本来你就拿不到 IP,因为客户没直接访问你
proxy_add_x_forwarded_for 是可以拿到途经 IPs,但是也可以伪造
CDN 直接接触客户出口 IP,阿里云用自定义的头给你返回真实 IP,你说他自己实现一套标准祝他倒闭
那你觉得阿里云是应该覆盖你哪个请求头呢?覆盖了你会不会又说阿里云不遵守行业规则
pupboss
2021-08-19 01:57:05 +08:00
手机回复,忘了一段,x-real-ip 有他自己的作用,他代表的是连接到本机的地址,在你的例子中,他就应该是 CDN 的 IP,这个不可伪造,而且他的定义是在 nginx 上获取连接到你机器的 IP 。阿里云如果覆盖了他才是不合规范
swulling
2021-08-19 03:13:37 +08:00
这几个都是非标准的 http header 。

其中 forward for 勉强有一个事实标准,所以应该以此为准
yeqizhang
2021-08-19 08:45:50 +08:00
阿里云可能真的文档不好找吧。但是你如果搞清楚了$remote_addr 是啥就不会去抄那些错误的配置了
ch2
2021-08-19 11:46:58 +08:00
用了 CDN 就只能通过他们私有的请求头获取你想要的信息
julyclyde
2021-08-19 12:47:59 +08:00
@pupboss X-系列谈不上规范

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/796648

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX