Nginx通過設置自定義標記識別代理調用
業務場景
最近遇到一個業務場景,部署在云端服務器的一個平臺,接口提供給多個現場調用,其中一個現場是通過nginx代理服務器代理轉發到云服務器,另外一個現場則是直接通過云服務器接口進行調用。其中通過代理服務器訪問的需要對圖片路徑進行特殊業務處理,所以在代碼層面需要進行區分,一時想不到很好的方法,在公司和同事主管討論,通過ai咨詢到一個好的方法,如圖:
解決方法
nginx轉發請求時,可以添加自定義請求頭信息來標記請求來源,在nginx中對應位置添加
proxy_set_header X-Proxy-Source "LocalProxy"
例子,在nginx.conf里加上對應的自定義標記
server {listen 80;server_name 192.168.1.123;root /usr/share/nginx/html;include /etc/nginx/default.d/*.conf;location / {proxy_pass http://test;proxy_set_header X-Proxy-Source "LocalProxy";}
}
在代碼里獲取請求頭信息,分為兩種情況:
- 如果
X-Proxy-Source
有值且為LocalProxy
,則判定為通過代理服務器調用 - 如果
X-Proxy-Source
拿不到數據,則判定為通過云服務器端調用