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

相关文章

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

在 Spring Boot 中使用 @Autowired和 @Bean注解的示例详解

《在SpringBoot中使用@Autowired和@Bean注解的示例详解》本文通过一个示例演示了如何在SpringBoot中使用@Autowired和@Bean注解进行依赖注入和Bean... 目录在 Spring Boot 中使用 @Autowired 和 @Bean 注解示例背景1. 定义 Stud

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

PyCharm 接入 DeepSeek最新完整教程

《PyCharm接入DeepSeek最新完整教程》文章介绍了DeepSeek-V3模型的性能提升以及如何在PyCharm中接入和使用DeepSeek进行代码开发,本文通过图文并茂的形式给大家介绍的... 目录DeepSeek-V3效果演示创建API Key在PyCharm中下载Continue插件配置Con

SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤

《SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤》本文主要介绍了SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤,文中通过示例代码介绍的非常详... 目录 目标 步骤 1:确保 ProxySQL 和 mysql 主从同步已正确配置ProxySQL 的

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

nginx部署https网站的实现步骤(亲测)

《nginx部署https网站的实现步骤(亲测)》本文详细介绍了使用Nginx在保持与http服务兼容的情况下部署HTTPS,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录步骤 1:安装 Nginx步骤 2:获取 SSL 证书步骤 3:手动配置 Nginx步骤 4:测