Nginx反向代理详解

Nginx反向代理详解

nginx反向代理是一种常用的服务器架构设计方案,其原理是将客户端请求先发送到反向代理服务器,反向代理服务器再将请求转发到后端真实服务器处理,并将处理结果返回给客户端,从而实现负载均衡、高可用、安全和减轻后端服务器压力等效果。

反向代理

代理其实就是一个中介,A和B本来可以直连,中间插入一个C,A借助C和B连接,C就是代理。刚开始的时候,代理多数是帮助client访问server端,也就是正向代理。后来又有了帮助server端响应client请求的反向代理。

在这里插入图片描述
特点:

  • 代理的是server端
  • server端对client是透明的不可见的
  • client访问时,输入的是代理的地址(proxy)

下面是实现nginx反向代理的步骤:

  1. 安装nginx
    可以查看本人的另一篇文章(Centos7安装配置nginx)

  2. 配置反向代理

在nginx配置文件中添加以下内容:

location / {proxy_pass http://backend_server;
}

其中,backend_server为后端真实服务器地址。

  1. 配置负载均衡

在nginx配置文件中添加以下内容:

upstream backend_servers {server backend_server_1;server backend_server_2;
}location / {proxy_pass http://backend_servers;
}

其中,backend_server_1backend_server_2为后端真实服务器地址,nginx会将请求轮流转发到这两台服务器上。

  1. 配置HTTPS

在nginx配置文件中添加以下内容:

server {listen 443;server_name domain.com;ssl on;ssl_certificate /path/to/cert.pem;ssl_certificate_key /path/to/key.pem;location / {proxy_pass http://backend_servers;}
}

其中,domain.com为要代理的域名,/path/to/cert.pem/path/to/key.pem为SSL证书和私钥的路径。

在这里给大家一个配置案例:
在这里插入图片描述

  1. 重启nginx

完成以上配置后,重启nginx服务即可生效。

upstream部分参数解释

server: 内容为ip地址,指定一个主机参与集群请求分发
weight: 内容为数字,权重比,数字越大,所获得的请求越多
max_fails: 内容为数字,nginx尝试连接该节点的失败次数
fail_timeout: 内容为数字单位秒,与失败次数联合使用,到达上述失败次数后间隔多长再次请求
backup: 备份机,当其他非备份机无法使用时请求分到备份机,在使用ip_hash时无效
down: 剔除,该机器不参与请求分发,只在使用ip_hash时有效

负载均衡(Load balancing),意思是将负载(工作任务,访问请求)进行平衡,用来在多个计算机(计算机集群)中分配负载,以达到集群系统整体的最优化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。

Nginx的负载均衡策略

轮询(默认)
  • 优点:实现简单

  • 缺点:不考虑每台服务器的处理能力

  • 配置示例如下:

upstream 集群名 {
# 需要负载的server列表
server ip1:port;
server ip2:port;
server ip3:port;
}
权重(使用较多)
  • 优点:考虑了每台服务器处理能力的不同,哪台机器性能高就给哪台机器的权重高一些

  • 配置示例如下:

upstream 集群名 {
# 需要负载的server列表,weight表示权重
server ip1:port weight=1;
server ip2:port weight=2;
server ip3:port weight=4;
}

在这里说明一下,按照上面的配置意思就是(4+2+1)七次里面一定会出现1次ip1:port、2次ip2:port、4次ip3:port,而不是按照百分比(百分比的话就是这其次里可能全是ip1:port这就属于概率性问题了)

ip_hash
  • 优点:根据用户的ip地址能实现同一个用户始终访问同一个服务器

  • 缺点:根据 ip hash 不一定平均

  • 配置示例如下:

upstream 集群名 {
ip_hash;
# 需要负载的server列表
server ip1:port;
server ip2:port;
server ip3:port;
}
fair

fair可以根据页面大小、加载时间长短智能的进行负载均衡

upstream backend{fair;server 192.168.200.146:9001;server 192.168.200.146:9002;server 192.168.200.146:9003;
}
least_conn\

请求将被传递给当前拥有最少活跃连接的server

upstream backend {zone backends 64k;least_conn;server 10.10.10.2 weight=2;server 10.10.10.4 weight=1;server 10.10.10.6 weight=1; 
}
url_hash

和ip_hash类似,根据请求路径实现同一个请求访问同一个tomcat

upstream somestream {hash $request_uri;server 192.168.244.1:8080;server 192.168.244.2:8080;server 192.168.244.3:8080;server 192.168.244.4:8080;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/238906.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构:带头双向循环链表的实现

引言 单链表存在缺陷:需要从头开始找前一个节点 解决方法:双向链表 链表的结构(8种): 1. 单向,双向 2. 带头、不带头 带头即为带哨兵位的头节点,第一个节点不存储有效数据。带头节点&#…

C#,数值计算——插值和外推,谢别德(Shep)插值方法的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 谢别德插值方法 /// Object for Shepard interpolation using n points in dim dimensions. Call /// constructor once, then interp as many times as desired. /// &…

【网络奇幻之旅】那年我与大数据的邂逅

&#x1f33a;个人主页&#xff1a;Dawn黎明开始 &#x1f380;系列专栏&#xff1a;网络奇幻之旅 ⭐每日一句&#xff1a;循梦而行&#xff0c;向阳而生 &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️ 文章目录 &#x1f4…

如何删除mac苹果电脑上面的流氓软件?

在使用苹果电脑的过程中&#xff0c;有时候我们也会遇到一些不需要的软件。无论是因为不再需要&#xff0c;或者是为了释放磁盘空间&#xff0c;删除这些软件是很重要的。本文将为大家介绍怎样删除苹果电脑上的软件&#xff01; CleanMyMac X全新版下载如下: https://wm.make…

【图论】重庆大学图论与应用课程期末复习资料2-各章考点(计算部分)(私人复习资料)

图论各章考点 二、树1、避圈法&#xff08;克鲁斯克尔算法&#xff09;2、破圈法3、Prim算法 四、路径算法1、Dijkstra算法2、Floyd算法 五、匹配1、匈牙利算法&#xff08;最大权理想匹配&#xff08;最小权权值取反&#xff09;&#xff09; 六、行遍性问题1、Fleury算法&…

华为交换机,配置攻击防范示例

攻击防范简介 定义 攻击防范是一种重要的网络安全特性。它通过分析上送CPU处理的报文的内容和行为&#xff0c;判断报文是否具有攻击特性&#xff0c;并配置对具有攻击特性的报文执行一定的防范措施。 攻击防范主要分为畸形报文攻击防范、分片报文攻击防范和泛洪攻击防范。 …

Centos7安装

想学Vmware安装可以看下下面链接,不想就算了 https://blog.csdn.net/weixin_43895362/article/details/134723073 选择第一项&#xff0c;安装直接CentOS 7&#xff0c;回车 稍等后出现进入下图,选择中文,这个只是安装时的语言 首先设置时间,时区选择上海&#xff0c;查看时…

Docker容器间网络共享

Docker容器间网络共享 1、新建网络2、容器绑定网卡3、验证 Docker环境中为了一套应用部署多个环境、并且不修改配置文件的情况下&#xff0c;做到一键部署。要求不同容器直接的网络交互&#xff0c;使用容器名称。 网络相关常用命令 #查看网络内部信息docker network inspect b…

5G承载网和大客户承载的演进

文章目录 移动4/5G承载网联通和电信4/5G承载网M-OTN&#xff08;Metro-optimized OTN&#xff09;&#xff0c;城域型光传送网PeOTN&#xff08;packet enhanced optical transport network&#xff09;&#xff0c;分组增强型OTN板卡增强型PeOTN集中交叉型PeOTN VC-OTN&#x…

将本地项目推送到github

欢迎大家到我的博客浏览。将本地项目推送到github | YinKais Blog 本地项目上传至 GitHub<!--more--> 1、进入项目根目录&#xff0c;初始化本地仓库 git init 2、创建密钥&#xff1a;创建 .ssh 文件夹&#xff0c;并进入 .ssh 文件夹 mkdir .ssh cd .ssh/ 3、生成…

高并发下缓存失效问题-缓存穿透、缓存击穿、缓存雪崩、Redis分布式锁简单实现、Redisson实现分布式锁

文章目录 缓存基本使用范式暴露的几个问题缓存失效问题---缓存穿透缓存失效问题---缓存击穿一、单机锁正确的锁粒度不正确的锁粒度无法保证查询数据库次数是唯一 二、分布式锁getCatalogJsonData()分布式锁演进---基本原理分布式锁(加锁)演进一&#xff1a;删锁失败导致死锁分布…

element中el-input限制只输入正整数或保留两位小数

文章目录 一、前言二、实现2.1、HTML2.2、只输入正整数2.3、只能输入数字或小数点 三、最后 一、前言 常见的el-input可能会限制用户只能输入正整数或保留两位小数&#xff0c;达到输入金额的需求&#xff0c;点击【跳转】访问el-input的官方文档 element-ui是有el-input-numb…