希望实现 發表於 2022-8-16 15:48:00

Taurus.MVC 微服务框架 入门开发教程:项目部署:2、让Kestrel支持绑定多个域名转发,替代Ngnix使用。

<div class="postTitle">
<div class="postTitle">
<h1>系列目录:</h1>
</div>
<div id="cnblogs_post_body" class="blogpost-body blogpost-body-html">
<p>本系列分为项目集成、项目部署、架构演进三个方向,后续会根据情况调整文章目录。</p>
<p>开源地址:https://github.com/cyq1162/Taurus.MVC</p>
<p>本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单。</p>
<p>Taurus.MVC 微服务框架 入门开发教程:项目集成:1、服务端:注册中心、网关(提供可运行程序下载)。</p>
<p>Taurus.MVC 微服务框架 入门开发教程:项目集成:2、客户端:ASP.NET&nbsp;Core(C#)项目集成:应用中心。</p>
<p>Taurus.MVC 微服务框架 入门开发教程:项目集成:3、客户端:其它编程语言项目集成:Java集成应用中心。</p>
<p>Taurus.MVC 微服务框架 入门开发教程:项目集成:4、默认安全认证与自定义安全认证。</p>
<p>Taurus.MVC 微服务框架 入门开发教程:项目集成:5、统一的日志管理。</p>
<p>Taurus.MVC 微服务框架 入门开发教程:项目集成:6、微服务间的调用方式:Rpc.StartTaskAsync。</p>
<p>Taurus.MVC 微服务框架 入门开发教程:项目部署:1、微服务应用程序常规部署实现多开,节点扩容。</p>
<p>Taurus.MVC 微服务框架 入门开发教程:项目部署:2、让Kestrel支持绑定多个域名转发,替代Ngnix使用。</p>
<p>Taurus.MVC 微服务框架 入门开发教程:项目部署:3、微服务应用程序版本升级:全站升级和局部模块升级。</p>
<p>Taurus.MVC 微服务框架 入门开发教程:项目部署:4、微服务应用程序发布到Docker部署(上)。</p>
<p>Taurus.MVC 微服务框架 入门开发教程:项目部署:5、微服务应用程序发布到Docker部署(下)。</p>
<p>Taurus.MVC 微服务框架 入门开发教程:项目部署:6、微服务应用程序Docker部署实现多开。</p>
<p>Taurus.MVC 微服务框架 入门开发教程:项目部署:7、微服务节点的监控。</p>
<p>Taurus.MVC 微服务框架 入门开发教程:架构演进:1、从单应用程序简单过渡到负载均衡。</p>
<p>Taurus.MVC 微服务框架 入门开发教程:架构演进:2、负载均到模块拆分负载。</p>
<p>Taurus.MVC 微服务框架 入门开发教程:架构演进:3、模块拆分负载到多级负载均衡。</p>
<p>Taurus.MVC 微服务框架 入门开发教程:运行示例:https://github.com/cyq1162/Taurus.MVC.MicroService.Demo</p>
</div>
</div>
<h1>前言:</h1>
<p>对于ASP.Net Core&nbsp;项目,部署在Linux时,默认Kestrel不支持绑定域名。</p>
<p>对于需要绑定域名的,往往需要引入第三方,如:Nginx等配套使用。</p>
<p>而今天介绍的教程,则可以借Taurus.MVC 微服务架构的方式,直接替代Nginx使用。</p>
<p>下面看具体教程:</p>
<h1>1、使用简单负载均衡架构模式:注册中心+应用中心</h1>
<p><img src="https://img2022.cnblogs.com/blog/17408/202208/17408-20220816142215515-2084738686.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>如果成为注册中心、或应用中心,可以看本系列第一篇,文章开头有链接。</p>
<h1>2、注册中心:运行时绑定监听80端口:</h1>
<p>说明:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">、绑定80端口,也即默认是接收所有的域名(只要解析到这个IP的80端口)

</span><span style="color: rgba(128, 0, 128, 1)">2</span>、如果要绑定https,Kestrel是支持https和证书添加的。<br><br><span style="color: rgba(255, 0, 0, 1)"><strong>3、注册中心默认也可以当网关使用的。</strong></span></pre>
</div>
<p>其appsettings.json配置项大约为:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">AppSettings</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">: {
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">MicroService.Server.Name</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">RegCenter</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置为服务端运行的:注册中心</span>
    <span style="color: rgba(128, 0, 0, 1)">"Urls</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">http://*:80</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
}
}</span></pre>
</div>
<p>必要配置仅需要将微服务配置为注册中心,然后绑定80端口即可。</p>
<p><span style="color: rgba(255, 0, 0, 1)"><strong>需要配置https证书的,下文后面补充了教程(2023-03-10)。</strong></span></p>
<p>然后静静等待应用中心上门即可。</p>
<h1>3、应用中心:模块注册名称填写要绑定的:域名即可。</h1>
<p>说明:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">、配置客户端模块名称为需要绑定的域名,如:xxx.xxx.com

</span><span style="color: rgba(128, 0, 128, 1)">2</span>、指定注册中心的地址。</pre>
</div>
<p>其appsettings.json配置项大约为:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{

</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">AppSettings</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">: {
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">MicroService.Client.Name</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">www.a.com</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">MicroService.Client.RegUrl</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">http://localhost:80</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"Urls</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">http://*:0</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
}
}</span></pre>
</div>
<p>这里内部仅配置http即可,因为它只与注册中心通讯,内部通讯无需要https。</p>
<p>结合上一篇教程:Taurus.MVC 微服务框架 入门开发教程:项目部署:1、微服务应用程序常规部署实现多开,节点扩容。</p>
<p>可以简单实现负载均衡,想开多少个,就运行启动.NET程序多少次,不需要修改任何配置。</p>
<h1>4、多个域名多个项目:</h1>
<p>重复步骤三即可,当然,注册中心(当前即网关)也需要部署相应的https证书。</p>
<h1>5、运行演示结果示例:</h1>
<p>流程:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">、注册中心监听5000端口。

</span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">、应用中心注册www.a.com域名。

</span><span style="color: rgba(128, 0, 128, 1)">3</span>、访问:www.a.com:5000的请求</pre>
</div>
<p>运行结果:</p>
<p><img src="https://img2022.cnblogs.com/blog/17408/202208/17408-20220816154343962-1538569235.png" alt="" loading="lazy"></p>
<h1>&nbsp;6:补充Https证书的使用:</h1>
<p>仅需要把下载的证书和密码,以如下格式,放到默认目录App_Data/ssl下即可,后续由框架自行处理。</p>
<p><img src="https://img2023.cnblogs.com/blog/17408/202306/17408-20230605213208964-292313065.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>如果没有域名,无法创建证书,在本地开发过程,想体验https的效果。</p>
<p>则可以虚拟一个,以测试使用,以下为教程:</p>
<h1>补充2:NETCore&nbsp;开发环境使用OpenSSL创建https虚拟证书</h1>
<p>证书<strong>通常的</strong>创建过程描述:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">、创建一个root根证书,然后导入系统环境中,让其成为可信任证书。

</span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">、根据需要创建虚拟域名证书,用root根证书签名一下,然后可以分发给程序使用。

因此,该过程最少一共至少需要创建两个证书,每多一个域名可重复步骤2。</span></pre>
</div>
<h2>下面为使用OpenSSL创建https证书的过程:&nbsp;</h2>
<h3>1、安装openssl:</h3>
<p>下载地址:https://slproweb.com/products/Win32OpenSSL.html</p>
<p>本人默认安装版本:</p>
<p><img src="https://img2023.cnblogs.com/blog/17408/202303/17408-20230310102416074-1098126325.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>一路安装,默认安装路径:C:\Program Files\OpenSSL-Win64</p>
<h3>2、<strong>管理员身份</strong>运行cmd命令:</h3>
<p>并切换到该bin目录下:cd&nbsp;C:\Program Files\OpenSSL-Win64\bin</p>
<h3>3、生成证书过程(二合一方式,执行后,可以关注一下安装目录下产生的对应文件)</h3>
<p>----------步骤一:只创建根证书密钥(Key文件,不创建根证书)-------------</p>
<p>命令:openssl genrsa -out root.key 2048</p>
<p>----------步骤二:1、创建域名签名中间件(CSR文件)---------------</p>
<p>命令:openssl req -new -key root.key -out www.sameples.com.csr</p>
<p>中间填写省市区等信息,随便填。</p>
<p>期间:Common Name,填写要绑定的域名,如:www.samples.com。</p>
<p>还有设置密码,如:123456</p>
<p>----------步骤二:2、创建域名证书(CER文件)---------------</p>
<p>命令:openssl x509 -req -days 365 -in www.sameples.com.csr -signkey root.key -out www.sameples.com.cer -extfile http.ext</p>
<p>可以在根目录下创建一个文件:http.ext,里面填写对应域名信息:</p>
<div class="cnblogs_code">
<pre>keyUsage =<span style="color: rgba(0, 0, 0, 1)"> nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage </span>=<span style="color: rgba(0, 0, 0, 1)"> serverAuth, clientAuth
subjectAltName</span>=<span style="color: rgba(0, 0, 0, 1)">@SubjectAlternativeName
[ SubjectAlternativeName ]
DNS.</span><span style="color: rgba(128, 0, 128, 1)">1</span>=www.samples.com</pre>
</div>
<p>----------步骤二:3、转换域名证书格式(CER转PFX文件,方便程序使用)---------------</p>
<p>命令4:openssl pkcs12 -export -out www.samples.com.pfx -inkey root.key -in www.sameples.com.cer</p>
<p>然后输入2次密码,比如123456,即可创建该域名证书。</p>
<h3>4:将证书导入可信任列表:</h3>
<p>快捷键:Win+R,运行命令:</p>
<p><img src="https://img2023.cnblogs.com/blog/17408/202303/17408-20230310103928132-66352459.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;在证书处右键导入,选择刚创建的证书(CER格式):导入即可。</p>
<p><img src="https://img2023.cnblogs.com/blog/17408/202303/17408-20230310104032812-247942220.png" alt="" loading="lazy"></p>
<h3>5:添加Host文件,进行本地域名解析:</h3>
<p><img src="https://img2023.cnblogs.com/blog/17408/202303/17408-20230310112257197-2052066868.png" alt="" loading="lazy"></p>
<h3>6:接下来即可用程序运行</h3>
<p>可以放到iis运行试看,也可代码:</p>
<p>比如,代码下面演示多个证书使用方式:</p>
<p><img src="https://img2023.cnblogs.com/blog/17408/202303/17408-20230310104457427-2102943396.png" alt="" loading="lazy"></p>
<p>运行成功:</p>
<p>提示说明:如果一开始没成功,下一次测试需要重启浏览器,否则https状态是不会变更的。</p>
<p><img src="https://img2023.cnblogs.com/blog/17408/202303/17408-20230310104725203-785575470.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;网上有很多教程,中间也遇到过很多问题,唯一在本机环境能成功测试通过的,是以下教程:</p>
<p>参考教程:https://www.cnblogs.com/chenxf1117/p/15119692.html</p>
<p>其它未通过测试的教程如(泛域名的创建):</p>
<p>https://www.cnblogs.com/xiangyuecn/p/8365634.html</p>
<h1>总结:</h1>
<p>通过Taurus.MVC&nbsp;微服务功能,以前Kestrel无法支持域名绑定的问题,就此实现了。</p>
<p>下一篇,讲述利用Taurus.MVC&nbsp;微服务功能,如何实现轻松的版本升级功能。</p>

</div>
<div id="MySignature" role="contentinfo">
    <div class="code">
<table>
<tbody><tr>
<td align="center">
版权声明:本文原创发表于 博客园,作者为 路过秋天
本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
</td>
</tr>

</tbody></table>
<table>
<tbody><tr>
<td align="center">
个人微信公众号<br>
<img src="https://images2018.cnblogs.com/blog/17408/201805/17408-20180523041027505-1002652922.jpg" width="200" height="200">
</td>
<td align="center">
Donation(扫码支持作者):支付宝:<br>
<img src="https://images.cnblogs.com/cnblogs_com/cyq1162/828949/o_2.jpg" width="200" height="200">
</td>
<td align="center">
Donation(扫码支持作者):微信:<br>
<img src="https://images.cnblogs.com/cnblogs_com/cyq1162/828949/o_1.jpg" width="200" height="200">
</td>
<td align="center">
<img src="https://h5.sinaimg.cn/upload/1005/526/2021/08/23/text.png" >
</td>
</tr>
</tbody></table>
</div><br><br>
来源:https://www.cnblogs.com/cyq1162/p/16536795.html
頁: [1]
查看完整版本: Taurus.MVC 微服务框架 入门开发教程:项目部署:2、让Kestrel支持绑定多个域名转发,替代Ngnix使用。