實際生產項目中,大多數時候我們會將后端的 http 接口通過前置 nginx 進行反向代理,對互聯網用戶提供服務。往往我們后端服務所能提供的接口服務是大于互聯網用戶側的實際請求的接口地址數量的(例如后端服務一共有100個api接口,經過前置 nginx 對外提供的接口是給微信小程序使用的,而微信小程序中需要調用的實際接口只有40個)。鑒于此,從系統安全架構角度來講,我們必須應該在前置的 Nginx 中,白名單限定對外提供服務的具體 http 接口 URI 地址。
本文以具體配置示例的方式,演示在 Nginx 中如何實現白名單 Uri 的攔截配置。
1、配置白名單 URI 配置文件
我們為了更好的管理白名單地址,所以講配置白名單的配置文件獨立出來,然后使用 nginx 的 include 導入。
我的配置文件 ./nginx/conf.d/map_whitelist_uri.conf
內容如下:
map $uri $allowed_uri {default 0;# 精確匹配(推薦盡可能使用精確匹配,這樣利于管理)/api/v1/cs/configs 1;/exact/path1 1;/exact/path2 1;# 正則表達式匹配~^/demo/.+\.(css|js|ttf|woff|woff2|svg|git|jpg|jpeg|png)$ 1;~/regex/path/[0-9]+ 1;~/another/regex.* 1;# 更多的路徑...
}
主配置文件 ./nginx/nginx.conf
中使用 include
導入擴展的配置文件,可以通配符導入,也可以精確導入。
http {// 省略其他配置// 導入conf.d中的所有配置,你可以導入具體的配置文件include ./conf.d/*.conf;
}
2、使用白名單map配置
在 server
塊的 location
塊中配置條件攔截。
server {// 省略其他配置location / {// 不在白名單URI中的,直接響應403結束if ($allowed_uri = 0) {return 403;}}// 省略其他配置
}
(END)