當(dāng)我們的內(nèi)容很有價(jià)值,并且我們關(guān)心用戶的隱私和安全時(shí),我們可以使用 Nginx 來(lái)控制和保護(hù)對(duì)服務(wù)和數(shù)據(jù)的訪問(wèn)。
SSL(安全套接字層)連接在將加密數(shù)據(jù)從客戶端計(jì)算機(jī)發(fā)送到網(wǎng)絡(luò)服務(wù)器之前使用證書(shū)進(jìn)行身份驗(yàn)證。
在本節(jié)中,我們將介紹如何在 NGINX 上配置 HTTPS 服務(wù)器。
要在我們的 nginx.conf 文件中設(shè)置 HTTPS 服務(wù)器,請(qǐng)將 ssl 參數(shù)添加到 server 塊中的 listen 指令,然后指定服務(wù)器證書(shū)和私鑰文件的位置:
server { listen 443 ssl; server_name www.soo66.com; ssl_certificate www.soo66.com.crt; ssl_certificate_key www.soo66.com.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; #... }
服務(wù)器證書(shū)是一個(gè)公共實(shí)體。它被發(fā)送到連接到 Nginx 的每個(gè)客戶端。
私鑰是安全的密鑰或?qū)嶓w,應(yīng)存儲(chǔ)在訪問(wèn)受限的文件中。但是 nginx 的 master 進(jìn)程必須能夠讀取這個(gè)文件。我們還可以將私鑰存儲(chǔ)在與證書(shū)相同的文件中。
ssl_certificate www.soo66.com.cert; ssl_certificate_key www.soo66.com.cert;
ssl_protocol 和 ssl_ciphers 指令可用于要求客戶端在建立連接時(shí)使用的 SSL/TLS 版本和加密方案。
我們可以通過(guò)實(shí)施用戶名和密碼身份驗(yàn)證來(lái)限制對(duì)我們網(wǎng)站或其某些部分的訪問(wèn)。用戶名和密碼取自密碼文件創(chuàng)建工具(例如 apache2-utils)創(chuàng)建。
創(chuàng)建密碼文件
要?jiǎng)?chuàng)建用戶名-密碼對(duì),請(qǐng)使用密碼文件創(chuàng)建實(shí)用程序,例如 httpd-tools 或 apache2-utils:
1. 首先,驗(yàn)證是否安裝了 httpd-tools 或 apache2-utils。
2. 創(chuàng)建密碼文件和第一個(gè)用戶,運(yùn)行帶有 -c 標(biāo)志的 htpasswd 實(shí)用程序,用于創(chuàng)建新文件,文件路徑名作為第一個(gè)參數(shù),用戶名作為第二個(gè)參數(shù)。
$ sudo htpasswd -c /etc/apache2/.htpasswd user1
按 Enter 并在出現(xiàn)提示時(shí)輸入 user1 的密碼。
3. 創(chuàng)建額外的用戶名-密碼對(duì)。省略 -c 標(biāo)志,因?yàn)槲募呀?jīng)存在:
$ sudo htpasswd /etc/apache2/.htpasswd user2
4. 我們可以確保文件包含配對(duì)的用戶名和加密密碼:
$ cat /etc/apache2/.htpasswd user1:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0 user2:$apr1$QdR8fNLT$vbCEEzDj7LyqCMyNpSoBh/ user3:$apr1$Mr5A0e.U$0j39Hp5FfxRkneklXaMrr/
1. 在我們要保護(hù)的 location 內(nèi),定義 auth_basic 指令并為受密碼保護(hù)的區(qū)域命名。當(dāng)要求提供憑據(jù)時(shí),該區(qū)域的名稱將顯示在用戶名和密碼對(duì)話框中。
location /api { auth_basic "Administrator's Area"; #... }
2. 使用 auth_basic_user_file 指令指定包含用戶/密碼對(duì)的 .htpasswd 文件:
location /api { auth_basic "Administrator's Area"; auth_basic_user_file /etc/apache2/.htpasswd; }