Nginx: 反向代理之upstream模块以及完整配置反向代理示例

2024-08-27 14:04

本文主要是介绍Nginx: 反向代理之upstream模块以及完整配置反向代理示例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

upstream模块

  • 对于upstream模块而说,它默认已经被编译进Nginx中了
  • 想禁用的话,通过 `–without-http_upstream_model 这样一个参数来明确的禁用

1 )基本用法

1.1 upstream

  • 语法: upstream name { … }
  • 默认值:无
  • 上下文:http
  • 示例
    upstream {............
    }
    

1.2 server

  • 和 upstream 段平行,用于指定我们后端的一个具体应用服务的一个具体地址
  • 语法:server address [parameters];
    • address 是ip地址+端口,后面可跟一些url
  • 默认值:无
  • 上下文:upstream
  • parameters 可选值
    可选参数含义
    weight=number权重值,默认为1
    max_conns=number上游服务器的最大并发连接数
    fail_timeout=time服务器不可用的判定时间
    max_fails=number服务器不可用的检查次数
    backup备份服务器,仅当其他服务器都不可用时
    down标记服务器长期不可用,离线维护
    • weight 权重值越大,代表这台服务器的处理能力更强,被分配的请求会更多
    • max_conns 定义之后,超出直接拒绝
    • fail_timeout 会启动一个计数器,结合 max_fails
    • max_fails 最大失败次数,结合 fail_timeout
      • 定义 fail_timeout 为 10s, max_fails 为 3
      • 10s 内如果出现3次没有返回结果,则判定当前服务器不可用
    • backup 当所有其他服务器挂掉不可用了,才会将请求调度到 backup 服务器
    • down 永远不会被调度

1.3 keepalive

  • 语法:keepalive connections;

    • 这个 connections 不宜过大
  • 默认值:无

  • 上下文:upstream

  • 示例:keepalive 16;

  • 是限制每一个worker子进程与上游服务器,建立空闲长连接的一个最大数量

  • 可以通过keepalive这样一个参数来启用Nginx与上游服务器之间的一个长连接功能

  • 启用长连接的情形下的话,有很多的并发请求都调度给某一台上游服务器,上游服务器处理完之后,结果都返回给Nginx了

  • 如果开启长连接功能,这些连接可能并不会关闭, 存在这样一种情形,某一个时刻并发请求特别多,超过了五千个并发连接

  • 上游服务器处理完之后,把这五千个请求全部返回给Nginx,但是在这时候没有任何请求了,那这五千千个连接都在这空闲着吗?

  • 所以会很浪费的,因为你又开启了keepalive长连接功能,所以同时这五千个链接都会在这保持长连接

  • 所以说我们的keepalive后面跟一个connection的这样一个参数,就定义了Nginx和后端的上游服务器可以开启的长连接的一个空闲长连接的最大数量

  • 示例中:keepalive 16; 也就是说在一个时刻内,Nginx到上游服务器的空闲的长连接是16个,所谓空闲的长连接就是这个长连接TCP连接接建立着,但是上面没有请求去发送,但这就是空闲的长连接

  • 这个也是有利于我们去更好的去复用这个系统资源,避免某些极端情况的发生的

1.4 keepalive_requests

  • 语法:keepalive_requests number;
  • 默认值:keepalive_requests 100;
  • 上下文:upstream
  • 单个长连接可以处理的最多的HTTP请求个数
  • 建立一个长连接之后, 不可能无限制制的允许请求的发生, 也不能无限限制的让这个长连接一直存在
  • 假如说你这个长接接不不停的发送HTTP请求,最多发送100个HTTP请求之后,就要强制关闭
  • 如果客户端还有请求发送过来,把这个长连接关闭掉之后,再次启动一个新的连接给你处理请求

1.5 keepalive_timeout

  • 语法:keepalive_timeout time;
  • 默认值:keepalive_timeout 60s
  • 上下文:upstream
  • 空闲长连接的最长保持时间
  • 当现在系统比较空闲的时候,仍然保持了很多长连接
  • 这个时候,每一个长连接最长保持多长时间,也是有一定的限制的
  • 长期没有请求在这个长链接上发送的话,可以通过keepalive_timeout 后面定义这样一个时间值,比如说60秒内
  • 这个长连接上60秒内没有任何请求发送的话,那这个长连接会被自动销毁

1.6 queue (商业版,开源没有)

  • 语法:queue number [timeout=time]
  • 默认值:无
  • 上下文:upstream
  • 示例:queue 100 timeout=30s;
    • 这里的 100 是队列长度
  • 所有上游服务器不可用时,请求会被放到队列中等待

2 )配置示例

upstream back_end {server 127.0.0.1:8080 weight=3 max_conns=1000 fail_timeout=10s
max_fails=2;keepalive 32;keepalive_requests 50;keepalive_timeout 30s;
}

应用程序服务器的配置示例

  • 总配置目录:/etc/nginx/nginx.conf
    include /etc/ngin/conf.d/*.conf;
    
  • vim /etc/nginx/conf.d/app_server.conf 单个可用的配置
    server {listen 8080;server_name localhost;location /proxy/ {root /opt/nginx/html/app;index proxy.html;}
    }
    
  • $ mkdir /opt/nginx/html/app/proxy -p && cd /opt/nginx/html/app/proxy
  • 写一个脚本,产生随机数,模拟动态服务 $ vim create_random_number.sh
    #!/bin/bash
    #DIR=/opt/nginx/html/app/proxy
    FILE=proxy.htmlwhile true;doecho "Application Server,This time create number: $RANDOM" > $DIR/$FILEsleep  1
    done
    
  • 运行脚本 $ nohup sh create_random_number.sh &
  • 多次查看,发现文件有变化 $ cat proxy.html 基于这种形式来模拟动态服务
  • 多次通过 $ curl localhost:8080/proxy/ 可查看对应的变化

反向代理配置示例

1 )proxy_pass 指令

  • 由http_proxy模块提供(ngx_http_proxy_module)
  • 默认已被编译进nginx
  • 禁用须通过 --without-http_proxy_module
  • 语法:proxy_pass URL;
    • URL 的参数原则
      • URL 必须以 http(s) 开头
      • URL 可以携带变量
      • URL 中是否带uri, 回直接影响发往上游请求的URL
  • 默认值:无
  • 上下文:location、if、limit_except
  • 示例一:proxy_pass http:/127.0.0.1:8080
  • 示例二:proxy_pass http:/127.0.0.1:8090/proxy

2 )配置示例 proxy.conf

upstream back_end {server                  192.168.184.20:8080 weight=2 max_conns=1000 fail_timeout=10s max_fails=3;keepalive               32;keepalive_requests      80;keepalive_timeout       20s;
}server {listen              80;server_name         proxy.baidu.com;location /proxy {proxy_pass      http://back_end/proxy;}
}
  • 本机 proxy.baidu.com 配置好 hosts
  • 访问:proxy.baidu.com/proxy 同样可以看到变化的效果
    • 这里会寻找上游服务器中的 proxy.html,之前上游服务器的脚本仍旧还在运行
    • 这里仍然会动态改变 proxy.html 的内容

这篇关于Nginx: 反向代理之upstream模块以及完整配置反向代理示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1111879

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

mysql8.0.43使用InnoDB Cluster配置主从复制

《mysql8.0.43使用InnoDBCluster配置主从复制》本文主要介绍了mysql8.0.43使用InnoDBCluster配置主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录1、配置Hosts解析(所有服务器都要执行)2、安装mysql shell(所有服务器都要执行)3、

Java高效实现PowerPoint转PDF的示例详解

《Java高效实现PowerPoint转PDF的示例详解》在日常开发或办公场景中,经常需要将PowerPoint演示文稿(PPT/PPTX)转换为PDF,本文将介绍从基础转换到高级设置的多种用法,大家... 目录为什么要将 PowerPoint 转换为 PDF安装 Spire.Presentation fo

在Ubuntu上打不开GitHub的完整解决方法

《在Ubuntu上打不开GitHub的完整解决方法》当你满心欢喜打开Ubuntu准备推送代码时,突然发现终端里的gitpush卡成狗,浏览器里的GitHub页面直接变成Whoathere!警告页面... 目录一、那些年我们遇到的"红色惊叹号"二、三大症状快速诊断症状1:浏览器直接无法访问症状2:终端操作异常

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1