全站HTTPS升級系列(三)nginx配置全站HTTPS

msh01發表於2019-01-11

前言

上篇,我們介紹了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
複製程式碼

至此,大功告成,可以在瀏覽器裡面輸入地址測試了

系列文章

全站HTTPS升級系列(一)升級前的科普工作

全站HTTPS升級系列(二)基於 acme.sh從Letsencrypt生成免費的泛域名證書

全站HTTPS升級系列(三)nginx配置全站HTTPS

全站HTTPS升級系列(四)專案程式碼升級改造

相關文章