Nginx環(huán)境下搭建HTTPS

本服務器使用的環(huán)境是nginx,系統(tǒng)是Ubuntu,使用的阿里云的服務器,所以在阿里云中下載證書。 當然你還可以去CA認證服務機構官網或七牛云存儲中下載證書

什么,你的服務器是LAMP環(huán)境怎樣配置HTTPS,請轉戰(zhàn)到博主的另一篇博文吧,地址是Apache環(huán)境下搭建HTTPS環(huán)境

一:在阿里云官網下載CA證書

  • 1、在阿里云官網里的云盾中CA服務證書選項里進行下載證書


    劉滔 CA證書下載入口
  • 2、選擇并購買證書,本人選的是DV SSL,1年內保護一個域名

劉滔 DV SSL

如圖,選擇“立即購買”

立即購買
  • 3.支付成功后,去云盾控制臺-->選擇證書服務-->補全證書信息-->綁定一個域名(如www.mydomian.com)-->填寫個人信息-->系統(tǒng)生成CSR,點擊創(chuàng)建按鈕-->提交審核

    1. 選擇“補全”


      補全
    1. 填寫你的域名


      域名
  • 3)系統(tǒng)生成CSR,點擊創(chuàng)建按鈕,提交審核


  • 4.提交審核后,可以在我的證書出看到證書的詳情。這時候點擊“進度”就得到一條主機記錄和主機記錄值。需在該域名下解析一條記錄。


    4.png
  • 5.到指定域名(如www.domain.com)下解析DNS,記錄類型選擇“CNAME“,根據上一步得到的兩個值分別填寫后進行解析。

  • 6.下載證書到本地后,上傳到自己的服務器上。因為我的服務器是Apache,所以我對應下載的是針對apache服務器的證書。當然你也可以選擇nginx、tomcat或其他的證書。在證書下載頁,有關于安裝證書及如何配置ssl的說明。


第二步:配置服務器
  • 1.上傳下載的證書for Nginx到服務器,新建一個新命令窗口用scp上傳,并解壓
  root@laravel:~# scp /.../ssl.zip  root@120.**.***.***:/etcinx/ssl/yourdomain.com.ssl/
  • 2.打開Nginx安裝目錄下的站點目錄sites-avaliable
  root@laravel:~# cd /etcinx/sites-available
  • 3.打開你要配置的站點,監(jiān)聽443端口,將其修改為:
server {
    listen 443;
    server_name www.yourdomain.com;
    ssl on;
    root html;
    index index.html index.htm;
    ssl_certificate   /etcinx/ssl/yourdomain.com.ssl/21******.pem;
    ssl_certificate_key  /etcinx/ssl/yourdomain.com.ssl/21******.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
        root html;
        index index.html index.htm;
    }
}

保存并修改,這里開啟了ssl;并且在這里配置域名,將server_name配置為www.yourdomain.comssl_certificate配置證書.pem文件的絕對路徑,ssl_certificate_key配置證書“.key”的絕對路徑。重啟nginx服務,就可以帶上https的域名訪問了。

  root@laravel:~# nginx -s reload
第三步:nginx反向代理

因為博主將博客項目放置在服務器的某個端口下(這里假設是0055端口),所以就需要將0055端口反向代理到443端口,通過https域名訪問我的博客。那么如何實現反向代理呢,將上一步監(jiān)聽443端口代碼修改如下:

server {
    listen 443;
    server_name www.yourdomain.com;
    ssl on;
    root html;
    index index.html index.htm;
    ssl_certificate   /etcinx/ssl/yourdomain.com.ssl/21******.pem;
    ssl_certificate_key  /etcinx/ssl/yourdomain.com.ssl/21******.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass http://127.0.0.1:0055;
    }
}
第三步:nginx重定向

當你想要隨意輸入域名都能跳轉到https下,那么就需要對域名進行重定向配置,這里,我們將80端口和443端口進行重定向,代碼如下:

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

    rewrite ^(.*) https://www.yourdomain.com$1 permanent;
}
server {
    listen  443;
    server_name www.yourdomain.com yourdomain.com;

    rewrite ^(.*) https://www.yourdomain.com$1 permanent;
}

那么,為什么需要特別地對80和443端口重定向呢?HTTPS實際上就是SSL over HTTP,它使用默認端口443,而不是像HTTP那樣使用端口80來和TCP/IP進行通信。
當我們在瀏覽器輸入www.yourdomain.comyourdomain.com時,nginx會將此域名重定向到https下,通過https訪問到443端口。又因為443端口反向代理了0055端口。因此最后屬于此域名的任何形式都能訪問到0055端口下對應的項目。所以博主通過本篇博文的操作,就可以在瀏覽器地址欄里輸入特定域名的任何形式訪問到我的博客項目了,并且還是加密過得網站。

原文出處

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容