Nginx(3)---代理与负载均衡
一、代理简述
代理分为正向代理和反向代理,
正向代理:客户端与目标服务器之间增加一个代理服务器,客户端直接访问代理服务器,在由代理服务器访问目标服务器并返回客户端并返回 。比如夜深人静的时候访问的一些网站,其实就是代理服务器,一个代理服务器被封了还有另外的可以访问。主要用作屏蔽客户端IP、集中式缓存、解决客户端不能直连服务端的问题等,比如爬虫、翻墙、maven 的nexus 服务。

反向代理:客户端访问目标服务器,在目标服务内部有一个统一接入网关将请求转发至后端真正处理的服务器并返回结果。主要用作屏蔽服务端内部实现、负载均衡、缓存。

二、Nginx代理配置
Nginx 代理只需要在 location 中配置proxy_pass 属性即可。其指向代理的服务器地址。
(本机环境准备一个tomcat服务启动)
    server {
        #端口
        listen ;
        #域名
        server_name www.bluedarkni.com;
        #站点资源根目录 server中配置则所有location共享
        root /website/test;
        #站点资源位置
        location / {
            index index.html;
        }
        location /error {
            #alias   别名,匹配location的资源路径使用alias的值作为根
            alias /website/test;
            index error.html;
        }
        #正向代理
        location /proxy-baidu {
            #是否允许重定向
            proxy_redirect off;
            #代理的域名最后一定要加上/ 否则启动的时候回报错
            proxy_pass http://www.baidu.com/;
        }
        #反向代理
        location /proxy-tomcat {
            proxy_redirect off;
            #本机的服务
            proxy_pass http://127.0.0.1:8080/;
        }
    }
访问http://192.168.0.67:8079/proxy-tomcat 实际会访问到本机的tomcat服务
http://192.168.0.67:8079/proxy-baidu 实际会访问到百度服务
代理相关参数:
proxy_pass # 代理服务
proxy_redirect off; # 是否允许重定向
proxy_set_header Host $host; # 传 header 参数至后端服务
proxy_set_header X-Forwarded-For $remote_addr; # 设置request header 即客户端IP 地址
proxy_connect_timeout 90; # 连接代理服务超时时间
proxy_send_timeout 90; # 请求发送最大时间
proxy_read_timeout 90; # 读取最大时间
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
参数详情:http://nginx.org/en/docs/http/ngx_http_proxy_module.html
三、负载均衡
通过proxy_pass 可以把请求代理至后端服务,但是为了实现更高的负载及性能, 我们的后端服务通常是多个, 这个是时候可以通过upstream 模块实现负载均衡。
准备另外的服务器。我这里准备的另外两台虚拟机启动了tomcat服务,修改了默认页面便于区分请求的是哪台机器。index页面内容“this is 192.168.0.xx”.

配置upstream 模块并且将location中的代理指向upstream 模块的值(tomcat-cluster):
配置如下:
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on; #资源从硬盘->内核态-应用态-网卡,开启之后:硬盘->内核态-网卡
    keepalive_timeout  ; #长连接超时时间
    #负载均衡集群配置
    upstream tomcat-cluster {
        #只需要主机名和端口,不需要写协议
        server 192.168.0.68:;
        server 192.168.0.69:;
    }
    #配置一个具体的站点server
    server {
        #端口
        listen ;
        #域名
        server_name www.bluedarkni.com;
        #站点资源根目录 server中配置则所有location共享
        root /website/test;
        #站点资源位置
        location / {
            index index.html;
        }
        location /error {
            #alias   别名,匹配location的资源路径使用alias的值作为根
            alias /website/test;
            index error.html;
        }
        #正向代理
        location /proxy-baidu {
            #是否允许重定向
            proxy_redirect off;
            #代理的域名最后一定要加上/ 否则启动的时候回报错
            proxy_pass http://www.baidu.com/;
        }
        #反向代理
        location /proxy-tomcat {
            proxy_redirect off;
            #本机的服务
            proxy_pass http://127.0.0.1:8080/;
        }
        location /tomcat {
            proxy_redirect off;
            #做负载均衡时,代理指向上面upstream属性的值
            proxy_pass http://tomcat-cluster/;
        }
    }
}
启动nginx服务,多次访问http://192.168.0.67:8079/tomcat
可以发现会轮询去访问到68和69两台服务器(默认的负载均衡策略是轮询)。
upstream 相关参数:
server 反向服务地址 加端口
weight 权重:服务都存活的情况下按权重来访问
    upstream tomcat-cluster {
        server 192.168.0.68: weight=;
        server 192.168.0.69: weight=;
    }
max_fails 失败多少次 认为主机已挂掉则,踢出
fail_timeout 踢出后重新探测时间
backup 备用服务,其余节点都挂了才会使用
max_conns 允许最大连接数
slow_start 当节点恢复,不立即加入,而是等待 slow_start 后加入服务对列。
具体的各个模块的文档可以查看:http://nginx.org/en/docs/http/ngx_http_upstream_module.html
负载均衡算法:
1.轮询+权重(前面实现的就是轮询加权重)
2.ip_hash : (配置了ip_hash之后权重那些是失效的)基于Hash 计算 ,可以用于保持session 一至性。加入集群有3个节点,那么对IP进行hash之后%3,在去分发,这样同样的IP 就会请求到同一台机器上面,就不会出现分布式seesion问题,但是不推荐。现在很小区都是共用的一个对外IP,会导致这个小区所有的用户请求都分发到同一个节点上面去。而且如果这个这个节点挂了,那么这些用户的数据在其他节点上面是没有的。
    upstream tomcat-cluster {
        #只需要主机名和端口,不需要写协议
        ip_hash;
        server 192.168.0.68: weight=;
        server 192.168.0.69: weight=;
    }
配置好之后,重新加载配置之后,在请求http://192.168.0.67:8079/tomcat ,会发现只会访问到一台服务了。
3.least_conn 最少链接,谁连接最少就给谁。
Nginx(3)---代理与负载均衡的更多相关文章
- Nginx反向代理,负载均衡,redis session共享,keepalived高可用
		
相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...
 - nginx反向代理与负载均衡
		
一:nginx反向代理与负载均衡配置思路与用法 1.nginx反向代理:就是你去相亲时,媒婆就是这里的代理,让媒婆带你去见姑娘 2.nginx负载均衡:就是有很多的媒婆经过商量给你选出最适合你的姑娘, ...
 - 【转】Nginx反向代理和负载均衡
		
原文链接:http://www.cnblogs.com/shuoer/p/7820899.html Nginx反向代理和负载均衡 环境说明 由于我使用的是windows系统,所以我用虚拟机虚拟出来了3 ...
 - 谁说前端不需要懂-Nginx反向代理与负载均衡
		
转:https://juejin.im/post/5b01336af265da0b8a67e5c9 学到老活到老 前端圈一直很新,一直要不停的学习,而且在进入大厂的路上,还要求熟悉一门后台语言等等.用 ...
 - [转]Nginx反向代理和负载均衡部署指南
		
Nginx反向代理和负载均衡部署指南 1. 安装 1) 从Nginx官网下载页面(http://nginx.org/en/download.html)下载Nginx最 ...
 - 基于Nginx反向代理及负载均衡
		
基于Nginx反向代理及负载均衡 参考:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass 只要没有被启用,默认就是 ...
 - 使用nginx反向代理进行负载均衡
		
在这里简单记录一下,我使用Nginx反向代理进行负载均衡,将请求发送到两台tomcat上. 首先解压两个tomcat,解压Nginx,一台tomcat配置可以不用动,但是我为了更方便只是将它的端口改为 ...
 - (二)Nginx反向代理与负载均衡的实现
		
引言:nginx正向代理与反向代理在上一篇文章中已经谈论过,这里狗尾草主要告诉大家Nginx对前端的小伙伴来说在工作中如何简单的使用. 1.0什么是反向代理 当我们有一个服务器集群,并且服务器集群中的 ...
 - Nginx反向代理、负载均衡及日志
		
Nginx反向代理.负载均衡及日志 1.原理图 2.正向代理与反向代理 (1)代理服务器 代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后 ...
 - Nginx反向代理与负载均衡应用实践(二)
		
Nginx反向代理与负载均衡应用实践(二) 链接:https://pan.baidu.com/s/1xB20bnuanh0Avs4kwRpSXQ 提取码:migq 复制这段内容后打开百度网盘手机App ...
 
随机推荐
- $Poj2083/AcWing118\ Fractal$ 模拟
			
$AcWing$ $Sol$ 一年前做过差不多的南蛮图腾,当时做出来还是很有成就感的$OvO$ $N<=7$,就是模拟模拟,预处理一下,$over$ $Code$ #include<bit ...
 - Docker Swarm Mode 入门实践
			
本文来源 翻译并总结官方文档,添加自定义示例,参考自Docker 19.03版本官方文档 未来可能归档为:https://docs.docker.com/v19.03/ 2020.01.03为http ...
 - Windows Live Writer 语法高亮
			
1.WindowsLiveWriter.CNBlogs.CodeHighlighter.rar 这个插件生成的高亮代码与网页上的一模一样,插入后即可立即显示效果,不过貌似它必须联网才能实时显示效果,因 ...
 - Match3 Module For Game(THDN)
			
介绍 THDN的核心机制为Match3的利用,本文对Match3 Gameplay进行记录,并对其进行改良.THDN作为RogueLIke性质的游戏,玩家在随机生成的dungeon里进行探索并获 ...
 - 【转】常见Java面试题 – 第一部分:非可变性(Immutability)和对象引用(Object reference)
			
ImportNew注: 本文是ImportNew编译整理的Java面试题系列文章之一.请看此系列相关面试题.你可以从这里查看全部的Java面试系列. 一些比较核心的Java问题经常会用来考验面试者的J ...
 - ArcGIS Server for JavaScript 3.3 的安装部署
			
一.安装包下载 首先从官网下载ArcGIS API for JavaScript 3.3 的API和SDK,地址:http://support.esrichina.com.cn/2011/0223/9 ...
 - 【转】ArcGIS ADF 实时轨迹问题初步解决方案
			
Web ADF 实时轨迹是指在Web客户端指定一资源项,并对资源项进行实进跟踪并绘制出轨迹图.实时绘制可采用Ajax实现服务端与客户端无刷新动态绘制,在.net2.0 框架下可轻易实现:通过客户端时钟 ...
 - 基于Netty和SpringBoot实现一个轻量级RPC框架-Client篇
			
前提 前置文章: <基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇> <基于Netty和SpringBoot实现一个轻量级RPC框架-Server篇> 前 ...
 - struct结构体 重载运算符
			
struct node{ int x,y,z; }; bool operator<(node a,node b) { if(a.x!=b.x) return a.x<b.x; if(a.y ...
 - 【Tool】---SVN的超级简单并具体得使用介绍
			
又一次被打脸,笔者表示再也不相信自己的记性了.简单的SVN隔了一段时间后,由于项目的需要要重新简历代码库,竟然一下子又忘了.天那,这就好比战士上了战场发现没带枪,这能行吗?因此,趁着今天又简短的复习了 ...