nginx實現https訪問

                     nginx實現https訪問

背景:

項目背景是在開發APP發佈平臺,ios的安裝包的下載和自動更新等操作需要https獲取plist文件,所以需要通過配置nginx的SSL模塊來支持HTTPS訪問,也就是說,要做一個網站域名爲 域名.com 要求通過HTTPS://域名.com進行訪問.

SSL英文名爲Secure Socket Layer,安全套接字層。SSL是一種數字證書,它使用ssl協議在瀏覽器和web server之間建立一條安全通道,數據信息在client與server之間的安全傳輸.

 

一,環境準備

1.安裝nginx,2.獲取安全證書

 1.安裝nginx(已安裝可以跳過)

第一步:下載nginx壓縮包

nginx官方下載地址:http://nginx.org/en/download.html

wget命令下載:

wget -c https://nginx.org/download/nginx-1.16.1.tar.gz

注意:這一步最好在自己的目標目錄進行操作,我一般是把壓縮包下載到/usr/local目錄下。

第二步:配置nginx安裝所需的環境

1. 安裝gcc

安裝 nginx 需要先將官網下載的源碼進行編譯,編譯依賴 gcc 環境。安裝指令如下:

yum install gcc-c++

2. 安裝PCRE pcre-devel

Nginx的Rewrite模塊和HTTP核心模塊會使用到PCRE正則表達式語法。這裏需要安裝兩個安裝包pcre和pcre-devel。第一個安裝包提供編譯版本的庫,而第二個提供開發階段的頭文件和編譯項目的源代碼。安裝指令如下:

yum install -y pcre pcre-devel

3.安裝zlib

zlib庫提供了開發人員的壓縮算法,在Nginx的各種模塊中需要使用gzip壓縮。安裝指令如下:

yum install -y zlib zlib-devel

4.安裝Open SSL

nginx不僅支持 http協議,還支持 https(即在 ssl 協議上傳輸 http),如果使用了 https,需要安裝 OpenSSL 庫。安裝指令如下:

yum install -y openssl openssl-devel

第三步:解壓nginx壓縮包並安裝

將壓縮包進行解壓

tar -zxvf nginx-1.16.1.tar.gz

解壓之後,進入加壓文件,即cd nginx-1.16.1。
然後進行配置,推薦使用默認配置,直接./configure就好了,如下圖所示:

第四步:編譯安裝nginx
這裏和redis的編譯安裝比較類似,首先在當前目錄(/usr/local/nginx-1.16.1)進行編譯。輸入make即可

make

然後回車,如果編譯出錯,請檢查是否前面的4個安裝都沒有問題。
編譯成功之後,就可以安裝了,輸入以下指令:

make install

ok,安裝成功。
這時候返回上一級目錄,就會發現多了nginx目錄,接下來,啓動nginx。

第五步:啓動nginx

進入/usr/local/nginx/sbin目錄,輸入./nginx即可啓動nginx

./nginx

關閉nginx

./nginx -s quit  或者 ./nginx -s stop

重啓nginx

./nginx -s reload

查看nginx進程

ps aux|grep nginx

設置nginx開機啓動,只需在rc.local增加啓動代碼即可。

vim /etc/rc.local

然後在底部增加/usr/local/nginx/sbin/nginx

nginx配置文件

/usr/local/nginx/conf目錄可修改nginx的配置文件 -> vim nginx.conf

修改域名以及端口等

 2.ssl證書:

 1. 配置SSL模塊首先需要CA證書,CA證書可以自己手動頒發也可以在阿里雲申請,本人在騰訊雲上申請的證書。

 2. 默認情況下ssl模塊並未被安裝,如果要使用該模塊則需要在編譯nginx時指定–with-http_ssl_module參數.

獲取證書:

在成功購買域名並通過備案後

1.進入控制檯

2.下載證書

下載下來的文件:

nginx文件下:

二、實現nginx+https

1.安裝ssl模塊

正常安裝nginx一般ssl模塊並未被安裝

默認情況下ssl模塊並未被安裝,如果要使用該模塊則需要在編譯nginx時指定–with-http_ssl_module參數

解決方案:

nginx缺少http_ssl_module模塊,編譯安裝的時候帶上--with-http_ssl_module配置就行了,但是現在的情況是我的nginx已經安裝過了,怎麼添加模塊,其實也很簡單,往下看: 做個說明:我的nginx的安裝目錄是/usr/local/nginx這個目錄,我的源碼包在/usr/local/nginx-1.16.1目錄

(1)切換到源碼包:

cd /usr/local/nginx-1.16.1

(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號。

(6)將剛剛編譯好的nginx覆蓋掉原有的nginx

cp /usr/local/nginx-1.16.1/objs/nginx  /usr/local/nginx/sbin

(7)啓動nginx

在路徑:/usr/local/nginx/sbin下

./nginx

(8)通過下面的命令查看是否已經加入成功。

nginx -V

2.在Nginx配置文件中安裝證書

文件說明:

1. 證書文件“證書名稱.crt‘’,包含兩段內容,請不要刪除任何一段內容。

2. 如果是證書系統創建的CSR,還包含:證書私鑰文件“證書名稱.key”。

( 1 ) 在Nginx的配置文件所在的目錄下創建cert文件夾,並且將下載的全部文件拷貝到cert目錄中。如果申請證書時是自己創建的CSR文件,請將對應的私鑰文件放到cert目錄下並且命名爲“證書名稱.key”;

( 2 ) 打開 Nginx 安裝目錄下 conf 目錄中的 nginx.conf 文件,找到:

   # 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;
    #    }
    #}

( 3 ) 將其修改爲 (以下屬性中ssl開頭的屬性與證書配置有直接關係,其它屬性請結合自己的實際情況複製或調整) :

 server {
        listen       8890 ssl;
        server_name  localhost;
        ssl_certificate      cert/1_luckilye.cn_bundle.crt;
        ssl_certificate_key  cert/2_luckilye.cn.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;
        }
    }
	

( 4 )重啓 Nginx。

nginx -s reload 

( 5 ) 通過 https 方式訪問您的站點,測試站點證書的安裝配置。 在瀏覽器中輸入https://域名,如下圖所示,則說明配置成功。

在配置時有可能碰到的錯誤:

nginx 報錯 : [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead

解決:

1. 如果配置了SSL ON請刪掉

2.

listen 443;

修改爲

listen 443 ssl;

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