利用Nginx构建负载均衡server[通俗易懂]

利用Nginx构建负载均衡server

大家好,又见面了,我是全栈君。

大家都知道。一个域名相应一个IP地址,而一个WebSite则相应一个IP地址上相应port服务的应用程序(或位置)。而大型站点的并发訪问量很大,这些站点是怎样在一台Webserver上实现负载均衡的呢?

相信非常多人会有与我相同的疑惑,但实际上成熟的解决方式已经大规模投入使用。而经常使用的则是反向代理方法。

反向代理(Reverse Proxy)方式是指以代理server来接受internet上的连接请求,然后将请求转发给内部网络上的server。并将从server上得到的结果返回给internet上请求连接的client,此时代理server对外就表现为一个server。基本结构能够例如以下图所看到的:

利用Nginx构建负载均衡server[通俗易懂]

从此图能够看出,用户訪问的webserver实际上是一个代理server,而真正处理内容(等一系列复杂操作)都是由墙内的server完毕的。这不仅减轻了代理server的压力。同一时候也能够使墙内server与客户机隔离。防止一些安全问题的发生。此时,仅仅须要添加墙内server。用户尽管訪问的是同一地址,但可能訪问的实际server会全然不一样。

利用Nginx构建负载均衡server[通俗易懂]

以上仅仅是一些理论。怎样实现呢?採用Nginx能够轻松完毕这一功能。

1、首先,(For Windows)下载Nginx  http://nginx.org/en/download.html。软件大小与软件本身都是一款超轻量级的东西。能够说差点儿感觉不到它的存在

当然首先简单了解一下Nginx是什么 。

Nginx (“engine x”) 是一款高性能的,轻量级的HTTP Web server 和 反向代理server及电子邮件 IMAP/POP3/SMTP 代理server。

首先它是一款Webserver,又是一款性能优秀的反向代理server

下载完毕之后、解压,直接打开nginx.exe能够直接执行nginxserver。此时浏览器输入localhost能够看到界面。

2、配置文件。

conf/nginx.conf

默认的配置例如以下。能够简单看一下

#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    #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;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
}

总体配置与apache略相似,假设开发的时候,能够打开相关log參数,error_log和access_log就可以。server内的内容显示,定义了一个服务器,监听80port,位置为/html/*。主页为index.html,并将50X错误重定向到50x.html。

也能够定义virtualhost。并将位置定位到其它path。

3、不同地址的代理。

nginx能够实现对不同地址的反向代理(这里并不是指不同IP或者域名地址,而是路径),比如希望将全部显示部分(/view/xxx)的交给Aserver,地址为x.x.x.101。逻辑处理部分(/control/xxx)交给Bserver。地址为x.x.x.102。能够加入例如以下配置

location ~ \/view/[\S]+.php$ {
     proxy_pass   http://x.x.x.101;
}

location ~ \/control/[\S]+.php$ {
     proxy_pass   http://x.x.x.102;
}

~表示採用正則表達式匹配,若在location后加入^~表示不以正则式匹配,上面配置将全部/view/*.php的请求交给了http://x.x.x.101,而/control
/*.php的请求交给了
http://x.x.x.102。在逻辑上实现代理与分离。

当然在A、Bserver上,能够构建各自须要的如Apacheserver或Tomcat甚至NodeJS

4、同地址负载均衡。

假设是同一地址的并发訪问量巨大。须要进行负载均衡。比如某一抢购页面或者某一类页面。能够加入例如以下配置定义一个WEBserver集群:

upstream webCluster{
server x.x.x.101; 
server x.x.x.102; 
server x.x.x.103; 
server x.x.x.104; 
#...能够加入很多其它服务器
} 

同一时候。给该集群配置一个location,方法同上:

location ~ \/views/[\S]+php$
{ 
proxy_pass http://webCluster ; 
proxy_redirect off; 
proxy_set_header Host $host; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
} 

此时再訪问/views下的全部文件夹,都会被平均分配到集群中的全部机器上。

这里的集群中全部地址并无权重,默认weight=1,当然也能够自己定义权重,让一些处理能力高的server得到很多其它的请求:

upstream webCluster{
server x.x.x.101  weight=2; 
server x.x.x.102; 
server x.x.x.103; 
server x.x.x.104; 
#...能够加入很多其它服务器
} 

这样一共weight = 5,101服务器会有2/5的权重,其它为1/5。

以上则是大型站点在WEB端的负载均衡的实现,该实现方法最为便宜和高效。当然。还有非常多其它实现负载均衡的方法,比如使用一些大型硬件进行IP重定向等等。



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116549.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 免费下载的音乐的6个网站,非常实用的软件_什么网站下载音乐是免费的

    免费下载的音乐的6个网站,非常实用的软件_什么网站下载音乐是免费的MyFreeMP3网址:http://tool.liumingye.cn/music/?page=homePage从标准音质,到无损音乐皆可免费下载,并且提供从封面到歌词的一站式服务。最大的优点是:可以下载有版权限制的歌曲,比如周杰伦的《稻香》陈奕迅的《好久不见》推荐指数⭐⭐⭐⭐咪咕音乐网页版网址:http://music.migu.cn/v3基本上所有的歌曲都可以下载,标清版的可以免费下载,其他版本的需要收费。咪咕音乐算是歌曲比较全,而且免费…

    2022年10月12日
  • Linux 软件源设置

    Linux 软件源设置

  • Windows CMD常用命令大全(值得收藏)

    Windows CMD常用命令大全(值得收藏)WindowsCMD常用命令大全前言1.常用命令1.1cd命令1.2查看目录文件1.3创建目录和删除目录1.4查看本机ip1.5清除屏幕1.6复制文件1.7移动文件1.8删除文件1.9ping1.10taskkill1.11netstat查看网络连接状态1.12find1.13tracert2.查看cmd下的命令3.辅助符号或命令3.1‘|’3.2重定向输出符号>>>3.3重定向输入符号<<<3.4终止一直在运行的命令ctr

  • 阿里云服务器配置ssl证书_阿里云服务器配置选择

    阿里云服务器配置ssl证书_阿里云服务器配置选择阿里云配置SSL证书证书申请概览![在这里插入图片描述](https://img-blog.csdnimg.cn/20210511153723521.png)申请配置证书申请概览申请两种方式:进入阿里云控制台页面->安全(模块/菜单)->SSL证书;在阿里云搜索框中进行搜索ssl证书点击进入;购买证书需要注意的是已过期的证书是没有到期新购操作的,只能重新购买。Symantec免费SSL证书我们选择Symantec免费型DVSSL,不花钱0元就可以购买。这个免

  • 图形推理1000题及答案_普华永道面试经验

    图形推理1000题及答案_普华永道面试经验做了今年pwc的笔试题,趁热总结一下。我进去的系统是SHL。逻辑推理、语言推理和数字推理部分都有8道小题的体验机会,正式开始测试之前可以先练下手热热身。逻辑推理的题目八成不会很难,但是会有几道让人很难受的题。比较基础的题刷了一遍下来,脑子里面也大概总结出了一些规律了。就跟大家分享一下8总结:1、大部分题目都存在因果关系。即第x个图形和第x-1个图形,甚至可能是和第x-2,x-n个图形存在关系。2、…

  • winform与cefsharp混合开发_历史必修二笔记手写

    winform与cefsharp混合开发_历史必修二笔记手写在上一篇博文《WinForm内置浏览器之CefSharp笔记一》,简单介绍了CefSharp的快速入门。这篇博文接着上篇,主要记录C#如果调用JS中的方法。参照Github示例:传送门加载自定义网页修改网址,使用ChromiumWebBrowser类的Load方法,直接直接输入网址,也可以加载本地的html文件。m_chromeBrowser.Load(“https://www….

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号