手把手教你AspNetCore WebApi:Nginx(负载均衡)
前言
这几天小明又有烦恼了,系统上线一段时间后,系统性能出现了问题,缓存等都用上了,还是不能解决问题。马老板很大气,又买了3台服务器,让小明做个集群分流一下。
集群是什么?
是一种计算机系统,它通过一组松散集成的计算机软件或硬件连接起来高度紧密地协作完成计算工作。将多个物理机器组成一个逻辑计算机,实现负载均衡和容错。
Nginx是什么?
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx简单网络结构图

图中,前面Nginx服务器负责接受请求和分发请求,它自己并不处理请求,将请求分发给后面的业务服务器来处理。
使用Nginx配置负载均衡
首先,我们简单的创建一个控制器,实现一个简单方法,返回服务器IP和端口。
[Route("api/[controller]")]
[ApiController]
public class NginxController : ControllerBase
{
[HttpGet]
public string Get()
{
return $"{HttpContext.Connection.LocalIpAddress.ToString()}:{HttpContext.Connection.LocalPort.ToString()}";
}
}
接下来,我们启动app001项目,分别打开cmd,打入以下命令,分别启动web服务器5011,5012,5013
dotnet app001.dll --urls="http://127.0.0.1:5011"
dotnet app001.dll --urls="http://127.0.0.1:5012"
dotnet app001.dll --urls="http://127.0.0.1:5013"
如下图:

接下来,我们分别测试web服务器5011,5012,5013,分别返回“127.0.0.1:5011”,“127.0.0.1:5012”,“127.0.0.1:5013”。
如下图:

接下来,配置nginx。
- 找到nginx的安装路径,打开nginx.conf文件
- 添加upstream配置,配置用于负载均衡轮询的站点,即上一步骤中添加的3个站点
upstream webServer{
server 127.0.0.1:5011;
server 127.0.0.1:5012;
server 127.0.0.1:5013;
}
server {
listen 5010;
server_name localhost;
location / {
proxy_pass http://webServer;
}
}
接下来,启动ngnix,用cmd命令指定nginx的安装目录,然后start nginx

最后,测试http://localhost:5010/api/nginx,按次序轮询返回“127.0.0.1:5011”,“127.0.0.1:5012”,“127.0.0.1:5013”。

小结
目前为止,小明服务器负载均衡也搞定了,是不是非常简单呀。不过这是最简单的轮询方式分发,nginx支持按权重轮询分发,基于浏览器的分发,基于源IP分发等。留给其他小伙伴们去发掘,如果哪方面还有问题,请留言告诉我们。
文中用到的代码我们放在:https://github.com/zcqiand/miscellaneous/tree/master/App001
手把手教你AspNetCore WebApi:Nginx(负载均衡)的更多相关文章
- 手把手教你玩转nginx负载均衡(二)----安装虚拟机操作系统
引言 在上一篇,我们组装好了虚拟机的硬件部分,那么现在我们就要把操作系统装上了,既然是服务器,那么安装linux操作系统是个比较好的选择,如果你喜欢的话,安装windows也是没有任何问题的 我这里选 ...
- 手把手教你玩转nginx负载均衡(五)----配置后端服务器组
引言 在前面几篇中,我们成功的搭建起了一台nginx服务器,所以我们要重复前面的步骤,把服务器的数量增加到3台以上,我这里已经建好了另外两台,分别是centos7-22,centos7-23,对应的i ...
- 手把手教你玩转nginx负载均衡(三)----配置虚拟服务器网络
引言 虽然上一篇我们成功的启动了虚拟机,也安装好了操作系统,但是这台虚拟机和主机以及其他虚拟机是没有办法连通的,我们的目标是配置多台服务器并且配置nginx反向代理,来实现负载均衡,所以不能访问内网是 ...
- 手把手教你玩转nginx负载均衡(四)--源码安装nginx
引言: 在上一篇,我们已经装好了虚拟机,并且已经配置好了网络,那么今天我们就要开始安装nginx服务器了. 安装工具以及过程 安装gcc编译套件以及nginx依赖模块 yum -y install g ...
- 手把手教你玩转nginx负载均衡(一)----使用vitualBox创建虚拟机
引言 作为一个web程序员,有时候需要想尽办法来利用有限的资源来产生最大程度的负载,除了提高硬件配置,增加带宽之外,CDN加速,DNS加速,缓存,还可以利用反向代理.但是要说反向代理,就不的不说ngi ...
- 手把手教你AspNetCore WebApi:增删改查
前言 小明已经创建与运行了WebApi项目,了解项目结构有哪些组成,并学会了怎么发布到IIS.基础已经建好,从现在开始要真正实现待办事项的功能了. 新建表 CREATE TABLE [dbo].[To ...
- 手把手教你AspNetCore WebApi:入门
需求 前几天,马老板给小明和小红一个"待办事项"网站,小明负责后端,小红负责前端,并要求网站可以同时在 Windows.和 Linux 上运行. 小明整理了一下"待办事项 ...
- 手把手教你AspNetCore WebApi:Serilog(日志)
前言 小明目前已经把"待办事项"功能实现了,API文档也搞定了,但是马老板说过,绝对不能让没有任何监控的项目上线的. Serilog是什么? 在.NET使用日志框架第一时间会想到N ...
- 手把手教你AspNetCore WebApi:认证与授权
前言 这几天小明又有烦恼了,之前给小红的接口没有做认证授权,直接裸奔在线上,被马老板发现后狠狠的骂了一顿,赶紧让小明把授权加上.赶紧Baidu一下,发现大家都在用JWT认证授权,这个倒是挺适合自己的. ...
随机推荐
- SpringBoot—整合log4j2入门和log4j2.xml配置详解
关注微信公众号:CodingTechWork,一起学习进步. 引言 对于一个线上程序或者服务而言,重要的是要有日志输出,这样才能方便运维.而日志的输出需要有一定的规划,如日志命名.日志大小,日志分 ...
- php cookie及session
1.会话控制概括 1)http协议的缺陷 无状态,就是无记忆,不能让同一浏览器和服务器进行多次数据交换时,产生业务的连续性, 2)什么是会话控制 会话控制就是解决http无记忆缺陷的,能够==将数据持 ...
- [Python]打印指定目录下所有子目录
import os for root,dirs,files in os.walk(r"/home/os-hy01"): for dir in dirs: print(dir) -- ...
- Ubuntu 安装配置 WordPress5.4.2
一.安装 Apache 并配置 WordPress sudo apt-get install apache2 -y // 安装 apache2 sudo apt-get install php -y ...
- Vue 下拉刷新及无限加载组件
原文 https://github.com/wangdahoo/vue-scroller 主题 Vue.js Vue Scroller Vue Scroller is a foundational ...
- html基础:基本标签
一.html简介 html是一个长的字符串,它能够被浏览器解析.html分为三块:html代码,css,js. html的注释可以用<!-- --> 或者ctrl+? html页面打开以后 ...
- java输出1-100之间的数并求和for+while+do while实现
public static void main(String args[]) {//do while int sum = 0; //当前之和 int i = 1; //加数 do { if (i%2= ...
- JVM_02 类加载子系统
JVM细节版架构图 本文针对Class Loader SubSystem这一块展开讲解类加载子系统的工作流程 类加载子系统作用 1.类加载子系统负责从文件系统或者网络中加载class文件,class文 ...
- Vue render函数 函数时组件 jsx
常规组件使用 定义组件 components/list/list.vue <template> <ul> <li v-for="(item, index) in ...
- React使用AntV G6实现流程图
安装 npm install @antv/g6 --save 引用 import G6 from '@antv/g6' 自定义节点 /** * 方式一 */ G6.registerNode('rect ...