一、代理简述

代理分为正向代理和反向代理,

正向代理:客户端与目标服务器之间增加一个代理服务器,客户端直接访问代理服务器,在由代理服务器访问目标服务器并返回客户端并返回 。比如夜深人静的时候访问的一些网站,其实就是代理服务器,一个代理服务器被封了还有另外的可以访问。主要用作屏蔽客户端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)---代理与负载均衡的更多相关文章

  1. Nginx反向代理,负载均衡,redis session共享,keepalived高可用

    相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...

  2. nginx反向代理与负载均衡

    一:nginx反向代理与负载均衡配置思路与用法 1.nginx反向代理:就是你去相亲时,媒婆就是这里的代理,让媒婆带你去见姑娘 2.nginx负载均衡:就是有很多的媒婆经过商量给你选出最适合你的姑娘, ...

  3. 【转】Nginx反向代理和负载均衡

    原文链接:http://www.cnblogs.com/shuoer/p/7820899.html Nginx反向代理和负载均衡 环境说明 由于我使用的是windows系统,所以我用虚拟机虚拟出来了3 ...

  4. 谁说前端不需要懂-Nginx反向代理与负载均衡

    转:https://juejin.im/post/5b01336af265da0b8a67e5c9 学到老活到老 前端圈一直很新,一直要不停的学习,而且在进入大厂的路上,还要求熟悉一门后台语言等等.用 ...

  5. [转]Nginx反向代理和负载均衡部署指南

    Nginx反向代理和负载均衡部署指南   1.        安装 1)         从Nginx官网下载页面(http://nginx.org/en/download.html)下载Nginx最 ...

  6. 基于Nginx反向代理及负载均衡

    基于Nginx反向代理及负载均衡 参考:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass 只要没有被启用,默认就是 ...

  7. 使用nginx反向代理进行负载均衡

    在这里简单记录一下,我使用Nginx反向代理进行负载均衡,将请求发送到两台tomcat上. 首先解压两个tomcat,解压Nginx,一台tomcat配置可以不用动,但是我为了更方便只是将它的端口改为 ...

  8. (二)Nginx反向代理与负载均衡的实现

    引言:nginx正向代理与反向代理在上一篇文章中已经谈论过,这里狗尾草主要告诉大家Nginx对前端的小伙伴来说在工作中如何简单的使用. 1.0什么是反向代理 当我们有一个服务器集群,并且服务器集群中的 ...

  9. Nginx反向代理、负载均衡及日志

    Nginx反向代理.负载均衡及日志 1.原理图   2.正向代理与反向代理 (1)代理服务器 代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后 ...

  10. Nginx反向代理与负载均衡应用实践(二)

    Nginx反向代理与负载均衡应用实践(二) 链接:https://pan.baidu.com/s/1xB20bnuanh0Avs4kwRpSXQ 提取码:migq 复制这段内容后打开百度网盘手机App ...

随机推荐

  1. tomcat日志传参乱码问题

    问题:      在centos系统下,tomcat8.0.36控制台日志打印会出现中文乱码. 解决方案:      在catalina.sh里加上 JAVA_OPTS="-Dfile.en ...

  2. 【题解】CF1056F Write the Contest(三分+贪心+DP)

    [题解]CF1056F Write the Contest(三分+贪心+DP) 最优化问题的三个解决方法都套在一个题里了,真牛逼 最优解应该是怎样的,一定存在一种最优解是先完成了耗时长的任务再干别的( ...

  3. 洛谷$P$2252 取石子游戏 博弈论

    正解:博弈论 解题报告: 传送门! 威佐夫博弈板子昂$QwQ$ 关于这一类问题也有个结论,是说,先手必败的状态一定形如$(\left \lfloor i+\phi \right \rfloor,\le ...

  4. 编辑软件->"Notepad++"

    编辑软件->"Notepad++" Notepad++是什么? Notepad++功能比 Windows 中的Notepad(记事本)强大,除了可以用来制作一般的纯文字说明文 ...

  5. 02_css3.0 前端长度单位 px em rem vm vh vm pc pt in 你真的懂了吗?

    1:废话不多说,直接看如下图表: 2:px就不过多介绍了,就是像素点的大小,加入您的屏幕分辨率为1920,则每一个相当于每一个有横着的1920个像素点: 3:em 为相对单位,一般以 body 内的 ...

  6. ACID特性及幻读的理解

    事务是关系型数据库的重要特性.它是一个包含了一条或多条SQL语句的逻辑原子单元.一个事务包含的SQL要么全部提交,要么全部回滚. Oracle 官方文档中对事务的描述如下: A transaction ...

  7. Spark学习笔记(四)—— Yarn模式

    1.Yarn运行模式介绍 Yarn运行模式就是说Spark客户端直接连接Yarn,不需要额外构建Spark集群.如果Yarn是分布式部署的,那么Spark就跟随它形成了分布式部署的效果.有yarn-c ...

  8. python专题我对json的日常操作

    一前言 本篇文章将会阐述对json的日常操作,如何读取json文件,将json文件转为字典:如何将字典转为json,将字典写入文件等: 二 josn数据格式简要说明 json对于初学者可以理解是一种数 ...

  9. 客户端进行定位(无地图API)

    需求: 根据用户浏览的所在城市加载相应的县级列表 思路: 使用搜索的服务找出当前用户的IP,然后使用百度的服务通过IP进行定位 源码: <!DOCTYPE html> <html&g ...

  10. 基于bootstrap的下拉选择 ( combox ) 输入 ( input ) 功能

    需求: 在编辑数据的时候,既可以让用户输入,也可以从下拉框中选择 思路: 参照下面的效果图,因为是表格里面的数据,所以下拉框触发按钮和输入框分别为1列,输入列可以设置是否输入(方法:<td co ...