无名异 發表於 2023-5-30 00:00:00

CentOS基于nginx反向代理实现负载均衡的方法

<p>
        本文实例讲述了CentOS基于nginx反向代理实现负载均衡的方法。分享给大家供大家参考,具体如下:</p><p><strong>nginx做负载均衡的优点:</strong></p><p>
        1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构,它的正则规则比HAProxy更为强大和灵活,这也是它目前广泛流行的主要原因之一,nginx单凭这点可利用的场合就远多于LVS了</p><p>
        2、nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势之一;相反LVS对网络稳定性依赖比较大,这点本人深有体会</p><p>
        3、nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来。LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大</p><p>
        4、可以承担高负载压力且稳定,在硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS相对小些</p><p><strong>注意事项:</strong></p><p>
        1、不同安装方法nginx的配置文件位置不一样</p><p>
        2、upstream如果使用ip_hash方式,则每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题</p><p><strong>环境:</strong></p><p>
        系统:centos6.6<br/>
        nginx ip:192.168.20.103<br/>
        web1 ip:192.168.20.193<br/>
        web2 ip:192.168.20.194</p><p><strong>一、安装nginx</strong></p><p>
        两种方法,我用的是第1种</p><p>
        第1种 yum安装,需安装第三方yum源,因为nginx默认不在centos的yum源中 所以需更新</p><div class="jb51code"><div><div class="syntaxhighlighterbash" id="highlighter_512663"><div class="toolbar">?</div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr class="firstRow"><td class="gutter"><div class="line number1 index0 alt2">
                                                                1</div><div class="line number2 index1 alt1">
                                                                2</div><div class="line number3 index2 alt2">
                                                                3</div><div class="line number4 index3 alt1">
                                                                4</div><div class="line number5 index4 alt2">
                                                                5</div><div class="line number6 index5 alt1">
                                                                6</div><div class="line number7 index6 alt2">
                                                                7</div><div class="line number8 index7 alt1">
                                                                8</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">yum </code><code class="bash functions">install</code> <code class="bash plain">wget </code><code class="bash comments">#安装下载工具</code></div><div class="line number2 index1 alt1"><code class="bash plain">wget http:</code><code class="bash plain">//www</code><code class="bash plain">.atomicorp.com</code><code class="bash plain">/installers/atomic</code> <code class="bash comments">#下载</code></div><div class="line number3 index2 alt2"><code class="bash plain">sh .</code><code class="bash plain">/atomic</code> <code class="bash comments">#安装</code></div><div class="line number4 index3 alt1"><code class="bash plain">yum check-update </code><code class="bash comments">#更新yum源 有的需要更新几次 才有nginx最新版本 否则是老版本nginx</code></div><div class="line number5 index4 alt2"><code class="bash plain">yum remove httpd* php* </code><code class="bash comments">#删除系统自带的软件包 也可加mysql*前提备份数据库</code></div><div class="line number6 index5 alt1"><code class="bash plain">yum </code><code class="bash functions">install</code> <code class="bash plain">nginx </code><code class="bash comments">#安装nginx根据提示输入y进行安装</code></div><div class="line number7 index6 alt2"><code class="bash plain">chkconfig nginx on </code><code class="bash comments">#设置nginx开机启动</code></div><div class="line number8 index7 alt1"><code class="bash plain">service nginx start </code><code class="bash comments">#启动nginx 重启 restart</code></div></div></td></tr></tbody></table></div></div><div class="codetool" id="codetool"><div class="code_n"></div></div></div><p>
        第2种 编译安装</p><div class="jb51code"><div><div class="syntaxhighlighterbash" id="highlighter_794403"><div class="toolbar">?</div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr class="firstRow"><td class="gutter"><div class="line number1 index0 alt2">
                                                                1</div><div class="line number2 index1 alt1">
                                                                2</div><div class="line number3 index2 alt2">
                                                                3</div><div class="line number4 index3 alt1">
                                                                4</div><div class="line number5 index4 alt2">
                                                                5</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">wget http:</code><code class="bash plain">//nginx</code><code class="bash plain">.org</code><code class="bash plain">/download/nginx-1</code><code class="bash plain">.7.8.</code><code class="bash functions">tar</code><code class="bash plain">.gz</code></div><div class="line number2 index1 alt1"><code class="bash functions">tar</code> <code class="bash plain">-zxvf nginx-1.7.8.</code><code class="bash functions">tar</code><code class="bash plain">.gz</code></div><div class="line number3 index2 alt2"><code class="bash functions">cd</code> <code class="bash plain">nginx-1.7.8</code></div><div class="line number4 index3 alt1"><code class="bash plain">.</code><code class="bash plain">/configure</code></div><div class="line number5 index4 alt2"><code class="bash functions">make</code> <code class="bash plain">&amp;&amp; </code><code class="bash functions">make</code> <code class="bash functions">install</code></div></div></td></tr></tbody></table></div></div><div class="codetool" id="codetool"><div class="code_n"></div></div></div><p><strong>二、修改配置文件</strong></p><p>
        nginx 的 upstream默认是以轮询的方式实现负载均衡,这种方式中,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。</p><p>
        另外一种方式是ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题</p><p>
        修改 /etc/nginx/nginx.conf 增加</p><div class="jb51code"><div><div class="syntaxhighlighterbash" id="highlighter_385876"><div class="toolbar">?</div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr class="firstRow"><td class="gutter"><div class="line number1 index0 alt2">
                                                                1</div><div class="line number2 index1 alt1">
                                                                2</div><div class="line number3 index2 alt2">
                                                                3</div><div class="line number4 index3 alt1">
                                                                4</div><div class="line number5 index4 alt2">
                                                                5</div><div class="line number6 index5 alt1">
                                                                6</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash comments">#负载均衡配置</code></div><div class="line number2 index1 alt1"><code class="bash plain">upstream backend {</code></div><div class="line number3 index2 alt2"><code class="bash comments">#ip_hash;</code></div><div class="line number4 index3 alt1"><code class="bash plain">server 192.168.20.193;</code></div><div class="line number5 index4 alt2"><code class="bash plain">server 192.168.20.194;</code></div><div class="line number6 index5 alt1"><code class="bash plain">}</code></div></div></td></tr></tbody></table></div></div><div class="codetool" id="codetool"><div class="code_n"></div></div></div><p>
        修改 /etc/nginx/conf.d/default.conf</p><div class="jb51code"><div><div class="syntaxhighlighterbash" id="highlighter_585988"><div class="toolbar">?</div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr class="firstRow"><td class="gutter"><div class="line number1 index0 alt2">
                                                                1</div><div class="line number2 index1 alt1">
                                                                2</div><div class="line number3 index2 alt2">
                                                                3</div><div class="line number4 index3 alt1">
                                                                4</div><div class="line number5 index4 alt2">
                                                                5</div><div class="line number6 index5 alt1">
                                                                6</div><div class="line number7 index6 alt2">
                                                                7</div><div class="line number8 index7 alt1">
                                                                8</div><div class="line number9 index8 alt2">
                                                                9</div><div class="line number10 index9 alt1">
                                                                10</div><div class="line number11 index10 alt2">
                                                                11</div><div class="line number12 index11 alt1">
                                                                12</div><div class="line number13 index12 alt2">
                                                                13</div><div class="line number14 index13 alt1">
                                                                14</div><div class="line number15 index14 alt2">
                                                                15</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">location / {</code></div><div class="line number2 index1 alt1"><code class="bash comments">#设置主机头和客户端真实地址,以便服务器获取客户端真实IP</code></div><div class="line number3 index2 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">proxy_set_header Host $host;</code></div><div class="line number4 index3 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">proxy_set_header X-Real-IP $remote_addr;</code></div><div class="line number5 index4 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</code></div><div class="line number6 index5 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash comments">#禁用缓存</code></div><div class="line number7 index6 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">proxy_buffering off;</code></div><div class="line number8 index7 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash comments">#反向代理的地址</code></div><div class="line number9 index8 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">proxy_pass http:</code><code class="bash plain">//backend</code><code class="bash plain">;</code></div><div class="line number10 index9 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">root&nbsp; </code><code class="bash plain">/usr/share/nginx/html</code><code class="bash plain">;</code></div><div class="line number11 index10 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">index index.html index.htm;</code></div><div class="line number12 index11 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash comments"># example</code></div><div class="line number13 index12 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash comments">#ModSecurityEnabled on;</code></div><div class="line number14 index13 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash comments">#ModSecurityConfig /etc/nginx/modsecurity.conf;</code></div><div class="line number15 index14 alt2"><code class="bash plain">}</code></div></div></td></tr></tbody></table></div></div><div class="codetool" id="codetool"><div class="code_n"></div></div></div><p><strong>三、测试</strong></p><p>
        第一次访问转发到193,因为 upstream默认是轮询,第二次则转发到了194</p><p><img style="max-width:100%!important;height:auto!important;" title="CentOS基于nginx反向代理实现负载均衡的方法" alt="CentOS基于nginx反向代理实现负载均衡的方法" src="https://zhuji.jb51.net/uploads/img/202305/036764c1ed23c1857d3a4eed7d84772e.jpg"/></p><p><img style="max-width:100%!important;height:auto!important;" title="CentOS基于nginx反向代理实现负载均衡的方法" alt="CentOS基于nginx反向代理实现负载均衡的方法" src="https://zhuji.jb51.net/uploads/img/202305/3db8c081358ed17d5ecb8caa0a9c747e.jpg"/></p><p>
        希望本文所述对大家CentOS服务器维护有所帮助。</p><p>
        原文链接:https://blog.csdn.net/nuli888/article/details/51912522</p>
頁: [1]
查看完整版本: CentOS基于nginx反向代理实现负载均衡的方法