發現的問題
對象存儲簡稱COS,數據萬象簡稱CI。
由于5月數據萬象突然征收“CDN回源流量費”,由于先森圖片請求量不大,且還是需要使用數據萬象的圖片處理功能,所以先森在CDN->COS的中間加了一個Nginx做反向代理,由于Nginx所在的服務器和先森的COS存儲桶是同地域的,所以服務器到COS的流量是內網,因此講道理COS和CI都不會產生CDN回源流量了。
但是,先森過了幾天又來看數據萬象控制臺,發現每天還是有產生CDN回源流量,先森這波就無語了,明明都沒用CDN了,怎么還會有CDN回源流量呢,這不是無中生有么。

數據萬象控制臺
問題原因定位
經過排查確認,是由于先森的Nginx直接透傳了CDN的回源請求,導致COS和CI判定流量是來自CDN回源。。。
先森在服務器上進行抓包確認。
同一個圖片,CDN回源到CVM服務器:

抓包:CDN回源到CVM服務器
CVM回源到COS:

抓包:CVM回源到COS
可以看到,CDN回源到CVM比較有特殊性的請求頭是以下兩個,在CVM請求到COS時也是帶著的:
X-NWS-LOG-UUID: 630013543448005765 X-Tencent-Ua: Qcloud
那么,就要想辦法把這兩個請求頭去掉,不讓其透傳。
去除Nginx請求頭
先森百度了一下,Nginx內置的模塊中沒有刪除指定請求頭的,只能編譯增加headers-more-nginx-module模塊。
先森圖省事,服務器安裝了寶塔,Nginx是通過寶塔安裝的。看了一下,寶塔安裝的Nginx不像Redis等軟件,可以在網頁上動態添加支持模塊,只能命令行編譯添加模塊。
當然編譯之前需要看一下寶塔的Nginx會不會已經很好心的幫忙編譯了headers-more-nginx-module。
查看Nginx已經安裝的模塊
./sbin/nginx -V nginx version: nginx/1.22.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) built with OpenSSL 1.1.1o 3 May 2022 TLS SNI support enabled configure arguments: --user=www --group=www --prefix=/www/server/nginx --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module --add-module=/www/server/nginx/src/ngx_cache_purge --add-module=/www/server/nginx/src/nginx-sticky-module --with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --with-ld-opt=-Wl,-E --with-cc-opt=-Wno-error --with-ld-opt=-ljemalloc --with-http_dav_module --add-module=/www/server/nginx/src/nginx-dav-ext-module
肉眼可見的,并沒有headers-more-nginx-module模塊,只能重新編譯一下了。
由于寶塔編譯的Nginx沒有留configure文件,所以先森參考這篇文章:寶塔面板安裝的Nginx(已安裝)如何添加echo-nginx-module模塊,操作了一下編譯。
其中,有一些點需要注意一下。
1、模塊的下載地址,下載后解壓得到的目錄,就是編譯時指定的目錄:
wget https://github.com/openresty/headers-more-nginx-module/archive/refs/tags/v0.33.tar.gz tar -zxvf v0.33.tar.gz -C /www/server/module/ ls /www/server/module/headers-more-nginx-module-0.33
2、下載的模塊目錄不要放在/www/server/nginx目錄下,使用先森參考的這個方法寶塔在更新Nginx時會清空該目錄;
修改反向代理配置文件
進入寶塔的網站配置頁,找到反向代理的配置文件,增加想要去除的請求頭即可。
more_clear_input_headers "X-Tencent-Ua"; more_clear_input_headers "X-NWS-LOG-UUID";

修改反向代理配置
重新抓包確認請求頭沒有透傳
修改好了之后,重新抓個包,看看請求頭還有沒有透傳。
CDN回源到CVM服務器,可以看到這兩個請求頭還是在的(肯定在,先森又沒刪)。

CDN回源到CVM
然后再看CVM服務器訪問COS的請求頭,指定清除的兩個請求頭已經沒有了。

先森只是剛改好,由于數據萬象的控制臺對于“CDN回源流量”的監控粒度是1天,所以起碼要明天才能看到效果,希望有效。
轉載請注明出處來自http://www.cnidcc.cn/cos_ci_cdn_last.html

川公網安備 51011202000104號