Nginx代理与反向代理、负载均衡实践
通过 Nginx 提供的反向代理和负载均衡功能,可以合理的完成业务的分配,提高网站的处理能力;同时利用缓存功能,还可以将不需要实时更新的动态页面输出结果,转化为静态网页形成缓存,从而提高网站的响应速度。
代理和反向代理
代理(正向代理,目标服务器不知道谁在访问)
位于客户端和目标服务器之间,起到一个中转的作用。其实就是客户端想访问目标服务器,但是因为某些原因不能够直接访问,则把请求和目标服务器发给代理服务器,代理服务器再去请求目标服务器,把返回的响应结果返回给客户端。
反向代理(用户实际并不知道最终服务器,只是访问一个反向代理服务器而已)
客户端会把反向代理服务器当成目标服务器,向反向代理服务器发送请求后,反向代理服务器再请求内部的后端服务器,把得到的响应结果返回给客户端。
特性:
- 安全性。反向代理具有安全性。能隐藏真实的内部服务器。
- 功能性。正向代理主要用途是为防火墙内的局域网用户提供访问外网的途径。反向代理主要用途是将防火墙内的服务器提供给外边的用户访问,同时也可以为多个后端服务器提供负载均衡功能、缓存功能等。
反向代理服务配置
在 Nginx 配置文件中的 location 块中,这是 proxy_pass 指令。
- server{
- listen 80;
- server_name test.test;
- #将本机接收到的test.test的请求全部转发到另外一台服务器192.168.78.128
- location /{
- proxy_pass http://192.168.78.128;
- #下面是其他辅助指令
- proxy_set_header Host $host; #更改来自客户端的请求头信息
- proxy_set_header X-Real_IP $remote_addr; #用户真实访问ip
- proxy_connect_timeout 2; #配置nginx与后端服务器建立连接的超时时间
- proxy_read_timeout 2; #配置nginx向后端发出read请求的等待响应超时时间
- proxy_send_timeout 2; #配置nginx向后端服务器发出write请求的等待响应超时时间
- proxy_redirect http://www.baidu.com; #用于修改后端服务器返回的响应头中的Location和Refresh
- }
- }
负载均衡
负载均衡(load balance):就是将负载分摊到多个操作单元上执行,从而提高服务的可用性和响应速度。
1.一个没有负载均衡的 web 架构如下图:
用户直接连接服务器,这个时候如果这台服务器挂了,那么就整个网站挂了。
2.有负载均衡的 web 架构
用户不直接访问后端服务器,而是访问负载均衡服务器,由负载均衡服务器再次转发到后端服务器。如果这个时候有一台后端服务器挂掉了,那么负载均衡服务器会剔除掉它,将后续请求都转发到好的那台,这样就不影响网站的正常运行。这个时候我们也需要考虑负载均衡服务器会不会挂掉,那就引入第二个负载均衡服务器来缓解一下。
负载均衡的配置
通过配置负载均衡服务器的 Nginx 中的 upstream 指令可以实现。
不同负载均衡配置的特点如下图所示:
一般轮询配置
- server{
- listen 80;
- server_name test.test;
- location / {
- proxy_pass http://web_server; #反向代理
- }
- }
- #配置负载均衡服务器组
- upstream web_server {
- server 192.168.78.128;
- server 192.168.78.129;
- }
加权轮询配置
- #配置负载均衡服务器组
- upstream web_server {
- server 192.168.78.128 weight=1;
- server 192.168.78.129 weight=3;
- }
这里面的权值总和为一个循环,这里以 4 次为一个循环,那么就是每四次请求中,三次会被分派到 129 这个服务器,一次分配到 128,但是具体三次并不会顺序执行,而是按照算法分散执行。 我们也可以设置每台 web 服务器在负载均衡调度中的状态。
- upstream web_server{
- server 192.168.78.128 weight=1 max_fails=1 fail_timeout=2; #允许请求失败次数,在请求max_fail次数失败后,暂停服务的时间
- server 192.168.78.200 backup; #预留的备份服务器
- server 192.168.78.33 down; #当前服务器不参与负载均衡
- }
ip_hash 配置
- upstream web_server{
- ip_hash;
- server 192.168.78.120;
- server 192.168.78.123;
- server 192.168.78.33 down; #如果这台服务器宕机,则用down表示当前服务器暂不参与负载均衡
- }
使用 ip_hash 的时候,不能使用 weight 和 backup。
第三方模块(fair)
安装fair模块的步骤略过...
配置 fair 的负载均衡
- server{
- listen 80;
- server_name test.test;
- location / {
- proxy_pass http://web_server
- }
- }
- upstream web_server{
- server 192.168.78.128;
- server 192.168.78.132;
- fair; #使用fair
- }
Nginx代理与反向代理、负载均衡实践的更多相关文章
- Nginx服务器 之反向代理与负载均衡
一.反向代理 正向代理: 客户端要获取的资源就在服务器上,客户端请求的资源路径就是最终响应资源的服务器路径,这就是正向代理.正向代理的特点:就是我们明确知道要访问哪个网站地址. 反向代理: 客户端想获 ...
- nginx详解反向代理、负载均衡、LNMP架构上线动态网站(week4_day1_part1)-技术流ken
nginx介绍 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理 ...
- Nginx 部署、反向代理配置、负载均衡
Nginx 部署.反向代理配置.负载均衡 最近我们的angular项目部署,我们采用的的是Nginx,下面对Nginx做一个简单的介绍. 为什么选择Nginx 轻:相比于Apache,同样的web服务 ...
- Nginx详解(正向代理、反向代理、负载均衡原理)
Nginx配置详解 nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行 ...
- Nginx特性验证-反向代理/负载均衡/页面缓存/URL重定向
原文发表于cu:2016-08-25 参考文档: Nginx 反向代理.负载均衡.页面缓存.URL重写等:http://freeloda.blog.51cto.com/2033581/1288553 ...
- Nginx(http协议代理 搭建虚拟主机 服务的反向代理 在反向代理中配置集群的负载均衡)
Nginx 简介 Nginx (engine x) 是一个高性能的 HTTP 和反向代理服务.Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量第二的 Rambler.ru 站点(俄文:Рамблер)开 ...
- nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件
前言一.nginx简介1. 什么是 nginx 和可以做什么事情Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50 ...
- [转帖]nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件
nginx学习,看这一篇就够了:下载.安装.使用:正向代理.反向代理.负载均衡.常用命令和配置文件 2019-10-09 15:53:47 冯insist 阅读数 7285 文章标签: nginx学习 ...
- Nginx代理与反向代理、负载均衡实
通过 Nginx 提供的反向代理和负载均衡功能,可以合理的完成业务的分配,提高网站的处理能力:同时利用缓存功能,还可以将不需要实时更新的动态页面输出结果,转化为静态网页形成缓存,从而提高网站的响应速度 ...
随机推荐
- MySQL-第五篇视图
1.视图看上去像是表,但它又不是,它并不能存储数据.视图只是一个或者多个表的逻辑显示.使用视图的好处: 1>可以限制对数据的访问 2>可以使复杂的查询变得简单 3>提供了数据的独立性 ...
- 关联查询总结,left join 和 inner join 区别和优化
left join 是做左外关联,主表内容都会显示:符合关联条件的附表内容才会显示出来. inner join 是内关联,没有主表附表的概念:两个表中,同时符合关联条件的数据才会显示出来. left ...
- Redis设计与实现 -- 链表与字典
1. 链表 1.1 链表的结构 在 Redis 中,链表的实现是双向链表,除此之外与常规的链表不同的是它还有三个函数指针,dup 函数用于复制链表节点所保存的值,free 函数用于释放链表节点保存的值 ...
- A Tutorial on Using the ALSA Audio API
A Tutorial on Using the ALSA Audio API This document attempts to provide an introduction to the ALSA ...
- 脚本_根据 md5 校验码,检测文件是否被修改
#!bin/bash#功能:根据 md5 校验码,检测文件是否被修改#作者:liusingbon#本示例脚本检测的是/etc 目录下所有的 conf 结尾的文件,根据实际情况,您可以修改为其他目录或文 ...
- qt如何去掉文件路径最后一个反斜杠的内容
QString strTemp = “E:\\hell\\word\\detect.txt” int nIndex = strTemp.lastIndexOf('\\'); strTemp ...
- Vue列表渲染:一个取值范围的v-for
v-for 也可以取整数.在这种情况下,它将重复多次模板. 例子 <div id="app"> <span v-for="n in 10"&g ...
- 为什么单个binlog会大于max_binlog_size设置
查看参数设置mysql> show global variables like '%max_binlog_size%';+-----------------+------------+| Var ...
- SDOI2019R2翻车记
额...貌似是学OI以来翻得最惨的一次比赛了呢... 不过还好是初三 但是没有机会和学长们打最后一场告别赛了呢(笑 按照惯例还是要记录一下吧. DAY ? 中考倒计时30天.来写这篇游记. DAY 0 ...
- springboot 操作redis
redis五大类型用法 Redis五大类型:字符串(String).哈希/散列/字典(Hash).列表(List).集合(Set).有序集合(sorted set)五种Controller:@Reso ...