在如今越來越強調(diào)隱私與數(shù)據(jù)安全的情況下椭盏,我們的資源訪問當(dāng)然也要盡可能的安全奸汇,我們知道 HTTP 協(xié)議是明文傳輸?shù)模虼瞬荒鼙WC數(shù)據(jù)的安全性既忆,而 HTTPS 則是對傳輸?shù)臄?shù)據(jù)進行了加密柠座,提高數(shù)據(jù)傳輸?shù)陌踩砸匮拧O旅婢徒榻B一下為 Nginx 配置 Https 模塊的方式。
一妈经、系統(tǒng)環(huán)境
CentOS 6.9
Nginx 1.13.0
二淮野、已經(jīng)安裝過 Nginx
2.1 使用場景
某服務(wù)器上已經(jīng)安裝過 Nginx捧书,在 nginx.conf 中配置了 SSL (HTTPS) 后重啟 nginx 出現(xiàn)以下錯誤信息:
nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:37
2.2 原因
由于 nginx 缺少了 http_ssl_module 模塊。
我們可以使用如下命令查看安裝 nginx 時的配置參數(shù)骤星,如:
[root@NC01077718 ~]# nginx -V
nginx version: nginx/1.13.0
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx
可以看到配置參數(shù)只有 --prefix=/usr/local/nginx经瓷,沒有 http_ssl_module。
2.3 解決方法
重新編譯安裝 nginx洞难,并在編譯時加入 http_ssl_module 模塊舆吮。在進行重新編譯時,要清楚幾個信息队贱,如下示例:
nginx 的安裝目錄: /usr/local/nginx
nginx 的源碼目錄:/data/software/nginx/nginx-1.13.0/
(1) 重新配置
進入源碼目錄色冀,執(zhí)行如下命令重新配置:
[root@hadoop1 nginx-1.13.0]# cd /data/software/nginx/nginx-1.13.0
[root@hadoop1 nginx-1.13.0]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
等待編譯完成,如果沒有出現(xiàn) Error 信息柱嫌,表示編譯成功
注:
由于是已經(jīng)安裝過 nginx 的環(huán)境了锋恬。因此,理論上 nginx 所依賴的系統(tǒng)庫(如 PCRE 等庫)也已經(jīng)具備了慎式。
(2) 重新編譯
運行如下命令進行編譯
[root@hadoop1 nginx-1.13.0]# pwd
/data/software/nginx/nginx-1.13.0
[root@hadoop1 nginx-1.13.0]# make
- 這里不要進行 make install伶氢,否則就是覆蓋安裝
(3) 備份已安裝好的 nginx
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
(4) 停止 nginx (如果在運行狀態(tài))
nginx -s stop
(5) 覆蓋原有的 nginx
將剛剛編譯好的 nginx 覆蓋掉原有的 nginx
cp ./objs/nginx /usr/local/nginx/sbin/
(6) 查看覆蓋后的 nginx 的配置信息
[root@hadoop1 objs]# nginx -V
nginx version: nginx/1.13.0
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
可以看到,配置參數(shù)中已經(jīng)帶有了 http_ssl_module 模塊瘪吏,說明重新編譯并替換成功
三癣防、全新安裝
如果是未安裝 Nginx 的服務(wù)器,則使用如下方式全新安裝掌眠,安裝文檔中已經(jīng)加入了 nginx https 模塊蕾盯。
附錄一:配置 nginx https
Nginx https 配置示例:
server{
listen 80;
server_name api.jiangzhuolin.com;
# force redirect http to https
rewrite ^ https://$http_host$request_uri?permanent;
}
server {
listen 443 ssl;
# ssl on;
server_name api.jiangzhuolin.com;
index index.html index.htm index.jsp index.php;
if ( $query_string ~* ".*[\;'\<\>].*" ){
return 404;
}
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:9090;
}
ssl_certificate /usr/local/nginx/ssl/jiangzhuolin.com.cer;
ssl_certificate_key /usr/local/nginx/ssl/cert.key;
fastcgi_param HTTPS on;
fastcgi_param HTTP_SCHEME https;
access_log /usr/local/nginx/logs/api.jiangzhuolin.com.access.log;
error_log /usr/local/nginx/logs/api.jiangzhuolin.com.error.log;
}
注:
- 把 ssl on; 這行去掉,ssl 寫在 443 端口后面蓝丙。這樣 http 和 https 的鏈接都可以用级遭。然后上方的第一個 server 對 http 鏈接進行了強制重定向到 https。這樣就可以實現(xiàn)用戶輸入 http 的時候不會訪問不到服務(wù)并且也能夠跳轉(zhuǎn)到 https 協(xié)議渺尘。
-
ssl_certificate
配置的就是我們的 https 的證書挫鸽,也就是我們的公鑰。當(dāng)我們開啟 https 協(xié)議后鸥跟,客戶端與服務(wù)器端的通信將會使用該證書(公鑰)來進行數(shù)據(jù)的加密丢郊。 -
ssl_certificate_key
配置的就是我們的 https 的密鑰(私鑰),該文件的作用就是將加密的數(shù)據(jù)進行解密医咨。 - 證書的獲取有多種途徑枫匾,可以自行網(wǎng)卡搜索。目前既可以從多個 CA 發(fā)行商處申請免費的 SSL 證書拟淮,也可以購買付費的商用 SSL 證書干茉,具體選擇視情況而定。甚至也可以自己生成自簽名的 SSL 證書很泊,但此類證書不會被瀏覽器信任角虫,所以可能還需要手動安裝證書沾谓。