(八)nginx反向代理功能

2023-11-19

nginx反向代理概念

反向代理也称reverse proxy,指的就是代理外网用户请求到内部指定web服务器,并将数据返回给用户的一种方式。

nginx除了可以在企业提供高性能的web服务之外,另外还可以将本身不具备的请求通过某种预定的协议转发至其他服务器处理,不同的协议就是nginx服务器与其他服务器进行通信的一种规范,主要在不同场景使用以下模块实现不同的功能。

ngx_http_proxy_module: 将客户端的请求以http协议转发至指定服务器进行处理。 
ngx_stream_proxy_module:将客户端的请求以tcp协议转发至指定服务器处理。 
ngx_http_fastcgi_module:将客户端对php的请求以fastcgi协议转发至指定服务器助理。 
ngx_http_uwsgi_module:将客户端对Python的请求以uwsgi协议转发至指定服务器处理。

反向代理部署流程图:
在这里插入图片描述

2.反向代理配置参数

2.1 proxy_pass参数
proxy_pass; #用来设置将请求转发后端服务器的主机,可以是主机名、IP地址加端口,也可以代理预先设置的主机群
nginx配置文件设置

location  /web {
    #proxy_pass http://192.168.227.132:80/;
    proxy_pass http://192.168.142.132:80;
    index index.html;
}

其中proxy_pass填写后端服务器地址加/和不加/的区别:
proxy_pass http://192.168.227.132/ ---> 访问/var/www/html/index.html 浏览器输入url为http://www.xiaoma.net/web
proxy_pass http://192.168.227.132  ---> 访问/var/www/html/web/index.html 浏览器输入url为http://www.xiaoma.net/web
测试访问结果:
curl -L http://www.magedu.net/web/index.html
2.2 proxy_hide_header参数
proxy_hide_header; #用于nginx作为反向代理的时候,在返回客户端http响应的时候,隐藏后端服务版本相应头部信息,
#可以设置在http/server或者location
location  /web {
    proxy_pass http://192.168.142.132:80;
    proxy_hide_header ETag;
    index index.html;
}
2.3 proxy_pass_request_body参数
proxy_pass_request_body
#是否向后端服务器发送HTTP包体部分,可以设置在http/server或location块,默认即为开启
proxy_pass_request_body on | off;
2.4 proxy_pass_request_headers参数
proxy_pass_request_headers
#是否将客户端的请求头部转发给后端服务器,可以设置在http/server或location块,默认即为开启
proxy_pass_request_headers on | off;
2.5 proxy_set_header参数 (重要)
proxy_set_header
#可以更改或添加客户端的请求头部信息内容并转发至后端服务器,比如在后端服务器想要获取客户端的真实IP的 时候,就要更改每一个报文的头部
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header HOST $remote_addr;
#添加HOST到报文头部,如果客户端为NAT上网那么其值为客户端的公共的公网IP地址
2.6 proxy_hide_header参数
proxy_hide_header field
#用于隐藏后端服务器特定的响应首部,默认nginx在响应报文中不传递后端服务器的首部字段data,server,x-pad等
2.7 proxy_connect_timeout time参数
proxy_connect_timeout 65s;
#配置nginx服务器与后端服务器尝试建立连接的超时时间,默认60s
2.8 proxy_http_version参数
proxy_http_version 1.1;
#用于设置nginx提供代理服务的HTTP协议的版本,默认http 1.0
2.9 proxy_read_time参数
proxy_read_tome time;
#配置nginx服务器向后端服务器或服务器组发起read请求后,等待的超时时间,默认60s 
proxy_send_time time; 
#配置nginx项后端服务器或服务器组发起write请求后,等待的超时时间,默认60s
2.10 proxy_ignore_client_abort参数
proxy_ignore_client_abort off; 
#当客户端网络中断请求时,nginx服务器中断其对后端服务器的请求。即如果此项设置为on开启,则服务器会忽 略客户端中断并
#一直等着代理服务执行返回,如果设置为off,则客户端中断后Nginx也会中断客户端请求并立即 记录499日志,默认为off。
2.11 proxy_head​ers_hash参数
proxy_headers_hash_bucket_size 64; 
#当配置了 proxy_hide_header和proxy_set_header的时候,用于设置nginx保存HTTP报文头的hash表的上限。
proxy_headers_hash_max_size 512; 
#设置proxy_headers_hash_bucket_size的最大可用空间 
server_namse_hash_bucket_size 512; #server_name hash表申请空间大小 
server_names_hash_max_szie 512; #设置服务器名称hash表的上限大小

3. 反向代理-缓存参数

缓存功能默认关闭状态

proxy_cache zone | off; #默认off
#指明调用的缓存,或关闭缓存机制;context:http,server,location
proxy_cache_key string;
#缓存中用于键的内容,默认值:proxy_cache_key $scheme$proxy_host$request_uri
proxy_cache_vaild [code...] time;
#定义对特定响应码的响应内容的缓存时长,定义在http中
#proxy_cache_vaild 200 302 10m;
#proxy_cache_vaild 404 1m;
proxy_cache_path;
#定义用于proxy功能的缓存;context:http
proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
示例:在http配置定义的缓存
proxy_cache_path /var/cache/nginx/prooxy_cache #定义缓存保存路径,自动创建
	levels=1:2:2 #定义缓存目录结构层次,1:2:2可以生成1048576个目录
    keys_zone=proxycache:20m #指内存中缓存的大小,主要用于存放key和metadata
    inactive=120s #有效缓存时间
    max_size=1g #最大磁盘占用空间
proxy_cache_methods GET | HEAD | POST...;
#对哪些客户端请求方法对应的的响应进行缓存,GET和HEAD方法总是被缓存
proxy_set_header field value;
#设定发往后端主机的请求报文的请求首部的值 context:http,server,location
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(八)nginx反向代理功能 的相关文章

随机推荐

  • 主线程退出后,子线程会不会退出

    额 好吧 这是个标题党 其实所有的线程都是平级的 根本不存在主线程和子线程 下文所述为了方便 将在main函数中的线程看做主线程 其它线程看成子线程 特此说明 先考虑以下代码 include
  • 基于深度学习的正常衰老和痴呆症中的脑龄预测

    大脑衰老过程中会出现一系列功能和结构的改变 阿尔茨海默病 AD 作为一种典型的神经退行性疾病 与大脑加速衰老有关联 在本研究中 我们利用大量的氟脱氧葡萄糖正电子发射断层扫描 FDG PET 和结构磁共振成像 MRI 数据 构建了一个基于深度
  • 期货开户顺大市而逆小市

    期货的行情 有人愿意以更高的价来买入 就会涨 有人买意以更低的价格卖出 就会跌 现货市场上 一个馒头5角钱的时候 在期货市场上 如果有很多人争着买 这个馒头可能会涨到5块 或者50块 也是可能的 在这个馒头5块钱一个的时候 你感觉这个馒头太
  • Servlet+JDBC实战开发书店项目讲解第五篇:购物车实现

    Servlet JDBC实战开发书店项目讲解第五篇 购物车实现 引言 在之前的几篇博客中 我们讲解了如何使用Servlet和JDBC开发一个简单的书店管理系统 在本文中 我们将深入探讨购物车的实现 这是一个关键功能 允许用户将所需图书添加到
  • Java的多态特性

    学习笔记 多态 简单说 就是一个对象对应着不同类型 多态在代码中的体现 父类或者接口的引用指向其子类的对象 多态的好处 提高可维护性 由多态前提所保证 提高了代码的扩展性 多态的弊端 无法直接访问子类特有的成员 也就是说前期定义的内容不能使
  • [C++基础]-stack和queue

    前言 作者 小蜗牛向前冲 名言 我可以接受失败 但我不能接受放弃 如果觉的博主的文章还不错的话 还请点赞 收藏 关注 支持博主 如果发现有问题的地方欢迎 大家在评论区指正 目录 一 stack的基本知识 1 什么是栈 2 栈的基本使用 3
  • Python 使用execjs调用网页js 进行数据加密

    最近做一个数据采集项目的时候需要自动采集网站的招投标数据 随便打开一个网站 打开开发者模式 输入关键词 点击搜索 获得以下内容 可以看到请求链接和请求类型 请求类型Content Type 是application x www form u
  • maven 项目导入junit问题

    maven项目无法导入 import org junit Test import org junit runner RunWith 问题 1 检查 Maven Dependencies中Junit的jar中是否有此类 如果没有 说明pom
  • 判断一个IP地址是不是单播地址

    1 组播地址 2 单播地址 1 2
  • C++_生成随机字符串

    include
  • Vite配置跨域代理

    Vite 配置跨域代理 修改vite config js文件 import defineConfig from vite import react from vitejs plugin react https vitejs dev conf
  • Xilinx AXI-memory接口 转 AXI-stream 接口(含源码)

    AXI memory接口 转 AXI stream 接口 AXI memory接口介绍 具体详情可以查看源码 AXI memory接口介绍 从图中我们可以看出memory接口有5个通道 分别是读地址通道 写地址通道 写响应通道 读数据通道
  • 华为OD两轮技术面试

    华为OD面试 1性格测试 选积极向上的选项 注意 性格测试也会挂人 我一个朋友性格测试就没过 2机试 一道变成题目 1h 用例60 通过即可 任给一个数组 元素有20M 1T 300G之类的 其中1T 1000G 1G 1000M 按从小到
  • 数据库事务锁详解

    前言 上篇说到数据库事务中的特性ACID和4个隔离级别 今儿就来看一下事务中的锁 MySQL中的锁 锁是MySQL在服务器层和存储引擎层的并发控制 锁可以保证数据并发访问的一致性 有效性 锁冲突也是影响数据库并发访问性能的一个重要因素 My
  • 并发编程4 - 线程状态、死锁及ReentrantLock

    文章目录 一 再述线程状态转换 二 多把锁与线程活跃性问题 1 多把锁 2 活跃性 三 ReEntrantLock 1 基本用法 2 可重入 3 可打断 4 锁超时 5 公平锁 6 条件变量 一 再述线程状态转换 情况1 New RUNNA
  • JAVA数据结构——利用图的广度优先遍历搜索算法确定无向连通图的连通分量

    分析 如果这个无向图是非连通图的时候 从图的一个顶点没法访问这个图的所有顶点 只能访问包含该顶点的连通分量中的所有顶点 所以从无向图的每个连通分量中的一个顶点开始遍历图 则可求得无向图的所有连同分量 如图则是非连通的无向图 我们只需要从第一
  • (Python笔记)使用Python解析HEX文件的内容

    需要用到binascii库 binascii库中包含了很多在二进制和二进制表示的各种ASCII码之间转换的方法 Code import binascii HEX path r 1 HEX with open HEX path rb as f
  • Python 实现列队

    1 列队定义 队列是项的有序结合 其中添加新项的一端称为队尾 移除项的一端称为队首 当一个元素从队尾进入队列时 一直向队首移动 直到它成为下一个需要移除的元素为止 最近添加的元素必须在队尾等待 集合中存活时间最长的元素在队首 这种排序成为
  • Flutter个推推送Android端,退出应用后收到消息报错

    场景 Android手机 iOS没有测试 1 集成getuiflut 2 返回退出APP 3 发送推送透传消息 报错 Tried to send a platform message to Flutter but FlutterJNI wa
  • (八)nginx反向代理功能

    nginx反向代理概念 反向代理也称reverse proxy 指的就是代理外网用户请求到内部指定web服务器 并将数据返回给用户的一种方式 nginx除了可以在企业提供高性能的web服务之外 另外还可以将本身不具备的请求通过某种预定的协议