Nginx 從 Gcore CDN 獲得用戶真實 IP

前言

Gcore CDN 是我次要使用的 CDN,主要還是 Cloudflare 在台灣與中華電信喬不攏的關係,導致繞美。而 Gcore 在台灣目前沒有據點,大部分台灣業者會連到香港去,因此延遲通常不會比 Cloudflare 免費版高。而這類 CDN 作為是反向代理的工具,當他回源向你取得資料時,網頁伺服器產生的 Log 是無法直接看到用戶的 IP 位址,你看到的應該會是 Gcore 伺服器的。這篇文章就是來解決這樣的問題。

Gcore IP 列表

Gcore CDN 的 IP 列表非常雜,他的 IPv4 是由一群 /32 所組成的,而 IPv6 也是由一群 /128 所組成的。因此後續在寫這些設定檔的時候會非常複雜。

你可以在 這個連結 查看到 Gcore CDN 目前的所有 IP 位址。

Nginx 的設定

由於 Gcore CDN 的 IP 段太多,我並不建議直接將他寫在每個網站的 Config 之中。我會建議你前往 /etc/nginx 資料夾底下建立一個文件名為 gcore.conf,並將 IP 段都放在裡面。

cd /etc/nginx && sudo vim gcore.conf

內容則是類似於於下面這樣,我下面只有大概寫幾行,而你應該將他網站上的都寫在裡面。

# Gcore IPv4 List
set_real_ip_from 81.253.239.2/32;
set_real_ip_from 80.240.124.10/32;
...

# Gcore IPv6 List
set_real_ip_from 2a01:cfc4:0:7700::3/128;
set_real_ip_from 2a11:27c0:1a1:2803::182/128;
...

real_ip_header X-Forwarded-For;

接著我們要到各個網站的設定檔添加一行 include /etc/nginx/gcore.conf;,通常配置檔會放在 /etc/nginx/sites-enabled/ 底下。

以下是一個範例:

server {
    listen 80;
    server_name www.example.com;

    # Gcore CDN
    include /etc/nginx/gcore.conf;

    location / {
        try_files $uri $uri/ =404;
    }
}

接者,你可以使用 sudo nginx -t 來確定配置是否有問題。再使用 sudo systemctl restart nginx 重啟網頁伺服器即可。

結語

操作到這邊,你就算是完成囉!接著你可以在 /var/log/nginx 底下的 access.log 看到產出的 Log 為真實的用戶 IP 位址!