Nginx搭建反向代理服务器

article/2025/8/22 7:25:09

前面学了web资源服务器的搭建,这篇博文就总结一下如何搭建反向代理服务器。

为什么需要反向代理

反向代理是实现负载均衡的一种方法。假设,很多人同时对订单进行支付,此时,用于支付服务的上游服务器挂掉了,用户就没有办法完成支付服务。用户因为体验感不好的原因,就会选择别的电商平台了。
此时,如果使用Nginx做反向代理,实现水平扩展。然后缓存所有的支付请求,接着使用负载均衡算法,分别将请求转发到正常的服务器,这样,就能保证支付服务的可用性,就不会出现服务挂掉的情况。当然,还有其他方式阻止服务器挂掉,这里就以反向代理为例。

说了这么多,那么什么是反向代理呢?它有什么用呢?这里推荐一篇微信公众号的文章《如何给女朋友解释什么是反向代理?》

作者:漫画编程
链接:https://mp.weixin.qq.com/s/T7vd5heXXUjnbV-1wHg8xg

Nginx搭建反向代理服务器

上游服务器

将上篇博文搭建的Nginx服务器作为上游服务。需要修改其配置。

在监听的8080端口加上127.0.0.1。这表示只能本机的进程来访问打开的8080端口。
然后停止服务,重新启动

./sbin/nginx -s stop  # 停止nginx服务

此时访问Nginx服务器,就会显示无法访问了。

反向代理服务器

重新编译一个新的Nginx服务器作为反向代理服务器。至于编译,可以参考第一篇博文。
新的Nginx服务器编译好之后,就需要对配置文件进行修改。

当然,最先配置的就是监听端口了,因为作为反向代理服务器,这里就开放80端口。
接着就需要配置图中第一个矩形框中的内容了。
upstream:使Nginx跨越单机的限制,完成网络数据的接收、处理和转发。
这里填的是上游服务的地址,如果有很多台上游服务器,可以依次放在里面。

扩展一下Nginx的upstream的五种分配方式:

  1. 轮询
upstream local {server 192.168.1.100:8080;server 192.168.1.200:8080;
}

这是upstream默认的分配方式,将请求轮流分配到不同的服务器上。

  1. 权重
upstream local {server 192.168.1.100 weight=3;server 192.168.1.200 weight=1;
}

权重比例大的服务器,接受的请求就多。

  1. ip_hash
upstream local {ip_hash;server 192.168.1.100:8080;server 192.168.1.200:8080;
}

每个请求按照访问ip的hash结果分配,这样每个访客会固定访问一个后端服务器,可以解决session一致问题。

  1. fair
upstream local {server 192.168.1.100:8080;server 192.168.1.200:8080;fair;
}

按照响应时间短的原则进行服务器的分配。

  1. url_hash
upstream local {server 192.168.1.100:8080;server 192.168.1.200:8080;hash $request_uri;hash_method crc32;
}

按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景。

讲完了第一个部分的配置,接下来就讲第二个矩形框的配置。


proxy_set_header:是Nginx的一个模块。主要作用是,允许重新定义或添加字段传递给代理服务器的请求头。—— Host $host:$host是直接引用了Nginx的变量,Host是一个变量名。—— X-Real-IP $remote_addr:设置$remote_addr这个变量,可以让Nginx获得用户的真实ip,X-Real-IP同样是变量名。—— X-Forwarded-For $proxy_add_x_forwarded_for:这个我也是脑瓜有点疼,没太搞懂。proxy_pass http://local; 这个配置表示,设置后端代理服务器的地址。这里的local是上面upstream指令块的别名,即引用upstream指令块的地址。

反向代理的配置就讲完了,下面就可以启动代理服务器进行访问了。当我把上游服务器关掉后,再访问,就会报502,无效网关的错误。其实Nginx还支持缓存这一特性。可以将上游服务器返回的内容缓存指定的时间。即使上游服务器挂掉。Nginx的代理服务器依然可以返回响应结果。

具有缓存作用的反向代理服务器

在上面配置的基础上,新增缓存功能。首先在http指令块下新增以下指令

proxy_cache_path /tmp/nginxcache levels=1:2 keys_zone=my_cache:10m max_size=10ginactive=60m use_temp_path=off;# /tmp/nginxcache:表示将Nginx缓存到哪个目录下(首先使用mkdir创建这个文件夹,这个位置是可以指定的)。
# levels:默认所有缓存文件都放在上面指定的根路径中,从而可能影响缓存的性能。推荐指定为2级目录来存储缓存文件。
# key_zone:用于在共享内存中定义一块存储区域来存放缓存的key和metadata。
# max_size:最大的cache空间。
# inactive:内存中缓存的过期检查周期。
# use_temp_path:如果为off,则Nginx会将缓存文件直接写入指定的cache文件中,而不使用temp_path指定的临时存储路径。 


设置完了,还要在需要做缓存的url路径下添加以下指令。

proxy_cache my_cache;   # my_cache指上面开辟的共享内存。
proxy_cache_key $host$uri$is_args$args;  # 增加设置web缓存的key值,指明哪个用户,哪个资源,哪些参数。
proxy_cache_valid 200 304 302 1d;  # 对指定的HTTP状态进行缓存,并指定缓存时间。

下图基本上是反向代理和缓存所需的所有配置。

然后就启动上游服务器,再启动具有缓存的反向代理服务器。最后停掉上游服务器,看是否能够正常得到返回结果。
经本人测试,停掉上游服务器,并不会像之前报502错误,而是会显示返回结果。同时,查看谷歌浏览器的控制台,会显示下面的情况。

根据英语单词的意思可知,来自于缓存,详细解释如下。

200 from memory cache 不访问服务器,直接读缓存,从内存中读取缓存。此时的数据是缓存到内存中的。
200 from disk cache 不访问服务器,直接读缓存,从磁盘中读取缓存。
304 Not Modified 访问服务器,发现数据没有更新,服务器返回此状态码。然后从缓存中读取数据。

思考时,要像一位智者;但讲话时,要像一位普通人。


http://chatgpt.dhexx.cn/article/W1XXA0uc.shtml

相关文章

nginx服务器有什么作用以及什么是反向代理?

最近再用在配置Nginx,学习记录下。 一.背景介绍 1.什么是Nginx? Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。 Nginx是一款轻量级的Web服务器/反向代理服务器以及电子邮件代理服务器,并在一个BSD…

反向代理服务器nginx-proxy-manager

一直以来,老苏都是使用群晖内置的反向代理,虽然很方便易用,但在某些情况下显得并不灵活。比如老苏打算安装 Authelia,需要修改 nginx 转发规则,必须通过 SSH 登录后找到相应的文件修改,这一点上不如 nginx-…

Nginx反向代理服务器

1、nginx简介 Nginx 是⼀个⾼性能的HTTP和反向代理web服务器,核⼼特点是占有内存少,并发能⼒强。 Nginx的应用场景: Http服务器(Web服务器) 1、性能⾮常⾼,⾮常注重效率,能够经受⾼负载的考验…

反向代理服务器的工作原理

最近有打算研读nginx源代码,看到网上介绍nginx可以作为一个反向代理服务器完成负载均衡。所以搜罗了一些关于反向代理服务器的内容,整理综合。 一 概述 反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的…

Nginx反向代理服务器搭建(超详细)

一、简介 Nginx (engine x) 是一个高性能的Web服务器和反向代理服务器,也可以作为邮件代理服务器。 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上…

什么是反向代理?

正向代理 当客户端访问一台服务器有障碍,访问不到的时候,这时候就可以找一台可以访问到该服务器的另外一台服务器去代替他去访问,这台代替他去访问的服务器称之为代理服务器。然后客户端就可以把请求发送给代理服务器,然后通过代…

服务器反向代理

一、定义 正向代理 正向代理,代理的是客户端,为客户端发送请求,对服务器隐藏自己的真实客户端。 由下图可见,通过代理服务器,可以访问局域网外的服务器,突破自身ip的访问权限。比如翻墙访问外网。 一般而言…

什么是反向代理(代理服务器解释

什么是反向代理(reverse proxy)? A reverse proxy protects web servers from attacks and can provide performance and reliability benefits. Learn more about forward and reverse proxies. 反向代理是位于 Web 服务器前面的服务器,将客户端&…

反向代理服务器

反向代理服务器的概念 反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址&#xff0…

超全Nginx反向代理服务器原理+实战篇

文章目录 1.Nginx简介和安装部署1.1.什么是Nginx1.2.Nginx的用途1.3.正向代理服务器1.4.反向代理服务器1.5.nginx安装部署1.6.线上访问服务器应用流程解析1.7.本地虚拟机配置宿主机域名映射2.Nginx核心基础知识2.1.Nginx目录结构2.2.Nginx核心配置文件2.3.Nginx搭建前端静态服务…

什么是反向代理服务器

我们常会看到‘反向代理服务器’这个名词,例如常看到文章上说 nginx 是一个反向代理服务器、varnish 是一个反向代理服务器 …… 下面就了解下这个概念 含义 ‘反向代理服务器’ 有两个概念,一是‘代理服务器’,二是‘反向’ ‘代理服务器’比…

入门Nginx反向代理服务器

前言 博主最近学习了Nginx,故想通过撰写博客的方式加强对知识的认识和记忆,所涉及知识浅薄,如有错误,敬请指正 一.Nginx简介 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器;其特点是占有内存少&#xff0…

推导大O阶方法

1、用常数1取代运行时间中的所有加法常数; 2、只保留最高阶项; 3、去除最高阶项的常数; 常数阶是O(1); 线性阶是O(n); 对数阶是O(logn); 平方阶是O&…

大O算法复杂度表示

序言:算法的时间复杂度和空间复杂度都是用“ 大O表示法” 来表示的。其中O是个常量。 常见的 排序算法的时间复杂度: 冒泡排序、插入排序、希尔排序、选择排序的时间复杂度是O(n^2); 快速排序的时间复杂度是 O&#…

数据结构学习笔记:算法复杂度的度量之“大O记号”

分析算法复杂度的非常重要的方法:大O记号!! 下面来让我们看一下到底什么是大O记号 举个例子: 用一个直尺去评价算法复杂度,上面的刻度就相当于大O记号,我们不一定要一味的强调刻度的精细程度,没…

算法复杂度渐进符号(大O、Ω和θ)的个人理解

做软考习题时,碰到了这样的一道题: 关于算法复杂度渐进符号(O、Ω、θ),详细解释可参考: 【双语字幕】什么是算法复杂度渐进符号?阿布老师算法课11 这里节选总结了视频的重点内容,…

数据结构考研:大O表示法最浅显易懂且详细深入的解释及与小o表示法的区别(十分钟必懂)

大O表示法的背景 作为软件工程专业的学生,在我们学习数据结构的时候,总是会碰见对各种算法时间复杂度和空间复杂度的大O表示法的描述。我们只是将信将疑的用着,并不知道大O表示法的准确含义,今天博主李同学在查阅各方资料后进行详…

算法的时间复杂度(大O表示法)

首先我们先来看个例子, 我想找个1~100的数字,你的目标是以最少的次数猜到这个数字。你每次猜测后,我会说小了、大了或对了。下面我们来看下两种简单的方法(方法有很多种),再来引入算法的运行时间&#xff0…

算法时间复杂度分析——大O、大Ω、大θ、小o,小ω

最近开始转战传统算法分析的研究工作了,重新拾起以前学过的一些内容。 目录 一、概述 二、对常见的Ο和Ω进行分析 2.1 大O表示法 2.2 大Ω表示法 三、P问题,NP问题,NP-hard问题,NPC问题 3.1 P问题和NP问题 3.2 NPC问题和N…

复杂度分析(大O表示法)

复杂度分析 前文提要 本文完完全全引用极客时间的文章《数据结构与算法之美》,作者王争。 数据结构是作为程序猿绕不过的一道坎,所以萌生了学习的想法,试读了几篇文章后发现讲的很好,也有很多人订阅,于是不回头的走…