这是一偏初学者入门的内容,发现有问题的地方,欢迎留言,一起学习,一起进步

本文主要记录一下在Windows平台中,IIS站点如何使用Nginx 做一个简单的负载均衡 

一、 准备工作

  官网下载安装包:https://nginx.org/en/download.html

这里框选的Windows平台下适用的版本,分别是在线版本、稳定版、和历史版本,可以根据自己的需求选择,如果你不知道选啥,那就选个稳定版吧

下载之后的文件加压出来长这样:

这里边的文件看名字就可以发现他们的用户,比如:conf里边是nginx的配置文件,html放一些通用的静态页面,logs就是日志里,这些在后边我们都大概会用到

二、 启动nginx的方式

可以两种方式直接运行 niginx ,也可以使用命令,做测试的话 建议使用命令,别问为啥,问了就是因为操作方便

方式一:双击nginx.exe

方式二:进入cmd 到该目录下,运行 start nginx

启动后如果闪退,进程中也找不到nginx的进程,说明启动失败了,去logs中查看一下错误日志,一般最常见的错误有2个

1、 Nginx监听端口已经在本机上被使用,默认80端口,这种情况下我们换一个端口就行了

打开conf文件夹中的nginx.conf文件,记事本打开,修改其中的监听端口,如图监听8010端口:

2、 Nginx所在的目录有中文或者特殊字符了,比如这样的提示:

// :: [emerg] #: CreateFile() "E:\软件安装包\分布式\nginx-1.18.0\nginx-1.18.0/conf/nginx.conf" 
failed (: No mapping for the Unicode character exists in the target multi-byte code page)

解决方法很简单,别放中文目录,避免目录中的特殊字符就好了,比如我把nginx-1.18.0文件夹直接拷贝到我的D盘

最后再次启动nigix ,如果启动成功,可以在进程管理器中看到nginx的进程,并且在logs文件夹中会生成一个nginx.pid的文件,这个文件存放的其实就是nginx主进程的进程ID

启动成功之后 ,浏览器中访问http://127.0.0.1:8010/ ,看到Welcome 就说明启动已经可以了

三、简单配置负载均衡

  预期配置目标:使用nginx配置,实现对两个IIS站点的均衡访问。

       预期测试现象:如果通过8010端口可以均衡的看到8011和8012两个端口对应的IIS站点中的内容, 说明配置成功

  测试站点准备操作:

  1、创建一个Web站点,我这边是这样做的:

在视图中 我写了Stie1,生成这个项目。

2、将这个项目直接复制一个,并将视图中的Site1改为Site2,这样我就有两个路由资源完全相同的站点了文件了。

3、 在IIS中配置两个站点Site1和Site2,端口号 我分别设置为:8011、8012,文件地址分别是2步骤中的两个文件夹

4、分别通过127.0.0.1:8011和127.0.0.1:8012 先检测确认这两个站点没有问题,并且可以通过界面内容看出来 是两个站点

测试站点准备好了,接下来开始修改nginx的配置文件了

5、打开conf下的nginx.conf,找一下有没有upstream 配置,没有的话就按照下边的代码 复制粘贴一个改改,粘贴在server节点上边就行了,注意别放server里边了

  upstream my_web{
server 127.0.0.1: weight=;
server 127.0.0.1: weight=;
}

这里边的my_web是我自己起的名字,起个有意义的名字,后边要用

这里边的 每一个server 都指定一个映射的地址,weight值你可以理解为,在轮询分配资源的时候分配的数量,如代码配置中的1和2,意思是 8011分配一个访问之后,8012开始分,8012分2个之后再继续给8011分,这个地方其实就是分配的权重值的,分配比例是自身权重n除以总权重值值和T ,也就是 n/T

6、修改conf下的nginx.conf中的server

图中的第一个空色框,前边有提到 是监听的端口;

server_name 就是上一个步骤中我们配置的 upstream 的名字my_web;

在server中的location / 中添加proxy_pass ,上边有整体截图,这里是location参考代码,

    location / {
root html;
index index.html index.htm;
proxy_pass http://my_web;#my_web很眼熟对不对?没错 就是你自己定义的名字
     }

7、OK 到这里 你就可以做简单的测试了

重启一下nginx就可以了,结束进程重启  或者 cmd中使用命令:nginx -s reload

重启完成之后在浏览器中访问:127.0.0.1:8010站点,集合加上你的路由哦。然后重复刷新查看效果:

看到内容了吗?和预期测试结果吻合,简单的配置完成了!!是不是很简单  好了去装13吧,

四、其他常用的配置

其实就是重点说一下upstream的配置了,先来一段有注释的配置

#########-全局块-#########

#user administrator administrators;  #配置用户或者组
worker_processes ; #允许生成的进程数,默认为1
#pid logs/nginx.pid; #指定nginx进程运行文件存放地址
error_log logs/error.log error; #制定日志路径,级别:debug|info|notice|warn|error|crit|alert|emerg ########-events块-########
events {
accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off
#use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections ; #最大连接数
} #########-http块-#########
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型,默认为text/plain #access_log off; #取消服务日志
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; #自定义格式
access_log logs/access.log main; sendfile on; #允许sendfile方式传输文件
#tcp_nopush on; #keepalive_timeout ;
keepalive_timeout ; #连接超时时间 #gzip on; upstream mysvr.com {
server 127.0.0.1: weight=;
server 127.0.0.1: weight=;
} server {
listen ; #监听端口
server_name 127.0.0.1; #监听地址 #charset koi8-r;
#access_log logs/host.access.log main; location / {
#root html; #根目录
#index index.html index.htm; #设置默认页
random_index on; #随机访问服务器
#设置主机头和客户端真实地址,以便服务器获取客户端真实IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_connect_timeout ;
proxy_send_timeout ;
proxy_read_timeout ;
client_max_body_size 50m;
client_body_buffer_size 256k;
proxy_pass http://mysvr.com; #请求转向mysvr 定义的服务器列表
} #error_page /.html; #错误页 # redirect server error pages to the static page /50x.html
#
#error_page /50x.html;
#location = /50x.html {
# root html;
#} } }

#号代表注释,这里主要说明下server块和location块。

server块中 listen       80   顾名思义这是nginx启动后监听的端口,server_name就是监听IP地址,部署的时候要填写外网IP就可以了。

location块中 root是访问根目录,index是默认页,我们这里使用proxy_pass反向代理转发其他服务器地址就先注释掉了。
接下来说下,proxy_pass 配置
proxy_pass  http://mysvr.com;   mysvr.com是自定义的名字,通过上面定义的upstream块映射获取server地址访问。
upstream mysvr.com {
server 192.168.1.10:8080;
server 192.168.1.10:8081;
}
    默认方式:依照轮询,方式进行负载,每一个请求按时间顺序逐一分配到不同的后端服务器。假设后端服务器down掉。能自己主动剔除。尽管这样的方式简便、成本低廉。但缺点是:可靠性低和负载分配不均衡。
upstream mysvr.com {
server 192.168.1.10:8080 weight=8;
server 192.168.1.10:8081 weight=9;
}
weight几率方式:指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况,如果后端服务器down掉,能自动剔除。
upstream mysvr.com {
ip_hash;
server 192.168.1.10 weight=8;
server 192.168.2.10 weight=9;
}
ip_hash:每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。 upstream mysvr.com{      
      server 192.168.1.10; 
      server 192.168.2.10; 
      fair; 
}
fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。  upstream mysvr.com{
      server 192.168.1.10:8080;
      server 192.168.1.10:8081;
      hash $request_uri;
      hash_method crc32;
}
url_hash(第三方)按访问url的hash结果来分配请求,使每一个url定向到同一个后端服务器。后端服务器为缓存时比較有效。
注意:在upstream中加入hash语句。server语句中不能写入weight等其他的參数,hash_method是使用的hash算法。 upstream还能够为每一个设备设置状态值,这些状态值的含义分别例如以下: down 表示单前的server临时不參与负载. weight 默觉得1.weight越大,负载的权重就越大。 max_fails :同意请求失败的次数默觉得1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误. fail_timeout : max_fails次失败后。暂停的时间。 backup: 其他全部的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。 upstream bakend{ #定义负载均衡设备的Ip及设备状态
      ip_hash;
      server 10.0.0.11:9090 down;
      server 10.0.0.11:8080 weight=2;
      server 10.0.0.11:6060;
      server 10.0.0.11:7070 backup;
} 都配置好后,就可以启动nginx了,双击nginx.exe运行也可以。
或者打开cmd窗口,进入nginx目录下运行start nginx 启动。
运行nginx.exe -s reload 重启。
nginx.exe -s stop 停止服务

最后自一段参考:https://www.cnblogs.com/han1982/p/9590342.html,如果你有一定经验,直接看最后一段 就能配置了

asp.net中 使用Nginx 配置 IIS站点负载均衡的更多相关文章

  1. 【Nginx(三)】Nginx配置集群 负载均衡策略

    Nginx配置集群 负载均衡策略 一.安装环境 1.安装JDK8的环境,配置JDK8的环境变量 2.上传jar包demo-1.jar 和 demo-2.jar demo-1.jar 监听8080端口; ...

  2. Nginx配置upstream实现负载均衡及keepalived实现nginx高可用

    (原文链接:http://www.studyshare.cn/blog-front//blog/details/1159/0 ) 一.准备工作 1.准备两个项目,发布到不同的服务器上,此处使用2个虚拟 ...

  3. nginx 和 IIS 实现负载均衡

    Nginx的作用和优点,这里不必多说,今天主要是nginx负载均衡实验,把做的步骤记录下来,作为一个学习笔记吧,也可以给大家做下参考. 1.Nginx安装 1.下载地址:http://nginx.or ...

  4. Nginx配置upstream实现负载均衡

    如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...

  5. 配置IIS的负载均衡

    在大型Web应用系统中,由于请求的数据量过大以及并发的因素,导致Web系统会出现宕机的现象,解决这一类问题的方法我个人觉得主要在以下几个方面: 1.IIS 负载均衡. 2.数据库 负载均衡. 3.系统 ...

  6. 【upstream】Nginx配置upstream实现负载均衡

    如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...

  7. Linux系统中使用Nignx配置反向代理负载均衡

    目录 使用nginx实现动静分离的负载均衡集群 使用nginx实现负载均衡和动静分离 使用nginx实现动静分离的负载均衡集群 Nginx官网源码包下载链接:http://nginx.org/en/d ...

  8. Nginx配置upstream实现负载均衡1

    如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...

  9. nginx ----> nginx配置/反向代理/负载均衡

    nginx [engine x]是一个HTTP和反向代理服务器,一个邮件代理服务器和一个通用的TCP/UDP代理服务器,最初由Igor Sysoev编写. 环境: Ubuntu16.04 安装ngin ...

随机推荐

  1. 01-java实现动态数组

    01-手撸动态数组 本篇是恋上数据结构第一季个人总结 借鉴https://juejin.im/post/6844904001478066183#heading-0 本人git https://gith ...

  2. springboot多环境配置文件

    一.关于springboot的配置文件 springboot的配置文件主要有两种:properties文件和yml文件,我们只要选择一种使用就可以了.我们通过properties文件介绍一下配置的方式 ...

  3. Python实现迪杰斯特拉算法

    首先我采用邻接矩阵法来表示图(有向图无向图皆可) 图的定义如下: class Graph: def __init__(self, arcs=[]): self.vexs = [] self.arcs ...

  4. Vue 如何优雅的根据条件动态显示组件

    常规情况下,在里动态加载不同组件的方式为: <template> <!-- 符合条件A,加载组件A --> <BusinessComponentA v-if=" ...

  5. 基础类库积累--ExeclHelper类

    前言: 相信大家都玩过NPOI这个第三方组件,我就分享一下我平时使用的工具类,如果有不好的地方,请赐教! NPOI是什么? NPOI是一个开源的C#读写Excel.WORD等微软OLE2组件文档的项目 ...

  6. 【Apollo】(1)--- Apollo入门介绍篇

    Apollo入门介绍篇 Apollo有一点很好,就是它是由国内携程团队开发,而且文档写的很全,代码也完全开源.如果去了解它也可以直接去看它的官方文档. 一.配置中心概念 1.背景 在实际开发中都会与配 ...

  7. Spring中眼花缭乱的BeanDefinition

    本篇博客主要参考:Spring官网阅读(四)BeanDefinition(上) 引入主题 为什么要读Spring源码,有的人为了学习Spring中的先进思想,也有的人是为了更好的理解设计模式,当然也有 ...

  8. 微信小程序之蓝牙广播信息

    期初第一次做蓝牙开锁的时候遇到的最尖锐的问题就是ios设备如何对获取的广播信息进行读取,大概用了4中方式,都无法解决,最后不得不求助官方人员.给了一个方法,大家可以参考.在此附图: 由于mac地址是6 ...

  9. Jmeter系列(55)- 详解 Throughput Controller 吞吐量控制器

    如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 简单介绍 自行调整该控制器下的子项的执 ...

  10. JavaScript学习系列博客_24_JavaScript 原型对象

    原型(prototype) - 创建一个函数(所有函数)以后,解析器都会默认在函数中添加一个属性prototype prototype属性指向的是一个对象,这个对象我们称为原型对象. 创建一个函数My ...