企業級 CDN 節點可透過 Nginx proxy_cache 模組實現靜態資源緩存、回源加速、負載分發。本文提供從作業系統精簡、防火牆、編譯工具鏈、Nginx 來源碼編譯 (含 ngx_cache_purge 清除模組)、緩存策略配置到驗證的完整生產級部署流程。

| 角色 | IP | 說明 |
|---|---|---|
| Web 來源站 | 61.188.87.100 | 域名 www.win8.net 實際內容伺服器 |
| Nginx CDN 節點 | 192.168.190.128 | CentOS 7、對外提供服務 |
| 客戶端測試機 | 192.168.190.1 | Windows 7、修改 hosts 指向 CDN 節點 |
C:\Windows\System32\drivers\etc\hosts
# 新增一行
192.168.190.128 www.win8.net
vim /etc/selinux/config
# SELINUX=enforcing → 註解
# SELINUXTYPE=targeted → 註解
SELINUX=disabled # 新增
:wq
shutdown -r now
vim /etc/sysconfig/iptables
# 新增
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
/etc/init.d/iptables restart
yum install -y wget make gcc gcc-c++ zlib-devel openssl-devel pcre-devel gd-devel kernel-devel keyutils-libs-devel patch perl
/usr/local/src/usr/local/軟體名cd /usr/local/src
# Nginx 穩定版
wget https://nginx.org/download/nginx-1.8.0.tar.gz
# PCRE (支援 rewrite)
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.35.tar.gz
# ngx_cache_purge (手動清除指定 URL 緩存)
wget https://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
mkdir /usr/local/pcre
tar zxvf pcre-8.35.tar.gz
cd pcre-8.35
./configure --prefix=/usr/local/pcre
make && make install
groupadd www
useradd -g www www -s /bin/false
cd /usr/local/src
tar zxvf ngx_cache_purge-2.3.tar.gz
tar zxvf nginx-1.8.0.tar.gz
cd nginx-1.8.0
./configure \
--prefix=/usr/local/nginx \
--user=www --group=www \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-pcre=/usr/local/src/pcre-8.35 \
--add-module=../ngx_cache_purge-2.3
make && make install
關鍵:--with-pcre 指向**原始碼解壓目錄**而非安裝目錄,否則會報錯。
/usr/local/nginx/sbin/nginx
chown www:www -R /usr/local/nginx/html
chmod 700 -R /usr/local/nginx/html
http {
# 緩存區定義
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=cdn_cache:100m inactive=1d max_size=10g;
proxy_temp_path /data/nginx/temp;
# 上游伺服器
upstream backend {
server 61.188.87.100:80;
}
server {
listen 80;
server_name www.win8.net;
location / {
proxy_pass https://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 緩存策略
proxy_cache cdn_cache;
proxy_cache_valid 200 302 1h;
proxy_cache_valid 404 1m;
proxy_cache_key $scheme$proxy_host$request_uri;
add_header X-Cache-Status $upstream_cache_status;
# 清除緩存介面 (需 ngx_cache_purge)
location ~ /purge(/.*) {
allow 127.0.0.1;
deny all;
proxy_cache_purge cdn_cache $scheme$proxy_host$1$is_args$args;
}
}
}
}
# 1. 首次請求 (MISS)
curl -I https://www.win8.net/style.css
# HTTP/1.1 200 OK
# X-Cache-Status: MISS
# 2. 二次請求 (HIT)
curl -I https://www.win8.net/style.css
# X-Cache-Status: HIT
# 3. 手動清除緩存
curl "https://www.win8.net/purge/style.css"
# 輸出 "Successful purge" 表示清除成功
proxy_cache_valid 時間 (圖片/JS/CSS 長、HTML 短)valid_referers + if ($invalid_referer) { return 403; }nginx-vts-exporter 監控緩存命中率、流量、錯誤率ngx_cache_purge 配合中央管控 API 實現集群緩存同步清除完成部署後,即擁有一個高效能、可手動/自動清除緩存的企業級 CDN 加速節點。