Nginx高階之高階模組(secure_link/secure_link_md5/geoip_module)
高階階段回顧:
secure_link/secure_link_md5模組
制定並允許檢查請求的連結的真實性以保護資源免遭未授權的訪問 / 限制連結生效的週期
安全模組應用場景模型
模組配置語法
systax: secure_link [表示式]
default: 無配置
context: http域/server域/location域
md5加密:
systax: secure_link_md5 [表示式]
default: 無配置
context: http域/server域/location域
下面做一個小測試
① 進入default.conf配置:
② 在其他目錄下建立一個.sh檔案, 內容如下(根據自己環境情況進行相應修改即可):
servername="192.168.19.136" download_file="/download/testMD5.img" time_num=$(date -d "2019-11-26 00:00:00" +%s) secret_num="Milky-Way" res=$(echo -n "${time_num}${download_file} ${secret_num}"|openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =) echo "http://${servername}${download_file}?md5=${res}&expires=${time_num}"
③ 這個生成金鑰的方式一般由後臺生成, 這裡採用自己寫的這個.sh檔案來生成金鑰, 命令: sh [.sh檔案的名稱], 我這裡是sh md5url.sh
生成的金鑰: http://192.168.19.136/download/testMD5.img?md5=6sL9aEi50TlupLSLtX7jcA&expires=1574697600
④ 根據這個金鑰來訪問伺服器
結果如下:
geoip模組
基於maxmind geoip的二進位制檔案, 讀取ip所在地資訊
需要安裝geoip源: yum install nginx-module-geoip
檢視是否安裝完成:
使用場景
① 區別國內外的ip
② 區別城市間的ip
配置
安裝yum源後, 進入nginx.conf, 手動引入geoip模組:
在配置default.conf之前需要先下載ip地域的檔案, 利用.sh檔案來下載, 在任意地方新建一個.sh檔案, 內容如下:
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
在目錄下會生成2個.gz的檔案, 我把它們拷貝至/etc/nginx/geoip目錄下解壓生成2個.dat檔案
接下來進入default.conf配置: 在http域引入上面生成的2個.dat檔案
在代理的情況下($geoip_country_code不為CN)訪問nginx, 結果如下:
在無代理的情況下用本地ip($geoip_country_code為CN)訪問nginx, 結果如下: