1. 程式人生 > >Nginx高階之高階模組(secure_link/secure_link_md5/geoip_module)

Nginx高階之高階模組(secure_link/secure_link_md5/geoip_module)

高階階段回顧:

Nginx高階之Rewrite規則

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, 結果如下: