Nginx+Cloudflare-取得使用者真實IP

使用 Python + Nginx + Cloudflare 架設網站但卻因為 Cloudflare 的關係無法取得使用者真實IP? 但其實 Cloudflare 都幫你想好了!

使用 Python 或者其他的程式語言架設網站的時候勢必一定要有個 Webserver 作為代理,但在有些時候網站的一些套件需要取得使用者的 IP 要如何取得?

一般來說 Nginx 只要在 virtualhost conf 中設定以下就可以了

proxy_set_header Host $host; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

在程式部分 (使用 flask)

from flask import request 
ip=request.headers['X-Forwarded-For']

這樣就可以取得使用者的 IP 了 但如果在 Nginx 前面還加個 Cloudflare CDN 怎麼辦?
其實在官方文件中有提到這點 Restoring original visitor IPs

Nginx 上有提到的 Cloudflare IP 區間不一定是固定的,可能隨時會變動
ergin 就寫出一個可以自動更新的腳本 nginx-cloudflare-real-ip
然後我就 fork 之後把他的 readme 做翻譯
大致上跟著操作就可以了 最後別忘了到 Nginx 的 access log 查看 IP 是不是變成使用者的 IP


© 2018. All rights reserved.