目录

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

Nginx集群之SSL证书的WebApi微服务的更多相关文章

  1. Nginx集群之SSL证书的WebApi身份验证

    目录 1       大概思路... 1 2       Nginx集群之SSL证书的WebApi身份验证... 1 3       AuthorizeAttribute类... 2 4       ...

  2. Nginx集群之SSL证书的WebApi令牌验证

    目录 1       大概思路... 1 2       Nginx集群之SSL证书的WebApi令牌验证... 1 3       Openssl生成SSL证书... 2 4       编写.NE ...

  3. Nginx集群之基于Redis的WebApi身份验证

    目录 1       大概思路... 1 2       Nginx集群之基于Redis的WebApi身份验证... 1 3       Redis数据库... 2 4       Visualbox ...

  4. 集群、分布式、SOA、微服务、webService等思想的整理

    引子:前几天甲方问我,他用wpf弄个界面,能不能通过其他语言给他传输数据,我由此想到了webservice(此时此刻,我也没有用过webServices),作日翻阅了一些资料,对这块技术有了个大概的了 ...

  5. 扎实基础之从零开始-Nginx集群分布式.NET应用

    1       扎实基础之快速学习Nginx Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.其特点是占有内存少 ...

  6. Nginx集群之WCF分布式身份验证(支持Soap)

    目录 1       大概思路... 1 2       Nginx集群之WCF分布式身份验证... 1 3       BasicHttpBinding.ws2007HttpBinding. 2 4 ...

  7. linux 下nginx 集群CAS单点登录实现

    1.单点登录服务器CAS应用配置于tomcat下. 1)key生成: keytool -genkey -alias mycas -keyalg RSA -keysize 2048 -keystore ...

  8. Nginx集群之.Net打造WebApp(支持IOS和安卓)

    目录 1       大概思路... 1 2       Nginx集群之.Net打造WebApp(支持IOS和安卓) 1 3       安卓模拟器... 1 4       MUI框架... 3 ...

  9. nginx 集群介绍

    nginx 集群介绍 完成一次请求的步骤 1)用户发起请求 2)服务器接受请求 3)服务器处理请求(压力最大) 4)服务器响应请求 缺点:单点故障 单台服务器资源有限 单台服务器处理耗时长 ·1)部署 ...

随机推荐

  1. layui使用心得

    表单控件样式没生效, 因为没引入form. layui.use('form', function(){ var form = layui.form; }); radio改变事件没生效, 需要手动fil ...

  2. 时间紧任务重---extjs的学习就这么开始吧

    我们的extjs借助了一个模板引擎--artTemplate,它是一个开源的项目,不多说,给个链接吧:http://aui.github.io/artTemplate/ 直接上代码: <!DOC ...

  3. netty详解之io模型

    提起IO模型首先想到的就是同步,异步,阻塞,非阻塞这几个概念.每个概念的含义,解释,概念间的区别这些都是好理解,这里深入*nix系统讲一下IO模型. 在*nix中将IO模型分为5类. Blocking ...

  4. 进程组与会话 Linux Process Groups and Sessions

    在类Unix系统中,用户通常会跟各种相关的进程打交道.虽然在登录的时候只有一个终端进程(用户对应的登录shell ,通过这个shell启动各种程序和服务),但通常不久以后就会产生许多相关的进程,例如进 ...

  5. JNI参考的资料

    1.Android JNI和NDK学习(09)--JNI实例二 传递类对象 http://www.cnblogs.com/skywang12345/archive/2013/05/26/3093593 ...

  6. MapReduce编程(一) Intellij Idea配置MapReduce编程环境

    介绍怎样在Intellij Idea中通过创建mavenproject配置MapReduce的编程环境. 一.软件环境 我使用的软件版本号例如以下: Intellij Idea 2017.1 Mave ...

  7. [Phonegap+Sencha Touch] 移动开发26 Android下的sencha touch程序,转屏时,Ext.Viewport不能触发orientationchange事件的解决的方法

    Sencha touch 2.4.2 已经解决问题了. 比方你为Ext.Viewport的orientationchange事件加入了一个监听方法: Ext.Viewport.on('orientat ...

  8. 自学Python5.3-内置模块(1)

    内置模块(1)内置模块是Python自带的功能,在使用内置模块相应的功能时,需要  先导入 再 使用  1.OS模块       用于提供系统级别的操作: os.getcwd() 获取当前工作目录,即 ...

  9. Natas Wargame Level27 Writeup(SQL表的注入/溢出与截取)

    前端: <html> <head> <!-- This stuff in the header has nothing to do with the level --&g ...

  10. charles支持https抓包配置

    自从公司站点全部启用https后,使用charles就不能像以前那样愉快的抓包啦!不过没关系,这里教你怎么配置charles,使其支持https抓包.之前有一篇介绍charles的使用,参考这篇:ht ...