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

使用 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