讓你的網站免費支持 HTTPS 及 Nginx 平滑升級

来源:http://www.cnblogs.com/mafly/archive/2016/11/16/https_nginx.html
-Advertisement-
Play Games

為什麼要使用 HTTPS ? 首先來說一下 HTTP 與 HTTPS 協議的區別吧,他們的根本區別就是 HTTPS 在 HTTP 協議的基礎上加入了 SSL 層,在傳輸層對網路連接進行加密。簡單點說在 HTTP 協議下你的網站是光著身子在奔跑,但到了 HTTPS 下你穿了一件衣服,別人看不到你的肌肉 ...


為什麼要使用 HTTPS ?

首先來說一下 HTTP 與 HTTPS 協議的區別吧,他們的根本區別就是 HTTPS 在 HTTP 協議的基礎上加入了 SSL 層,在傳輸層對網路連接進行加密。簡單點說在 HTTP 協議下你的網站是光著身子在奔跑,但到了 HTTPS 下你穿了一件衣服,別人看不到你的肌肉了(當然,這好像不是好事,不重要),更安全了一點點,就大概這個意思。
SSL 依靠證書來驗證伺服器的身份,併為瀏覽器和伺服器之間的通信加密。採用 HTTPS 的伺服器必須從證書頒發機構 CA(Certificate Authority)申請一個用於證明伺服器用途類型的證書,當然一般都有收費,而且不便宜,其實你也可以通過 OpenSSL 自己造一個證書,這樣有一個弊端是大家都不信任你造的證書。那怎麼辦?

你必須知道的步驟

通過上面的簡單介紹你應該知道了,要想你的網站支持 HTTPS ,就必須有一個被信任的證書,那這個證書就必須由證書頒發機構(如VeriSign、Microsoft等)頒發的,否則你就會遇到如打開 12306.cn 這樣的您的連接不是私密連接的尷尬。
12306.cn.png

你肯定不想用戶打開後,你的網站是上面這樣的,身邊有好多朋友買票時問過我這是什麼意思?我都沒辦法解釋給他們,哎。所以你需要要有下麵幾個東西:

  • 一個功能變數名稱(你肯定有)
  • Web 伺服器(Nginx,Apache,IIS都行)
  • SSL 證書(最好 CA 機構頒發的)

就完了,上面三個東西可能最麻煩就是搞到一個被全世界都信任的證書了,沒關係,現在我試著讓你免費獲取一個,註意是免費!!!
提供免費的證書商也就那麼幾個,最知名的可能是 StartSSL ,其他我還知道 Let's Encrypt ,不過這裡我用的是國內騰訊雲的。

感謝騰訊雲

對於得到一個受信任的證書很簡單,找第三方證書頒發機構購買就行了,但是一個每年大幾千的證書費用對於小企業或個人來說,有點接受不了,或者是沒錢。現在好了,騰訊雲認證用戶可以申請到賽門鐵克(Symantec)免費的 TrustAsia DV SSL 證書了。

登錄騰訊雲管理平臺
SSL 證書申請地址在這裡: https://console.qcloud.com/ssl ,點擊申請證書,會彈出下麵的框:
申請證書.png

上面顯示什麼價值1900元/年,不要管,點擊確認按鈕。彈出表單你填寫你要綁定的功能變數名稱就行了:
申請1.png

接下來會驗證你的功能變數名稱,簡單說就是驗證一下這個功能變數名稱是不是你的,所以你要在功能變數名稱解析添加一條 CName 記錄,實在不懂的話,官方也有怎麼添加的文檔。
cname.png

一般驗證過程會很快,幾個小時吧,申請通過後,這時候你看到狀態是已頒發後,就能下載證書了。
證書詳情-完成.png

下載下來你打開文件會看到Nginx,Apache,IIS三個文件夾,裡邊放的就是對應各個伺服器的證書。到這裡,整個證書申請流程就算完了,接下來就是配置 Web 伺服器來支持網站的 HTTPS 訪問了。我這裡用的 Nginx 演示。

Nginx 平滑升級以支持 HTTPS

要想讓 Web伺服器支持 HTTPS ,首先你的伺服器肯定要支持 SSL ,所以我們先檢查 Nginx 是否支持 SSL :

/usr/local/nginx/sbin/nginx -V

arguments.png

通過命令顯示信息,我們看configure arguments中是否有 -with-http_ssl_module字樣,如果像我這樣沒有的話,你就需要重新編譯 Nginx 以支持 SSL 了。如果有,請跳過這步驟,直接看Nginx 配置 HTTPS 服務那一節。

安裝 Nginx 可能大家都會,不會的可以看 從零開始學 Java - CentOS 下安裝 Nginx ,但是平滑升級 Nginx 可能你沒有體驗過,這樣說吧,線上上伺服器環境下,你要支持 HTTPS 訪問,但是你發現你的 Nginx 不支持 SSL ,你肯定不能卸載 Nginx 重新安裝時載入 SSL 模塊,因為那是線上伺服器。你只能在現有安裝的 Nginx 下進行無痛升級以以支持 SSL ,這就用到了 Nginx 的 平滑升級 概念。

找到你之前安裝 Nginx 時的編譯目錄,如果你和我一樣找不到或許刪除了,那我們就需要重新下載一個 Nginx 了,當然我們是通過 wget 方式,看命令:

wget -c https://nginx.org/download/nginx-1.10.1.tar.gz
tar -zxvf nginx-1.10.1.tar.gz
cd nginx-1.10.1

配置,加入 SSL 模塊:

./configure --with-http_ssl_module
make

configure.png

註意,千萬不能在像安裝的時候make install了,因為我們這是升級。

備份原 Nginx 執行腳本

mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old

把新版本 Nginx 編譯腳本放到可執行文件目錄下

cd objs/
cp nginx /usr/local/nginx/sbin/

mv_cp.png

進行平滑升級,命令:

make upgrade

upgrade.png
這時候會輸出這些信息:

/usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
sleep 1
test -f /usr/local/nginx/logs/nginx.pid.oldbin
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`

沒問題之後接下來,查看現在目前版本及安裝模塊:

/usr/local/nginx/sbin/nginx -V

nginx-v.png
看到已經從 1.4.6 版本升級到了 1.10.1,而且這種升級不影響正常訪問的。線上環境操作也是可以的。

Nginx 配置 HTTPS 服務

編輯配置文件:

cd /usr/local/nginx/conf
vim nginx.conf

拉到最下麵,會看到 HTTPS 配置被註釋掉了。嗯,這是模板,我們就在這配置。

Nginx_Conf.png

文字版:

server {
    listen       443 ssl;
    server_name  www.domain.com;

    ssl on;
    ssl_certificate 1_www.domain.com_bundle.crt;
    ssl_certificate_key 2_www.domain.com.key;

    ssl_session_timeout  5m;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers  ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers  on;

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

把上面的ssl_certificatessl_certificate_key替換成你下載下來的證書存放路徑就行,記著下載下來的證書這種配置是放在/usr/local/nginx/conf目錄下的,當然你也可以隨意放。

這時候,你就可以打開瀏覽器訪問一下試試了。正常情況 HTTPS 請求是打不開的,因為我們還沒設置防火牆,記得要開放443埠!,嗯,設置過防火牆就可以正常訪問了吧。

其實到這裡,這個伺服器支持 HTTPS 請求流程已經結束了,但是你發現好多人在瀏覽器地址欄輸入功能變數名稱的時候都不輸入http://https://的,因為瀏覽器會自動幫我們加上http://的,所以,這時候輸入我們剛剛設置的功能變數名稱其實還是沒有走https://請求,那怎麼讓就是輸入http://也走HTTPS呢?

很簡單,Nginx 中這樣配置就行啦!

server {
    listen  80;
    server_name  www.domain.com;

    rewrite ^(.*)$  https://$host$1 permanent;
}

我們利用rewrite來做跳轉。監聽到80埠的 HTTP 請求後,就轉發到 HTTPS ,當然還有好多處理方式。

總結一下

這篇文章講了一下怎麼申請免費的 HTTPS 證書,然後利用 Nginx 伺服器來配置 HTTPS 請求訪問,並其中順手平滑升級 Nginx,如絲般順滑的升級,不影響正常訪問。HTTPS 方式的傳輸對我們網站來說應該是提高了一些安全性的,況且這種方式又很簡單,可以試著搞一搞。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • SQL Server 2012 安裝過程很漫長, 裡面很多界面不一一截取了,我分別在win7 企業版 64位 和 win10專業版SP1 64位 裝了SQL Server 2012 ,都沒有問題。 1. 安裝的功能選擇,選擇“全部” 2. 資料庫引擎設置,選擇“混合模式”,給系統管理員sa設定登錄密 ...
  • 雖然使用sqlserver去調用服務介面的情況比較少,但也可以去瞭解下對應的使用情況 一、首先要開啟組件的配置 二、調用webservice 1、調用webservice的時候建議使用fiddler去獲取一下發送數據過程用contenttype的類型以及調用介面的數據 2、使用sqlserver調用 ...
  • 由於目前目標檢測及分類等研究方向廣泛使用深度學習的方法,而多數神經網路框架(如caffe和tensorflow等)在windows下安裝極為困難,所以本文將記錄我安裝Ubuntu的部分筆記,並就出現過的一些問題提供適合新手的簡單辦法。本文所安裝ubuntu版本為14.04。 新手採用本文所介紹的安裝 ...
  • 今天使用kali的時候,由於虛擬機太多,密碼還不一樣,就忘記kali的登錄密碼了(我就是魚的記憶,只有七秒)。。。。 1.重啟kali,進入恢復系統,按e鍵進入編輯模式 2.游標移動到/boot/vmlinuz行修改singal前的ro為rw,並且在initrd=/install/initrd.gz ...
  • 虛擬機:VMware12.0 操作系統:Ubuntu16.04 LTS (新安裝系統) 已經按照網上的步驟: 1.安裝git: 2.安裝依賴包: 3.安裝Pyenv: 4.配置環境: 最終結果: ...
  • Atlas是360團隊弄出來的一套基於MySQL-Proxy基礎之上的代理,修改了MySQL-Proxy的一些BUG,並且優化了很多東西。而且安裝方便。配置的註釋寫的蠻詳細的,都是中文。英文不好的同學有福了。 Atlas官方鏈接: https://github.com/Qihoo360/Atlas/ ...
  • 由於工作需要,經常要使用遠程桌面連接到Windows伺服器。Windows的預設遠程桌面埠號為3389,為增加伺服器安全性,除了在硬體設備做規則外,還可以用Windows自帶的策略來增加Windows伺服器的安全下。 下麵以Windows2008R2為例,分別設置二種策略:(兩種任選一種,不能同時 ...
  • 在windows下,一個文件有:創建時間、修改時間、訪問時間。而在Linux下,一個文件也有三種時間,分別是:訪問時間、修改時間、狀態改動時間。 1、訪問時間,讀一次這個文件的內容,這個時間就會更新。比如對這個文件使用more命令。ls、stat命令都不會修改文件的訪問時間。 2、修改時間,對文件內... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...