nginx的basic auth配置由ngx_http_auth_basic_module模塊提供,對HTTP Basic Authentication協(xié)議進(jìn)行了支持,用戶可通過該配置設(shè)置用戶名和密碼對web站點(diǎn)進(jìn)行簡單的訪問控制。
basic auth配置示例:
location / { auth_basic "closed site"; auth_basic_user_file conf/htpasswd;}
說明:
踩坑的地方就是這個密碼,官方文檔里對支持的密碼類型進(jìn)行了說明:
使用htpasswd或者openssl passwd命令生成的密碼固然可以使得配置生效,nginx能夠正常地進(jìn)行密碼安全校驗(yàn),如果密碼類型不支持, 則nginx或報(bào)錯:
crypt_r() failed (22: Invalid argument)
但是因?yàn)闃I(yè)務(wù)的需要,我們要用代碼生成nginx的配置并下發(fā)配置到每個云主機(jī)中,之后拉起nginx進(jìn)程。項(xiàng)目代碼使用go語言編寫,所以需要找一個對應(yīng)的函數(shù)或者庫生成nginx支持的密碼。
go語言生成nginx支持的密碼
在進(jìn)行自動生成密碼開發(fā)之前,思考了一下大概有三種方案可以實(shí)現(xiàn):
首先,第一種方式是不太可取的,因?yàn)樾枰獜?qiáng)依賴服務(wù)器環(huán)境,所以直接pass。下面看第二種和第三種方式的具體實(shí)現(xiàn)。
直接調(diào)用系統(tǒng)函數(shù)crypt()
Linux的crypt函數(shù)有兩個參數(shù),函數(shù)定義為:
char *crypt(const char *key, const char *salt);
其中參數(shù)key為需要加密的內(nèi)容,salt參數(shù)有兩種類型:
ID | Method ───────────────────────────────────────────── 1 | MD5 2a | Blowfish (not in mainline glibc; added in some | Linux distributions) 5 | SHA-256 (since glibc 2.7) 6 | SHA-512 (since glibc 2.7)
go語言中可以通過import "C"方式直接調(diào)用c語言的庫函數(shù),下面是封裝crypt函數(shù)的具體實(shí)現(xiàn):
新聞熱點(diǎn)
疑難解答
圖片精選