文章彙整

如果使用Cloudflare取IP的問題和解決方法

Astral WebBy Astral Web 1 month agoNo Comments
首頁  /  網站技術與設計  /  後端開發  /  如果使用Cloudflare取IP的問題和解決方法

由於網路發展的快速,越來越多開發者為了避免使用者等待網頁讀取時間過長而使用CDN,而CloudFlare是如今網站常用的CDN服務供應商,專門提供網站加速與安全防護的服務。

最近遇到了一個有使用CloudFlare專案的需求是記錄使用者的IP方便確認哪些是惡意攻擊的使用者以方便封鎖。但因為這個專案是有使用CloudFlare,取到的IP都是從CloudFlare出來的,無法確認真正的使用者是從哪裡來。

以下就要來介紹的是在使用CloudFlare時取得使用者真實IP的方法。

一般沒有使用CloudFlare的網站,以NGINX和PHP為例,取使用者IP的順序會是以下列表的順序

  • HTTP_CLIENT_IP
  • HTTP_X_FORWARDED_FOR
  • HTTP_X_FORWARDED
  • HTTP_X_CLUSTER_CLIENT_IP
  • HTTP_FORWARDED_FOR
  • HTTP_FORWARDED
  • REMOTE_ADDR

但是網站有使用CloudFlare的話,是無法利用以上的參數取得使用者真實IP,只會拿到從CloudFlare反向代理出來的IP。

而CloudFlare有提供設定的方法去到這個檔案“/etc/nginx/conf.d/nginx-cloudflase-realip.conf”

貼上以下設定

set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2c0f:f248::/32;
set_real_ip_from 2a06:98c0::/29;

#use any of the following two

real_ip_header CF-Connecting-IP;
#real_ip_header X-Forwarded-For;

貼上後並重啟nginx,最後在PHP中就可以取得$_SERVER[“HTTP_CF_CONNECTING_IP”]

在尚未被CloudFlare轉址前的IP。

 

參考資料

https://devco.re/blog/2014/06/19/client-ip-detection/

https://stackoverflow.com/questions/43689588/how-to-set-up-realip-module-in-nginx

 

以上就是本篇的分享呦!大家都知道該如何做了嗎?喜歡歐斯瑞文章的讀者們,記得追蹤我們的Facebook粉絲團IG,也別忘了訂閱電子報,隨時掌握第一手消息喔!若有任何問題,歡迎隨時聯繫我們

 000

歐斯瑞

歐斯瑞 - 一個對網路世界充滿熱情的團隊

歐斯瑞提供免費電商知識,並協助各大類型之企業 電商諮詢建置MagentoShopify 相關的電商專案。

立即聯繫我們

推薦文章

Categories:
  後端開發網站技術與設計

留下回應

你的電子郵件地址不會被公開.