Nginx搭建反向代理服务器

Nginx搭建反向代理服务器前面学了 web 资源服务器的搭建 这篇博文就总结一下如何搭建反向代理服务器 为什么需要反向代理反向代理是实现负载均衡的一种方法 假设 很多人同时对订单进行支付 此时 用于支付服务的上游服务器挂掉了 用户就没有办法完成支付服务 用户因为体验感不好的原因 就会选择别的电商平台了 此时 如果使用 Nginx 做反向代理 实现水平扩展 然后缓存所有的支付请求 接着使用负载均衡算法 分别将请求转发到正常的服

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

为什么需要反向代理

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

Nginx搭建反向代理服务器

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

此时访问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=10g inactive=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指定的临时存储路径。 

Nginx搭建反向代理服务器
设置完了,还要在需要做缓存的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状态进行缓存,并指定缓存时间。 
200 from memory cache 不访问服务器,直接读缓存,从内存中读取缓存。此时的数据是缓存到内存中的。 200 from disk cache 不访问服务器,直接读缓存,从磁盘中读取缓存。 304 Not Modified 访问服务器,发现数据没有更新,服务器返回此状态码。然后从缓存中读取数据。 

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209479.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午9:08
下一篇 2026年3月19日 上午9:08


相关推荐

  • nand flash基础——基本操作

    nand flash基础——基本操作nandflash 最基本的操作就是读写擦 读对于处于被擦除状态的 cell Vth 都在 0V Vread 以下 而被写之后的 cell Vth 则处于 0V Vread 和 Vpassr 之间 Vpassr 在 4V 以下 根据这样的特性 则可以通过设置偏置电压来使 cell 处于导通状态 当需要读取一个 cell 时 在栅极 gate 上需要提供一个 Vread 电压 0V 在其他的 cell 上加上一个 Vp

    2026年3月26日
    3
  • linux修改ftp密码_linux系统sftp使用方法

    linux修改ftp密码_linux系统sftp使用方法需求描述:  今天一个同事,遇到个问题,程序连接sftp服务器连接不上,问我端口号是多少,  我想了一下是21还是22,所以就做了测试,发现sftp默认的连接端口号是22,  在此做下记录.操作过程:1.使用sftp默认的端口号进行登录aiuap_cj@cuchc802:~>sftpaisftp@10.124.163.133aisftp@10.124.163….

    2025年11月14日
    5
  • kafka删除主题_kafka从头消费topic数据

    kafka删除主题_kafka从头消费topic数据转自https://www.cnblogs.com/xiaodf/p/10710136.htmlKafka如何彻底删除topic及数据前言:删除kafkatopic及其数据,严格来说并不是很难的操作。但是,往往给kafka使用者带来诸多问题。项目组之前接触过多个开发者,发现都会偶然出现无法彻底删除kafka的情况。本文总结多个删除kafkatopic的应用场景,总结一套删除kafkatopic的标准操作方法。step1:如果需要被删除topic此时正在被程序produce和consum

    2022年10月16日
    4
  • 详解块级元素、行内元素、行内块级元素类型、区别及相互转化

    详解块级元素、行内元素、行内块级元素类型、区别及相互转化1 块级元素特点 1 总是从新的一行开始 2 高度 宽度都是可控的 3 宽度没有设置时 默认为 100 4 块级元素中可以包含块级元素和行内元素 5 块级文字元素中不能放入其他块级元素 6 块级大多为结构性标记常见块级元素 center center 地址文字 h1 h1 标题一级

    2026年3月19日
    2
  • journalctl日志管理

    journalctl日志管理Systemd统一管理所有Unit的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件是/etc/systemd/journald.conf。journalctl功能强大,用法非常多。#查看所有日志(默认情况下,只保存本次启动的日志)$sudojournalctl#查看内核日志(不显示应用日志)$sudojournalctl-k#查看系统本次启动的日志$sudojournalctl-b

    2022年5月23日
    38
  • navicat生产激活码失败【中文破解版】

    (navicat生产激活码失败)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年4月1日
    204

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号