0

0

nginx+iis如何实现简单的负载均衡

WBOY

WBOY

发布时间:2023-05-20 09:43:05

|

1137人浏览过

|

来源于亿速云

转载

一、nginx安装

    nginx是一款轻量级的web 服务器/反向代理服务器及电子邮件(imap/pop3)代理服务器,并在一个bsd-like 协议下发行。由俄罗斯的程序设计师igor sysoev所开发,供俄国大型的入口网站及搜索引擎rambler(俄文:рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、新浪、网易、腾讯等。

  最新版本的nginx版本为1.9.3,我这下载的是window版本的,一般实际场景都是安装在linux系统下的,由于linux系统目前正在摸索中这里就不介绍。官方下载地址:。下载完成之后解压运行nginx.exe就启动了nginx了,启动后会在进程里面看到nginx。

nginx+iis如何实现简单的负载均衡

   要实现负载均衡需要修改conf/nginx.conf的配置信息,修改配置信息之后重新启动nginx服务,可以通过nginx -s reload指令实现。这里我们使用 ants 提供的一个批处理来操作。

nginx+iis如何实现简单的负载均衡

将nginx.bat文件放到nginx.exe相同文件夹下,直接运行就行了。文章结尾会提供本文用到的所有文件。

 nginx+iis如何实现简单的负载均衡

二、站点搭建及配置

1.搭建两个iis站点

 站点下只有一个简单的index页面,用来输出当前服务器信息。由于我没有两台机器,所以将两个站点都部署到本机了,分别绑定了8082和9000两个端口。

 protected void page_load(object sender, eventargs e)
 {
  label0.text = "请求开始时间:"+datetime.now.tostring("yyyy-mm-dd hh:mm:ss");
  label1.text = "服务器名称:" + server.machinename;//服务器名称 
  label2.text = "服务器ip地址:" + request.servervariables["local_addr"];//服务器ip地址 
  label3.text = "http访问端口:" + request.servervariables["server_port"];//http访问端口"
  label4.text = ".net解释引擎版本:" + ".net clr" + environment.version.major + "." + environment.version.minor + "." + environment.version.build + "." + environment.version.revision;//.net解释引擎版本 
  label5.text = "服务器操作系统版本:" + environment.osversion.tostring();//服务器操作系统版本 
  label6.text = "服务器iis版本:" + request.servervariables["server_software"];//服务器iis版本 
  label7.text = "服务器域名:" + request.servervariables["server_name"];//服务器域名 
  label8.text = "虚拟目录的绝对路径:" + request.servervariables["appl_rhysical_path"];//虚拟目录的绝对路径 
  label9.text = "执行文件的绝对路径:" + request.servervariables["path_translated"];//执行文件的绝对路径 
  label10.text = "虚拟目录session总数:" + session.contents.count.tostring();//虚拟目录session总数 
  label11.text = "虚拟目录application总数:" + application.contents.count.tostring();//虚拟目录application总数 
  label12.text = "域名主机:" + request.servervariables["http_host"];//域名主机 
  label13.text = "服务器区域语言:" + request.servervariables["http_accept_language"];//服务器区域语言 
  label14.text = "用户信息:" + request.servervariables["http_user_agent"];
  label14.text = "cpu个数:" + environment.getenvironmentvariable("number_of_processors");//cpu个数 
  label15.text = "cpu类型:" + environment.getenvironmentvariable("processor_identifier");//cpu类型 
  label16.text = "请求来源地址:" + request.headers["x-real-ip"];
 }

2.修改nginx配置信息

  修改nginx监听端口,修改http server下的listen节点值,由于本机80端口已经被占用,我改为监听8083端口。

   listen       8083;

  在http节点下添加upstream(服务器集群),server设置的是集群服务器的信息,我这里搭建了两个站点,配置了两条信息。

 #服务器集群名称为jq_one
 upstream jq_one {
   server 127.0.0.1:9000; 
   server 127.0.0.1:8082; 
 }

 在http节点下找到location节点修改

location / {
  root html;
  index index.aspx index.html index.htm; #修改主页为index.aspx
 #其中jq_one 对应着upstream设置的集群名称
 proxy_pass  http://jq_one; 
 #设置主机头和客户端真实地址,以便服务器获取客户端真实ip
 proxy_set_header host  $host; 
 proxy_set_header x-real-ip $remote_addr; 
 proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
 }

修改完成配置文件以后记得重启nginx服务,最终完整配置文件信息如下

3.运行结果

  访问http://127.0.0.1:8083/index.aspx ,多访问几次,着重关注标红部分。

nginx+iis如何实现简单的负载均衡

ChatX翻译
ChatX翻译

最实用、可靠的社交类实时翻译工具。 支持全球主流的20+款社交软件的聊天应用,全球200+语言随意切换。 让您彻底告别复制粘贴的翻译模式,与世界各地高效连接!

下载

nginx+iis如何实现简单的负载均衡

可以看到,我们的请求被分发到了8082站点和9000站点,并且第一次是8082站点第二次9000。出现这样的结果证明我们负载均衡搭建成功了。 尝试关闭其中的9000站点,然后刷新页面发现输出的http端口一直是8082,也就是说其中一个站点挂了,只要还有一个站点是好的,我们的还是可以服务。

四、问题分析

  虽然我们搭建好了负载均衡站点,但是还存在以下问题。

  1.如果站点使用了session,请求平均分配到两个站点,那么必然存在session共享问题,该如何解决?

使用数据库保存session信息
使用nginx将同一ip的请求分配到固定服务器,修改如下。ip_hash会计算ip对应hash值,然后分配到固定服务器

  upstream jq_one{
   server 127.0.0.1:8082 ;
    server 127.0.0.1:9000 ;
   ip_hash;
  }

搭建一台redis服务器,对session的读取都从该redis服务器上读取。后面的文章将介绍分布式缓存redis的使用
  2.管理员更新站点文件,该怎么操作,现在还只有两台服务器,可以手工将文件更新到两台服务器,如果是10台呢,那么手工操作必然是不可行的

多服务器站点更新可以使用goodsync 文件同步程序,会自动检测文件的修改新增,然后同步到其它服务器上。在linux下可以使用rsync
  3.站点中的文件上传功能会将文件分配到不同的服务器,文件共享问题如何解决。

使用文件服务器将所有文件存储到该服务器上,文件操作读取写入都在该服务器上。这里同样会存在一个问题,文件服务器存在读写上限。
  4.负载的服务器配置不一样,有的高有的低可不可以让配置高的服务器处理请求多一些

这里讲一下,负载均衡有好几种算法  轮转法,散列法, 最少连接法,最低缺失法,最快响应法,加权法。我们这里可以使用加权法来分配请求。

 upstream jq_one{
   server 127.0.0.1:8082 weight=4;
    server 127.0.0.1:9000 weight=1;
  }

     通过weight设置每台服务器分配请求站的权重,值越高分配的越多。

 5.由于请求是经过nginx转发过来的,可以在代码里面获取到用户请求的实际ip地址吗?

答案是肯定的,在localtion节点设置如下请求头信息   

 #设置主机头和客户端真实地址,以便服务器获取客户端真实ip
 proxy_set_header host  $host; 
 proxy_set_header x-real-ip $remote_addr; 
 proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;

    代码里面通过request.headers["x-real-ip"],就能获取到真实ip

 6.nginx实现静态文件(image,js,css)缓存

在server节点下添加新的localtion

 #静态资源缓存设置
 location ~ \.(jpg|png|jpeg|bmp|gif|swf|css)$
 { 
  expires 30d;
  root /nginx-1.9.3/html;#root: #静态文件存在地址,这里设置在/nginx-1.9.3/html下
  break;
 }

    这是index页面的代码

  • nginx+iis如何实现简单的负载均衡
  • 相关专题

    更多
    nginx 重启
    nginx 重启

    nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

    227

    2023.07.27

    nginx 配置详解
    nginx 配置详解

    Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

    491

    2023.08.04

    nginx配置详解
    nginx配置详解

    NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

    496

    2023.08.04

    tomcat和nginx有哪些区别
    tomcat和nginx有哪些区别

    tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    223

    2024.02.23

    nginx报404怎么解决
    nginx报404怎么解决

    当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    329

    2024.07.09

    Nginx报404错误解决方法
    Nginx报404错误解决方法

    解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

    3505

    2024.08.07

    什么是分布式
    什么是分布式

    分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

    319

    2023.08.11

    分布式和微服务的区别
    分布式和微服务的区别

    分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

    229

    2023.10.07

    php源码安装教程大全
    php源码安装教程大全

    本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

    74

    2025.12.31

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号