nginx--配置https服務器


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歡迎頁面,說明已配置成功。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM