Nginx集群之SSL證書的WebApi微服務

来源:http://www.cnblogs.com/yongfeng/archive/2017/12/01/7921905.html
-Advertisement-
Play Games

Nginx集群是.NET WebApi提供了負載均衡的其中一種實現方式,同時還增加了SSL認證,能夠確保WebApi能夠以加密形式進行響應。Nginx使用其中的SSL模塊,能夠支持HTTPS的配置,當然也能夠讓HTTP與HTTPS並存(只需要增加listen 80監聽埠則可),本文主要實現HTTP... ...


目錄

1       大概思路... 1

2       Nginx集群之SSL證書的WebApi微服務... 1

3       HTTP與HTTPS(SSL協議)... 1

4       Openssl生成SSL證書... 2

5       編寫.NET WebApi 3

6       部署WebApi到區域網內3台PC機... 5

7       Nginx集群配置搭建... 6

8       運行結果... 8

9       總結... 9

1       大概思路

l  Nginx集群之SSL證書的WebApi微服務

l  HTTP與HTTPS(SSL協議)

l  Openssl生成SSL證書

l  編寫.NET WebApi

l  部署WebApi到區域網內3台PC機

l  Nginx集群配置搭建

l  運行結果

l  總結

2       Nginx集群之SSL證書的WebApi微服務

Nginx集群是.NET WebApi提供了負載均衡的其中一種實現方式,同時還增加了SSL認證,能夠確保WebApi能夠以加密形式進行響應。Nginx使用其中的SSL模塊,能夠支持HTTPS的配置,當然也能夠讓HTTP與HTTPS並存(只需要增加listen 80監聽埠則可),本文主要實現HTTP訪問則跳轉至以HTTPS方式。

以下是本文講述的主要結構圖:

客戶端訪問Nginx的功能變數名稱zhyongfeng.com,然後Nginx進行負載均衡,返回https的響應。Nginx集群之SSL證書的WepApi微服務架構,如下圖所示:

 

3       HTTP與HTTPS(SSL協議)

HTTP(HyperText Transfer Protocol)超文本傳輸協議是互聯網上應用最為廣泛的一種網路協議。所有的WWW文件都必須遵守這個標準。

HTTPS(Secure Hypertext Transfer Protocol)安全超文本傳輸協議:它是一個安全通信通道,它基於HTTP開發,用於在客戶電腦和伺服器之間交換信息,它使用安全套接字層(SSL)進行信息交換,簡單來說它是HTTP的安全版。

 

HTTPS和HTTP的區別:

l  https協議需要到ca申請證書,一般免費證書很少,需要交費。

l  http是超文本傳輸協議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協議。

l  http和https使用的是完全不同的連接方式用的埠也不一樣,前者是80,後者是443。

l  http的連接很簡單,是無狀態的。

l  HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議 要比http協議安全。

 

4       Openssl生成SSL證書

OpenSSL 是一個安全套接字層密碼庫,囊括主要的密碼演算法、常用的密鑰和證書封裝管理功能及SSL協議,並提供豐富的應用程式供測試或其它目的使用。

本文安裝了Visualbox虛擬機,內裝了Linux Ubuntu系統,所以使用內置的openssl,具體生成SSL證書命令行如下:

(Windows下可以到https://www.openssl.org/source/下載,使用ActivePerl安裝Openssl):

自行頒發不受瀏覽器信任的SSL證書,先生成一個RSA密鑰

zhyongfeng@zhyongfeng-VirtualBox:~$ openssl genrsa -des3 -out server.key 1024

拷貝一個不需要輸入密碼的密鑰文件

zhyongfeng@zhyongfeng-VirtualBox:~$ openssl rsa -in server.key -out server_nopass.key

生成一個證書請求,會提示輸入省份、城市、功能變數名稱信息等,重要的是,email一定要是你的功能變數名稱尾碼的。這樣就有一個 csr 文件了,提交給 ssl 提供商的時候就是這個 csr 文件。

zhyongfeng@zhyongfeng-VirtualBox:~$ openssl req -new -key server.key -out server.csr

自己簽發證書

zhyongfeng@zhyongfeng-VirtualBox:~$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out

如下圖所示:

5       編寫.NET WebApi

UserController.cs

using System.Net;
using System.Web.Http;

namespace SSLWebApi.Controllers
{
    [RoutePrefix("api/User")]
    public class UserController : ApiController
    {
        /// <summary>
        /// 獲取當前用戶信息
        /// </summary>
        /// <param name="msg"></param>
        /// <returns></returns>
        [HttpPost]
        [Route("PostMessage")]
        public string PostMessage([FromBody]string msg)
        {
            return string.Format("當前輸入的消息是:{0}", msg);
        }

        [Route("GetMachine")]
        public string GetMachine()
        {
            string AddressIP = string.Empty;
            foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
            {
                if (_IPAddress.AddressFamily.ToString() == "InterNetwork")
                {
                    AddressIP = _IPAddress.ToString();
                }
            }
            return string.Format("當前系統的IP是:{0}", AddressIP);
        }
    }
}

安裝Microsoft.AspNet.WebApi.HelpPage

註冊HelpPage頁面:

Global.asax

using System.Web.Http;
using System.Web.Mvc;

namespace SSLWebApi
{
    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            //註冊HelpPage頁面
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
        }
    }
}

 編譯後如下:

 

6       部署WebApi到區域網內3台PC機

將WebApi部署到以下10.92.202.56的3台PC機

 

7       Nginx集群配置搭建

通過自主義功能變數名稱zhyongfeng.com:80埠進行負載均衡集群訪問,則訪問C:\Windows\System32\drivers\etc\hosts,添加下列“本機IP 自定義的功能變數名稱”:

10.93.85.66     zhyongfeng.com

Nginx的localhost配置如下:

worker_processes  1; 
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    # HTTPS server
    server {
        listen       443 ssl;
        server_name  localhost;
        ssl_certificate      server.crt;
        ssl_certificate_key  server_nopass.key;
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
}

Nginx的集群配置:

#user  nobody;
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    #server {
    #    listen       80;
    #    server_name  localhost;
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #    error_page   500 502 503 504  /50x.html;
    #    location = /50x.html {
    #        root   html;
    #    }
    #}

    upstream zhyongfeng.com {
        server    10.92.202.56:560;
        server    10.92.202.57:570; 
        server    10.92.202.58:580;
    }
    server {
        listen       80;
        server_name  zhyongfeng.com;
        rewrite ^(.*)$  https://$host$1 permanent;
    }
    # HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  zhyongfeng.com;
        ssl_certificate      server.crt;
        ssl_certificate_key  server_nopass.key;
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;
        location / {
            proxy_pass   http://zhyongfeng.com;
        }
    }
}

運行CMD:

D:\DTLDownLoads\nginx-1.10.2>start nginx

D:\DTLDownLoads\nginx-1.10.2>nginx -s reload 

8       運行結果

Nginx的localhost配置運行結果:

Nginx的集群配置運行結果:

 

9       總結

Nginx使用SSL模塊可以支持WebApi的https訪問,增加了訪問的安全性。SSL模塊,具體可以參考Nginx中文文檔http://www.nginx.cn/doc/的SSL*模塊。WebApi基於SSL協議數據傳輸的加密, 保證了通信的安全性。SSL的功能包含了建立伺服器與客戶之間安全的數據通道、伺服器對客戶的身份認證(如公鑰、私鑰)等。

 

源代碼下載:

http://download.csdn.net/download/ruby_matlab/10138057

 

PDF下載:

Nginx集群之SSL證書的WebApi微服務.pdf


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

-Advertisement-
Play Games
更多相關文章
  • “存在則更新,不存在則插入的邏輯”併發情況下的處理 在sqlserver中: 在sqlserver中,是通過可序列化隔離級別+排它鎖的方式來鎖定一個範圍來實現的當前鎖定一個不存在的記錄的時候,sqlserver是通過範圍鎖來實現的,具體鎖定的範圍,表中已存在的數據和當前具體判斷的Id有關參考之前寫的 ...
  • 1、創建和查看索引 所謂普通索引,就是在創建索引時,不附加任何限制條件(唯一、非空等限制)。該類型的索引可以創建在任何數據類型的欄位上。 (1)創建表時,創建普通索引 語法: 例子: (2)在已經存在的表上創建普通索引 語法: 例子: 2、創建和查看唯一索引 (1)創建表時創建唯一索引 語法: 例子 ...
  • 環境:aix 7.1 ,oracle 12.1.0.2 rac -3節點。 硬體故障後,硬體工程師更換了內聯網卡,不知為何資源VIP也有問題,只好先添加了VIP srvctl add vip -node rac-wy1 -address rac-wy1-vip.nsn.com/255.255.255 ...
  • oracle提供了三個隔離級別: 1.讀提交 ,簡而言之只能讀取語句開始執行前提交的數據 2.串列,這個好理解,就是事務串列運行,避免經典的三個場景-臟讀、不可重覆讀、幻讀。 3.只讀,oracle已經實現的只讀模式。 -- 這些都很容易理解,問題的關鍵是解決一些實際的問題,例如典型的汽車票銷售。 ...
  • 一、建表 1、最簡單的建表CREATE TABLE user(id int,name char(20),age int); 2、帶主鍵帶註釋和預設值創建表CREATE TABLE user(id INT PRIMARY KEY AUTO_INCREMENT COMMENT '設置主鍵自增',name ...
  • 1、表的基本概念 每一行代表一條唯一的記錄,每一列代表記錄中的一個欄位。 2、創建表 例子: 3、查看表結構 (1)DESCRIBE語句查看表定義 語法: 例子: (2)SHOW CREATE TABLE語句查看詳細表詳細定義 語法: 例子: 註意:在顯示表詳細定義信息時,可以使用“;”、“\g”和 ...
  • 1 //首先要添加 System.ServiceProcess.dll 引用 2 ServiceController sc = new ServiceController("MSSQLSERVER"); 3 4 //判斷服務是否已經關閉 5 if (sc.Status == ServiceContr ...
  • ThoughtWorks在每年都會出品兩期技術雷達,這是一份關於技術趨勢的報告,它比起一些我們能在市面上見到的其他各種技術行情和預測報告,更加具體,更具可操作性,因為它不僅涉及到新技術大趨勢,比如雲平臺和大數據,更有細緻到類庫和工具的推介和評論,從而更容易落地。 Thoughtworks技術雷達 T ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...