Nginx: 代理场景下Nginx更改发往上游应用服务器的请求

2024-08-28 09:12

本文主要是介绍Nginx: 代理场景下Nginx更改发往上游应用服务器的请求,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

反向代理

  • 首先来看一下这样一个反向代理的图
  • Nginx 在这中间会有很多的指令,可以对用户发过来的一些请求包中的信息进行修改
  • 包括: 请求头, 请求行, 请求体都可以进行修改, 这对于在某一些特殊的场景下实现一些功能是有意义的
  • 也就是说,Nginx 可以将用户发来的请求包拆开,将里面的某一些内容做一些更改
  • 更改完之后,再将这些信息封包再把这些request信息发送到应用服务器

1 ) 一个HTTP请求过来以后,它包含了哪些信息

  • 请求通常是由三部分组成的: 请求头, 请求行, 请求体

2 )对请求行信息的更改方法

2.1 proxy_method 指令

  • 语法:proxy_method method;
  • 默认值:无
  • 上下文:http、server、location

2.2 proxy_http_version 指令

  • 语法:proxy_http_version 1.0 | 1.1;
  • 默认值:proxy_http_version 1.0;
    • 注意,1.0 不支持长连接
    • 如果要修改成 1.1,还要把 下面的 proxy_set header Connection 值修改成 “keep-alive”
    • 这样就修改成了长连接,eg: proxy_set_header Connection "keep-alive"; 这个不常用
  • 上下文:http、server、location

3 )对请求头的修改指令

3.1 proxy_set_header 指令

  • 修改请求头字段
  • 语法:proxy_set_header field value;
    • field 对应字段名称,比如:Host, User-Agent, Content-Length, …
  • 默认值:
    • proxy_set_header Host $proxy_host;
    • proxy_set header Connection close;
  • 上下文:http、server、location

3.2 proxy_pass_request_header 指令

  • 是否原封不动转发
  • 语法:proxy_pass_request_header on/off;
    • on 表示全部原封不动转发到上游服务器
    • off 表示头信息都不转发到上游服务器
  • 默认值:proxy_pass_request_header on;
  • 上下文:http、server、location

4 )对请求包体修改指令

4.1 proxy_set_body

  • 设置body
  • 语法:proxy_set_body value;
  • 默认值:无
  • 上下文:http、server、location

4.2 proxy_pass_request_body

    • 是否原封不动转发 和上面 3.2 一样的用法
  • 语法:proxy_pass_request_body on | off;
  • 默认值:proxy_pass_request_body on;
  • 上下文:http、server、location

5 )配置示例

5.1 上游应用服务器,这里简化,使用 nginx 来模拟, 假设应用服务器ip: 192.168.184.20

server {listen 8888;server_name localhost;location / {return 200    '以下是请求行变量:
request method:	        $request method
uri:		 			$uri
request:				$request
以下是请求头变量:
http test:				$http_test
content_length:			$content_length
content_type:			$content_type
';}
}

5.2 Nginx 代理服务器

server {listen 			8010;server_name 	proxy.baidu.com;location /request/ {proxy_pass  http://192.168.184.20:8888;}
}

5.3 初步测试

现在,某一个客户端请求中间这个 Nginx代理服务器,假设客户端配置好了本地 hosts

$ curlI -H "test: 'Test Variable'" -d "name=jack&age=25&score=99" proxy.baidu.com:8010/request/

以下是请求行变量:
request method:		GET
uri:				/request/
request:			GET /request/ HTTP/1.0
以下是请求头变量:
http_test:			'Test Variable'
content_length:      25
content_type:		 application/x-www-form-urlencoded

5.4 更改 Nginx 代理服务器

server {listen 			8010;server_name 	proxy.baidu.com;location /request/ {proxy_pass  http://192.168.184.20:8888;# 添加以下的修改proxy_method PUT;proxy_http_version 1.1;proxy_set_header test "var modified by nginx"# proxy_pass_request_headers off; # 这里默认on,这里关闭后,上面就没有意义了# proxy_set_body "XXXXXXXXXXXX" # 这里修改 body# proxy_pass_request_body off; # 这里关闭后,curl 中 -d 传递的全失效}
}

reload 配置

5.5 继续测试

回到客户端,继续请求

$ curlI -H "test: 'Test Variable'" proxy.baidu.com:8010/request/

以下是请求行变量:
request method:		PUT
uri:				/request/
request:			PUT /request/ HTTP/1.1
以下是请求头变量:
http_test:			'var modified by nginx'
content_length:      25
content_type:		 application/x-www-form-urlencoded
  • 如果想要继续测试,可以把上面 5.4 中 nginx 配置中的注释打开

这篇关于Nginx: 代理场景下Nginx更改发往上游应用服务器的请求的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

PostgreSQL核心功能特性与使用领域及场景分析

PostgreSQL有什么优点? 开源和免费 PostgreSQL是一个开源的数据库管理系统,可以免费使用和修改。这降低了企业的成本,并为开发者提供了一个活跃的社区和丰富的资源。 高度兼容 PostgreSQL支持多种操作系统(如Linux、Windows、macOS等)和编程语言(如C、C++、Java、Python、Ruby等),并提供了多种接口(如JDBC、ODBC、ADO.NET等

Windows下Nginx的安装及开机启动

1、将nginx-1.16.1.zip解压拷贝至D:\web\nginx目录下。 2、启动Nginx,两种方法: (1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过。 (2)打开cmd命令窗口,切换到nginx目录下,输入命令 nginx.exe 或者 start nginx ,回车即可。 3、检查nginx是否启动成功。 直接在浏览器地址栏输入网址 http://lo

nginx介绍及常用功能

什么是nginx nginx跟Apache一样,是一个web服务器(网站服务器),通过HTTP协议提供各种网络服务。 Apache:重量级的,不支持高并发的服务器。在Apache上运行数以万计的并发访问,会导致服务器消耗大量内存。操作系统对其进行进程或线程间的切换也消耗了大量的CPU资源,导致HTTP请求的平均响应速度降低。这些都决定了Apache不可能成为高性能WEB服务器  nginx:

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配(Exact Match)2. 正则表达式匹配(Regex Match)3. 前缀匹配(Prefix Match) 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中,location 指令用于定义如何处理特定的请求 URI。由于网站往往需要不同的处理方式来适应各种请求,NGINX 提供了多种匹

nginx长连接的问题

转自: http://www.360doc.com/content/12/1108/17/1073512_246644318.shtml

NGINX轻松管理10万长连接 --- 基于2GB内存的CentOS 6.5 x86-64

转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=190176&id=4234854 一 前言 当管理大量连接时,特别是只有少量活跃连接,NGINX有比较好的CPU和RAM利用率,如今是多终端保持在线的时代,更能让NGINX发挥这个优点。本文做一个简单测试,NGINX在一个普通PC虚拟机上维护100k的HTTP

CRtmpServer转推流到Nginx Rtmp及SRS(SimpleRtmpServer)的经历

转自:http://blog.csdn.net/fengyily/article/details/42557841 本人一直用的是CRtmpServer服务,在CRtmpServer服务中根据自已的想法也加入了许多功能,如通过http接口来加载配置等,苦于不支持HLS,自已添加ts分片水平又有限,思来想去决定借助SimpleRtmpServer的HLS功能。说干就干,马上查找相关资源