輕鬆配置ssl,網站從http轉到https

前言

目前,咱們經常使用的網站,都已升級到https訪問,並且不少的專家也建議實施全站https,下面記錄了我在升級https過程當中遇到的幾個坑,但願能對後來者有所幫助。php

先展現效果圖 html

https訪問效果圖

思路

要實現https訪問網站,須要理清思路。nginx

1. 申請網站ssl安全證書: 2. 驗證域名全部權api

驗證方式通常分爲:DNS驗證文件驗證,大多數人可能使用的DNS驗證,由於我沒有備案域名,因此只能採用文件驗證。瀏覽器

3. 下載證書和部署安全

將證書上傳到服務器,並在Nginx服務器中添加https訪問的配置項,基本就能夠訪問了,下面來講說具體的過程。bash

1. 申請證書

大多數人都是經過阿里雲或者是騰訊雲來申請ssl安全證書的,我本身的服務器也是騰訊雲,由於本身沒有備案,因此使用FreeSSL服務器

申請證書網站

輸入本身想要配置ssl的域名,並輸入郵箱點擊建立便可。網站

填坑:ui

因爲本身沒有備案域名,使用別人分配的二級域名,所以須要選擇文件驗證,而上面的默認是使用DNS驗證,因此出現了錯誤。

使用文件驗證

2. 使用文件驗證域名全部權

點擊建立以後,會在下面展現文件驗證須要的文件、文件夾和文件內容,並在服務器上域名對應的目錄下,建立如圖所示的文件夾和文件,並將內容寫入到文件中,可是會發現訪問域名下的這個文件的時候出現下面的錯誤。

須要上傳的文件和內容

填坑:訪問域名時出現403

訪問域名出現403錯誤

由於服務器訪問時出現了403,因此須要查看log錯誤日誌,這個文件是在/var/log/nginx/error.log,查看錯誤日誌,顯示如圖:

錯誤日誌

緣由是:當前登陸的是root用戶,建立文件和文件夾的時候,默認用戶和用戶組是root,而在Nginx的服務器配置中,默認的訪問用戶是:nginx,因此纔會出現403錯誤,所以須要將建立的文件和文件夾的用戶和用戶組修改成nginx,使用的命令以下:

chown -R nginx:nginx api
複製代碼

如今訪問網站,正常顯示內容了,以下圖:

網站能夠正常訪問

3. SSL申請證書端驗證域名

如今能夠訪問域名了,所以須要在freessl網站驗證,能夠先點檢測,而後再驗證。 驗證成功以後,能夠點擊下載證書,而後將證書上傳到服務器,或者是在服務器中建立對應的文件,而後將內容粘貼過去也行。證書以下:

展現證書內容

4. 上傳證書、配置https訪問

如今已經將證書上傳到服務器,接着是配置ssl。 在配置ssl以前,咱們能夠建立一個文件夾,專門存儲ssl的證書,這樣全部的證書都是存放在一塊兒,便於管理。 配置Nginx,打開當前域名對應的Nginx配置,修改下面的幾個配置項:

1. 修改監聽端口號,由原來的80改成443
listen 443;   #將原來的80改爲443
2. 添加ssl的證書地址和密鑰地址
ssl      on; #設置開啓https訪問
ssl_certificate  /home/Fly/keys/api.crt; #配置證書位置
ssl_certificate_key /home/Fly/keys/api-private.key; #配置密鑰位置
複製代碼

注意:在配置ssl時,每一個配置項結束以後,須要加上分號,不然重啓Nginx會報錯

完整的Nginx配置以下:

server {
    listen       80;
    server_name  ***.com;

    #charset koi8-r;
    #access_log /var/log/nginx/host.access.log main;

    set $root   /home/wwwroot/api;
    ssl                 on;
    ssl_certificate     /home/Fly/keys/api.crt;
    ssl_certificate_key /home/Fly/keys/api-private.key;

    location / {
        root   $root;
        index  index.html index.htm index.php;
    }

    #error_page 404 /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #location ~ \.php$ {
    # proxy_pass http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    # deny all;
    #}
}
複製代碼

配置完畢以後,重啓Nginx服務器,命令:

service nginx restart
複製代碼

如今可使用https進行訪問,顯示如圖:

https訪問網站成功

5. 將全部的http請求都重定向到https請求

目前咱們在瀏覽器中直接輸入域名的話,默認是http請求,它就會請求到下面的頁面。

瀏覽器默認http請求

因此須要在配置文件中增長一個server,使用rewrite,將全部的http請求重定向到https,配置以下:

server {
    listen 80;
    server_name xxx.com;
    rewrite ^(.*)  https://$host$1 permanent; #請求重定向到https
}
複製代碼

重啓Nginx服務器,如今訪問時,全部的請求都會轉到https。

總結:

經過這次的操做,明白了Nginx的基本配置和具體的配置項的含義,下次出現問題就不會摸不着頭腦了,固然還有不足之處:目前證書只能使用1年,一年以後須要從新申請證書,比較麻煩,後面研究一下,如何在證書快到期以後,自動從新申請並配置,不須要手動操做。

相關文章
相關標籤/搜索