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

相关文章

通过配置nginx访问服务器静态资源的过程

《通过配置nginx访问服务器静态资源的过程》文章介绍了图片存储路径设置、Nginx服务器配置及通过http://192.168.206.170:8007/a.png访问图片的方法,涵盖图片管理与服务... 目录1.图片存储路径2.nginx配置3.访问图片方式总结1.图片存储路径2.nginx配置

Nginx禁用TLSv1.0 1.1改为TLSv1.2 1.3的操作方法

《Nginx禁用TLSv1.01.1改为TLSv1.21.3的操作方法》使用MozillaSSL配置工具生成配置,修改nginx.conf的ssl_protocols和ssl_ciphers,通... 目录方法一:方法二:使用 MoziChina编程lla 提供的 在线生成SSL配置工具,根据自己的环境填充对应的

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默

nginx配置错误日志的实现步骤

《nginx配置错误日志的实现步骤》配置nginx代理过程中,如果出现错误,需要看日志,可以把nginx日志配置出来,以便快速定位日志问题,下面就来介绍一下nginx配置错误日志的实现步骤,感兴趣的可... 目录前言nginx配置错误日志总结前言在配置nginx代理过程中,如果出现错误,需要看日志,可以把

深入解析Java NIO在高并发场景下的性能优化实践指南

《深入解析JavaNIO在高并发场景下的性能优化实践指南》随着互联网业务不断演进,对高并发、低延时网络服务的需求日益增长,本文将深入解析JavaNIO在高并发场景下的性能优化方法,希望对大家有所帮助... 目录简介一、技术背景与应用场景二、核心原理深入分析2.1 Selector多路复用2.2 Buffer

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499