項目開發中用到了微信小程序,可是服務器配置URL必須是HTTPS,因此須要經過配置nginx的SSL模塊來支持HTTPS訪問,也就是說,要作一個網站域名爲 dmsdbj.com 要求經過HTTPS://dmsdbj.com進行訪問.html
SSL英文名爲Secure Socket Layer,安全套接字層。SSL是一種數字證書,它使用ssl協議在瀏覽器和web server之間創建一條安全通道,數據信息在client與server之間的安全傳輸.nginx
1. 配置SSL模塊首先須要CA證書,CA證書能夠本身手動頒發也能夠在阿里雲申請,本人在阿里雲上申請的證書。web
2. 默認狀況下ssl模塊並未被安裝,若是要使用該模塊則須要在編譯nginx時指定–with-http_ssl_module參數.小程序
1、下載CA證書
1. 登陸阿里雲,選擇「控制檯」-「產品與服務」,在「安全(雲盾)」一欄中選擇「CA證書服務(數據安全)」。微信小程序
2.在已經購買好的證書點擊「下載」,在新打開的頁面上選擇「Nginx/Tengine」,點擊「下載證書for Nginx」。瀏覽器
2、在Nginx配置文件中安裝證書安全
文件說明:服務器
證書文件「證書名稱.pem‘’,包含兩段內容,請不要刪除任何一段內容。微信
若是是證書系統建立的CSR,還包含:證書私鑰文件「證書名稱.key」。session
( 1 ) 在Nginx的配置文件所在的目錄下建立cert文件夾,而且將下載的所有文件拷貝到cert目錄中。若是申請證書時是本身建立的CSR文件,請將對應的私鑰文件放到cert目錄下而且命名爲「證書名稱.key」;
( 2 ) 打開 Nginx 安裝目錄下 conf 目錄中的 nginx.conf 文件,找到:
HTTPS server server { listen 443; server_name localhost; ssl on; ssl_certificate cert.pem; ssl_certificate_key cert.key; ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; ssl_prefer_server_ciphers on; location / { } }
( 3 ) 將其修改成 (如下屬性中ssl開頭的屬性與證書配置有直接關係,其它屬性請結合本身的實際狀況複製或調整) :
server { listen 443; server_name localhost; ssl on; root html; index index.html index.htm; ssl_certificate cert/證書名稱.pem; ssl_certificate_key cert/證書名稱.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; } }
保存退出。
( 4 )重啓 Nginx。
nginx -s reload
( 5 ) 經過 https 方式訪問您的站點,測試站點證書的安裝配置。 在瀏覽器中輸入你的網址,以下圖所示,則說明配置成功。
nginx: [emerg] unknown directive "ssl" in /usr/local/nginx/conf/nginx.conf:151
解決方案:
出現這種錯誤多是兩種狀況形成的:
狀況一:配置文件格式不正確。
解決方法參考連接:http://blog.csdn.net/yuanyuan_186/article/details/51324082
狀況二:ssl模塊並未被安裝
默認狀況下ssl模塊並未被安裝,若是要使用該模塊則須要在編譯nginx時指定–with-http_ssl_module參數,這種狀況也會致使錯誤二的出現。
解決方案:
nginx缺乏http_ssl_module模塊,編譯安裝的時候帶上--with-http_ssl_module配置就好了,可是如今的狀況是個人nginx已經安裝過了,怎麼添加模塊,其實也很簡單,往下看: 作個說明:個人nginx的安裝目錄是/usr/local/nginx這個目錄,個人源碼包在/usr/local/src/nginx-1.3.6目錄
(1)切換到源碼包:
cd /root/nginx-1.13.6
(2)配置信息:
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
(3)配置完成後,運行make進行編譯,千萬不要進行make install,不然就是覆蓋安裝。
make
(4)而後備份原有已經安裝好的nginx
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
(5)中止Nginx,正常命令直接 nginx -s stop就能夠
nginx -s stop
若是關不掉,就直接Kill掉進程。ps aux | grep 進程名 查看進程佔用的PID號。
ps aux|grep nginx
殺掉查出來的PID,或者直接
pkill -9 nginx
(6)將剛剛編譯好的nginx覆蓋掉原有的nginx
cp ./objs/nginx /usr/local/nginx/sbin/
(7)啓動nginx
nginx
(8)經過下面的命令查看是否已經加入成功。
nginx -V
nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:148
解決方案:
出現這種狀況的解決方案參考錯誤一的第二種狀況的解決方案便可。
Stoping nginx... nginx: [emerg] BIO_new_file("/usr/local/nginx/conf/cert/214291778530222.pem") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/usr/local/nginx/conf/cert/214291778530222.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file) failed. Use force-quit
解決方案:
這多是證書路徑存放的位置不正確致使的。
將證書文件放到nginx.conf所在的目錄下便可,若是不行,將nginx配置文件中的證書位置換成絕對路徑。