Windows下Nginx配置支持HTTPS協議(已申請正式的SSL證書和私鑰的,前三步可以跳過)

以Windows 10系統爲例。

一、安裝OpenSSL

先到http://slproweb.com/products/Win32OpenSSL.html 去下載OpenSSL(根據系統選擇32位或者64位版本下載安裝)。

然後安裝在C:\OpenSSL-Win64下。

然後配置環境變量。在系統環境變量中添加環境變量:

變量名:OPENSSL_HOME

變量值:C:\OpenSSL-Win64\bin;

(變量值爲OPENSSL安裝位置下的bin目錄)

並在Path變量結尾添加一條: %OPENSSL_HOME%

二、安裝Nginx

Nginx官網下載Nginx,我這裏下載的是 nginx/Windows-1.12.0 這個版本。

把下載好的壓縮包解壓出來,拷貝其中的nginx-1.12.0目錄到c:\下。並將文件夾名字修改爲nginx。這樣,Nginx就被安裝到了c:\nginx目錄下。

進入到C:\nginx目錄下,雙擊nginx.exe文件即可啓動服務器。在瀏覽器地址欄輸入http://localhost,如果可以成功訪問到Nginx的歡迎界面,則說明安裝成功。

三、生成證書  

1、首先在Nginx安裝目錄中創建ssl文件夾用於存放證書。比如我的文件目錄爲 C:\nginx\ssl

在控制檯中執行:

cd C:\nginx\ssl

2、創建私鑰

在命令行中執行命令:

openssl genrsa -des3 -out test.key 1024     # test文件名是自己隨便起即可

輸入密碼後,再次重複輸入確認密碼。記住此密碼,後面會用到。

3、創建csr證書

在命令行中執行命令:

openssl req -new -key test.key -out test.csr

其中key文件爲剛纔生成的文件。

執行上述命令後,需要輸入一系列的信息。輸入的信息中最重要的爲Common Name,這裏輸入的域名即爲我們要使用https訪問的域名 ,比如我輸入的是localhost。其它的內容隨便填即可。

以上步驟完成後,ssl文件夾內出現兩個文件:test.csr 和 buduhuis.key

4、去除密碼。

在加載SSL支持的Nginx並使用上述私鑰時除去必須的口令,否則會在啓動nginx的時候需要輸入密碼。

複製test.key並重命名爲test.copy.key。

在命令行中執行如下命令以去除口令:

openssl rsa -in test.copy.key -out test.key

然後輸入密碼,這個密碼就是上文中在創建私鑰的時候輸入的密碼。

5、生成crt證書

在命令行中執行此命令:

openssl x509 -req -days 365 -in test.csr -signkey test.key -out test.crt

至此,證書生成完畢。我們發現,ssl文件夾中一共生成了4個文件。下面,配置https服務器的時候,我們需要用到的是其中的test.crt和test.key這兩個文件。

四、修改Nginx的nginx.conf配置文件

我的這個文件在C:\nginx\conf目錄下。用任意一個編輯器(如Sublime Text之類)打開這個nginx.conf文件。

找到HTTPS server配置的那一段(即包含有listen 443 ssl配置那一段)。我們發現這段代碼被註釋掉了。所以,首先我們把該段代碼前面的#號去掉。然後分別修改其中的ssl_certificate和ssl_certificate_key配置項爲剛纔所生成的test.crt和test.key這兩個文件的目錄。並配置server_name爲localhost。修改後的該段配置如下:

server {
    listen       443 ssl;
    server_name  localhost;

    ssl_certificate      C://nginx//ssl//test.crt;  # 這個是證書的crt文件所在目錄
    ssl_certificate_key  C://nginx//ssl//test.key;  # 這個是證書key文件所在目錄

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
      root   html;                  # 這個是指定一個項目所在目錄
      index  index.html index.htm;  # 這個是指定首頁的文件名
    }
}

注意一下那兩個證書的文件路徑的寫法。

五、Nginx的常用操作

在繼續後面的內容之前,先簡單介紹下Windows命令行中操作Nginx的幾個常用的語句:

start nginx               # 啓動Nginx
nginx.exe -s stop         # 快速停止Nginx,可能並不保存相關信息
nginx.exe -s quit         # 完整有序的停止Nginx,並保存相關信息
nginx.exe -s reload       # 重新載入Nginx,當配置信息修改,需要重新載入這些配置時使用此命令。
nginx.exe -s reopen       # 重新打開日誌文件
nginx -v                  # 查看Nginx版本

因爲修改了配置文件,所以需要退出控制檯,並重新打開一個控制檯。執行如下命令:

cd c:\nginx
nginx.exe -s quit
start nginx

即退出Nginx,然後再重新啓動它。這時候,在瀏覽器地址欄輸入https://localhost並回車。

這時候,你可能看到“您的連接不是私密連接”的提示,單擊頁面中的“高級”,並接着單擊“繼續前往m.test.com(不安全)”,就可以看到Nginx的歡迎界面了。說明https服務器已經配置成功了。

如果你只想用https://localhost訪問這個https服務器,那麼下面的內容你就不用接着往下看了。

但是,也許你可能還想要用一個別的域名(例如:https://m.test.com)來訪問這個服務器。那麼怎麼做呢?這就需要繼續往下看了。

六、修改hosts配置,實現域名映射

要想用別的域名來訪問上文配置好的https服務器,也很簡單,修改hosts配置就可以了。你可以到這裏下載一個hosts管理工具——SwitchHosts。安裝號好之後,以管理員身份運行它。並添加上一個hosts項:

127.0.0.1  m.test.com

這樣,你就可以通過https://m.test.com來訪問配置好的https服務器了。

順便提一下,關於Mac環境下如何映射一個http路徑到一個https路徑,可以通過Charles工具來實現。參見這裏

七、可能遇到的問題及其解決辦法

1、端口被佔用

完成上述工作之後,在啓動nginx的時候,可能提示端口被佔用或者雖然沒有出錯提示,但是訪問https頁面卻訪問不到的情況,這時候,你需要檢查一下443端口是否已經被佔用了。

可以用如下命令查看:

netstat -ano | findstr 443

一般來說,如果有程序在佔用的話,輸出的第一行的最後一列就是佔用了443端口的PID。

找到這個PID之後,我們就用如下命令強制結束它:

taskkill /F /IM 這裏輸入上面找出來的PID

2、出現錯誤提示:“您的連接不是私密連接”

點擊頁面最底部的“高級”,然後點“繼續前往WALLET.WALLET.COM(不安全)”

3、靜態的頁面資源在開發者工具的Network中顯示的Status爲failed

可以在開發者工具的Network中的該資源上右鍵單擊它,然後選擇“Open in new tab”,接着會提示“您的連接不是私密連接”,然後按照上面的問題2的處理方式進行處理就可以了。本質上與上一個問題是同樣的問題,只不過因爲你的靜態資源域名和頁面域名用的不是同一個罷了。

4、忘記配置hosts,導致訪問到的不是你本機上的服務的問題

只需要配置好host就可以了。注意,如果你的頁面域名、靜態資源域名兩者是不一樣的話,那麼兩者都需要配置hosts中,比如:

127.0.0.1 m.paian.com 127.0.0.1 static.pain.com

5、出現權限不足的問題

這時候,你只需要以管理員身份打開命令行工具,再正常進行操作即可。

轉載: https://mobilesite.github.io/2017/03/11/windows-nginx-https-config/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章