【后台开发与系统运维】 Nginx 的反向代理与负载均衡
来源:互联网 发布:暴雪嘉年华 知乎 编辑:程序博客网 时间:2024/05/24 05:50
反向代理与负载均衡
反向代理: 明确知道要访问哪个网站,借助代理网站来访问就是正向代理;第三方服务器为我们提供了访问服务器集群的内容,但我们不知道是哪台服务器提供的内容,这种代理方式称为反向代理。
负载均衡: 建立很多个服务器,这些服务器组成一个服务器集群,当有请求时中间服务器选择一个压力较小的服务器,然后将请求引入该选择的服务器,这样每个服务器压力趋于平衡,这就是负载均衡。负载均衡是通过反向代理来实现的。
Nginx 负载均衡的实现
1.新建一个配置文件fzjh.conf中
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">touch fzjh<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.conf</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>
2.编辑配置文件
<code class="hljs axapta has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#设置用户</span>user root;<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#工作衍生的进程数 </span>worker_process <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>;<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#设置最大连接数</span>events{ worker_connections <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2048</span>;}<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#http部分是负载均衡服务器最重要的部分</span>http{ <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#设置负载均衡服务器待选列表</span> <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#test 服务器列表名称</span> upstream test{ <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#服务器地址可以是外网的也可以是内网的</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">server</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">192.168</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.1</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.1</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">server</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">192.168</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.1</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.2</span>; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">server</span>{ <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#监听网站的端口</span> listen:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">80</span>; <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#location /表示 监听网站的是根目录 </span> location / { proxy_pass http:<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//test;</span> } }}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li></ul>
3.加载配置文件
<code class="hljs lasso has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">/usr/<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">local</span>/nginx/sbin/nginx <span class="hljs-attribute" style="box-sizing: border-box;">-c</span> /usr/<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">local</span>/nginx/conf/fzjh<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>conf</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>
HTTP Upstream 模块
Upstream模块是Nginx服务器的一个重要模块, Upstream模块在实现 在轮询和客户端ip之间实现后端的负载均衡(即轮询算法)。常用指令有:
ip_hash指令
采用ip_hash指令,如果客户端请求已经访问了服务器A并登陆,那么第二次请求时,会将该请求通过哈希算法自动定位到该后端服务器中,而不是重新分配到别的服务器中。
<code class="hljs axapta has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">user root;worker_process <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>;events{ worker_connections <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2048</span>;}http{ upstream test{ <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#设置ip_hash; 将容易个用户引向同一个后端服务器</span> ip_hash; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">server</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">192.168</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.1</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.1</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">server</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">192.168</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.1</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.2</span>; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">server</span>{ listen:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">80</span>; <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#location </span> location / { proxy_pass http:<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//test;</span> } }}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li></ul>
server指定
server指定主要用于指定服务器名称和参数。
<code class="hljs axapta has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">user root;worker_process <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>;events{ worker_connections <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2048</span>;}http{ upstream test{ <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#weight=2 设置服务器权重 默认是1</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">server</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">192.168</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.1</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.1</span> weight=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">server</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">192.168</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.1</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.2</span>; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">server</span>{ listen:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">80</span>; <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#location </span> location / { proxy_pass http:<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//test;</span> } }}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li></ul>
upstream指令
upstream指令主要用于设置一组在peoxy_pass和fastcgi_pass指令中使用代理服务器,默认负载均衡方式为轮询。
其他负载均衡的方法
负载均衡的核心就是建立服务器集群,负载均衡的实现分为硬件实现和软件实现两种方式。
优缺点:
硬件实现:运行效率非常高,但成本也非常高。
软件实现:运行效率不如硬件,成本也相对低很多。
Nginx就是通过软件的方式。
原文地址:http://blog.csdn.net/yen_csdn/article/details/52216194
【关于我们】
每天名企社招内推(微信公众号:ourpush),专注于国内各大互联网公司社会招聘内推。每天更新最新互联网名企(包括但不限于BAT网易小米京东乐视携程等名企)内推信息,有技术岗、有产品岗、有运营岗、有设计岗、有交互岗、有销售岗,更有其他N多相关岗位!更多内推信息请扫描以下二维码关注查阅。
- 【后台开发与系统运维】 Nginx 的反向代理与负载均衡
- Nginx的反向代理与负载均衡
- Nginx 的反向代理与负载均衡
- nginx的反向代理与负载均衡
- Nginx的反向代理与负载均衡
- nginx负载均衡与反向代理
- 【Nginx】Http负载均衡与反向代理
- Nginx反向代理与负载均衡
- nginx反向代理与负载均衡
- nginx反向代理与负载均衡
- Nginx------什么是反向代理与负载均衡
- Nginx反向代理与负载均衡
- Nginx负载均衡与反向代理
- nginx反向代理与负载均衡
- Nginx反向代理与负载均衡
- Nginx负载均衡与反向代理
- Nginx反向代理与负载均衡
- Nginx的Upstream负载均衡与反向代理的配置
- 第三方支付
- 使用腾讯云建一个基于自己域名的网站
- 图片验证码的制作
- 正则表达式介绍与使用
- Error Code: 1235. This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
- 【后台开发与系统运维】 Nginx 的反向代理与负载均衡
- 【u104】组合数
- 地图
- JavaScript趣题:找出凶手
- 【学习Linux】break 和continue
- Lucene全文检索初识
- 【git中文教程】GIT使用教程与基本原理
- 《程序员必读软件架构 Part5 为软件生成文档》
- epoll为什么快