1.下載安裝nginx:
nginx可以從這里選擇對應版本下載,我下載的是1.8.1版本。下載完成后,直接解壓縮,命令窗口進入根目錄,輸入命令:
start nginx
在瀏覽器中,直接輸入"localhost",可以看到nginx的歡迎頁,表明啟動成功。
2.下載安裝openssl:
可從這里選擇適合自己的版本下載,我下載的是:Win64 OpenSSL v1.1.0b Light,下載完成后,直接雙擊安裝(安裝選項一般默認即可)
3.生成證書
在nginx根目錄下新建ssl文件夾(名字可以自己定),並在命令窗口進入此目錄,按照如下的幾個命令,完成證書創建過程。
#此步用於生成私鑰,會提示輸入密碼,密碼后面步驟需要用到;jason.key為私鑰的名字,文件名可自己定 openssl genrsa -des3 -out jason.key 1024 #此步用於生成csr證書,jason.key為上一步驟生成的私鑰名,jason.csr為證書,證書文件名可自定 #在此步過程中,會交互式輸入一系列的信息(所在國家、城市、組織等),其中Common Name一項代表nginx服務訪問用到的域名,我這里是本地測試,所以可以隨意定一個jason.com,並在本地host文件中將此域名映射為127.0.0.1 openssl req -new -key jason.key -out jason.csr #此步用於去除訪問密碼,如果不執行此步,在配置了ssl后,nginx啟動會要求輸入密碼 #jason.key為需要密碼的key,jason-np.key為去除訪問密碼的key文件 #操作過程中會要求輸入密碼,密碼為生成key文件時的密碼 openssl rsa -in jason.key -out jason-np.key #此步用於生成crt證書 #jason.crt為第2步生成的csr證書名稱,jason.crt為要生成的證書名稱 openssl x509 -req -days 366 -in jason.csr -signkey jason-np.key -out jason.crt
經過以上幾個步驟,證書生成完畢,ssl文件夾下的jason.crt和jason-np.key為我們后續要使用的文件。
注:在執行openssl命令時,可能會出現提示找不到openssl配置文件:
can't open config file: /etc/ssl/openssl.cnf
實際配置文件存在,但不在這個目錄(可以在openssl安裝目錄找到),我們可以直接在命令窗口設置下環境變量,使其指向正確的位置
#請根據你自己的安裝目錄調整
set OPENSSL_CONF=C:\OpenSSL-Win64\bin\openssl.cfg
4.nginx配置ssl
打開nginx目錄下conf\nginx.conf文件,找到HTTPS server的配置,將配置項前面的注釋符號去掉
修改前配置內容如下:
# HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.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; # } #}
修改后配置內容如下:
# HTTPS server server { listen 443 ssl; server_name front; ssl_certificate ./ssl/jason.crt; ssl_certificate_key ./ssl/jason-np.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; } }
5.配置重定向,http請求自動跳轉到https
如果我們希望強制使用https,可以將http的請求重定向到https,只需要在http對應server配置中添加rewrite
1 server { 2 listen 80; 3 server_name jason.com; 4 rewrite ^(.*) https://$server_name$1 permanent; 5 #省略其他配置...... 6 }
6.啟動nginx
命令窗口進入到nginx根目錄,使用以下命令重新加載nginx配置文件
nginx -s reload
這里有兩點需要注意:
1)由於nginx的cache模塊需要用到共享內容,所以官方提示在window Vista之后的版本是不支持cache模塊的,所以在配置文件中,ssl_session_cache一行不要注釋掉,否則啟動會報錯
2)nginxssl使用的是443端口,如果系統中443已經被占用,在nginx的error.log文件中會有報錯,且無法正常啟動
bind() to 0.0.0.0:443 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)
遇到這個問題,可在命令窗口通過以下命令查找占用端口的進程
netstat -ano|findstr "443"
結果列表中第2列代表進程監聽的ip和端口,最后一列代表進程id,可根據id殺掉對應進程即可(有些進程是由系統服務啟動的,需要關閉服務才行)。
正常啟動后,瀏覽器中輸入https://jason.com(jason.com是在第3步第2個命令中指定的),出現nginx歡迎頁面,說明已配置成功。