前言
上篇,我們介紹了HTTPS的SSL證書,以及如何通過acme.sh生成並自動更新SSL證書。 本篇,我們介紹如何通過nginx配置配置全站https,以及容易踩的坑
環境
- linux伺服器,作業系統為
centos7.2
nginx 1.10.1
acme.sh v2.8.0
本文以msh.com
的域名證書為例
一、給nginx安裝ssl模組
想要nginx支援https,必須安裝http_ssl_module
模組。該模組如果未安裝或安裝失敗,在配置nginx的https時會報unknown directive "ssl"
的錯
首先切換到nginx的安裝包目錄,然後執行如下命令
####### 下載你當前版本的nginx包,並且解壓 進到目錄
./configure --with-http_ssl_module
####### 切記千萬不要make install 那樣就覆蓋安裝了
make
####### 將原來的nginx備份 備份之前先關閉當前正在執行的nginx
/usr/local/nginx/sbin/nginx -s stop
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
####### make之後會在當前目錄生成 objs 目錄
cp objs/nginx /usr/local/nginx/sbin/nginx
####### 然後重新啟動nginx
/usr/local/nginx/sbin/nginx
複製程式碼
二、告知nginx你的證書存放的位置
本人指定的證書存放位置為/mycertify/ssl
開啟nginx安裝目錄的nginx.conf
配置檔案。因為是泛域名證書
,所以當前域名以及當前域名下的所有次級子域名
可以共用一個證書
# 第一個子域名
server {
# https預設監聽的是443 埠
listen 443 ssl;
server_name b.msh.com ;
# 指定證書位置
ssl_certificate /mycertify/ssl/msh.com.cer;
ssl_certificate_key /mycertify/ssl/msh.com.key;
# 下方的5個配置項是和https無關的,如果想讓nginx能正常代理websocket,則必須加上
# 防止nginx代理websocket時,每隔75秒自動中斷
proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;
# 防止nginx代理websocket 報錯
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
location / {
proxy_pass http://localhost:8585;
}
}
# 其他的同級域名的證書配置,也可以照搬同上這樣配置
複製程式碼
三、強制將HTTP請求轉到HTTPS請求
網站雖然升級成為了https,但是客戶端可能會依然通過原先的http協議訪問。這就需要通過nginx做重定向到https
假如訪問路徑為 http://b.msh.com
,重定向後的實際訪問路徑為 https://b.msh.com
server {
listen 80;
server_name b.msh.com www.b.msh.com ;
rewrite ^(.*) https://$host$1 permanent;
}
複製程式碼
三、 重啟nginx,使以上配置生效
/usr/local/nginx/sbin/nginx -s reload
複製程式碼
注意:到這一步,配置還沒有完成!!!。十個人裡面有九個到這一步就以為大功告成了,然而卻漏掉了不起眼但是最重要的一步,也是很多教程裡面所沒有提到的,那就是開啟防火牆443埠
四、使防火牆放開443埠
開啟443埠
firewall-cmd --zone=public --add-port=443/tcp --permanent
複製程式碼
重啟防火牆,切記!!!!!!!!
firewall-cmd --reload
複製程式碼
至此,大功告成,可以在瀏覽器裡面輸入地址測試了
系列文章