Nginx反向代理B

http协议反向代理

反向代理配置参数

proxy_pass; #用来设置将客户端请求转发给的后端服务器的主机
#可以是主机名(将转发至后端服务做为主机头首部)、IP地址:端口的方式
#也可以代理到预先设置的主机群组,需要模块ngx_http_upstream_module支持
#示例:
location /web {
index index.html;
proxy_pass http://172.25.254.30:8080; #8080后面无uri,即无 / 符号,
#需要将location后面url 附加到proxy_pass指定的url后面
#此行为类似于root
#proxy_pass指定的uri不带斜线将访问的/web
#等于访问后端服务器
proxy_pass http://172.25.254.40:8080/; #8080后面有uri,即有 / 符号
#相当于置换,即访问/web时实际返回proxy_pass后面uri内容
#此行为类似于alias
#proxy_pass指定的uri带斜线
#等于访问后端服务器的
#http://172.25.254.40:8080/index.html
#内容返回给客户端
} 
# http://nginx/web/index.html ==>http://1:8080
#重启Nginx测试访问效果:
#curl -L http://www.timinglee.org/web
#如果location定义其uri时使用了正则表达式模式(包括~,~*,但不包括^~),则proxy_pass之后必须不能使用uri
#即不能有/ ,用户请求时传递的uri将直接附加至后端服务器之后
server {
...
server_name HOSTNAME;
location ~|~* /uri/ {
proxy_pass http://host:port; #proxy_pass后面的url 不能加/
}
...
}
http://HOSTNAME/uri/ --> http://host/uri
proxy_hide_header field; #用于nginx作为反向代理的时候
#在返回给客户端http响应时
#隐藏后端服务器相应头部的信息
#可以设置在http,server或location块
#示例: 隐藏后端服务器ETag首部字段
location /web {
index index.html;
proxy_pass http://10.0.0.18:8080/;
proxy_hide_header ETag;
}
proxy_pass_header field; #透传
#默认nginx在响应报文中不传递后端服务器的首部字段Date, Server, X-Pad, X-Accel等参数
#如果要传递的话则要使用 proxy_pass_header field声明将后端服务器返回的值传递给客户端
#field 首部字段大小不敏感
#示例:透传后端服务器的Server和Date首部给客户端,同时不再响应报中显示前端服务器的Server字段
proxy_pass_header Server;
proxy_pass_header Date;
proxy_pass_request_body on | off;
#是否向后端服务器发送HTTP实体部分,可以设置在http,server或location块,默认即为开启
proxy_pass_request_headers on | off;
#是否将客户端的请求头部转发给后端服务器,可以设置在http,server或location块,默认即为开启
proxy_set_header;
#可更改或添加客户端的请求头部信息内容并转发至后端服务器,比如在后端服务器想要获取客户端的真实IP的时候,就要更改每一个报文的头部
#示例:
location ~ /web {
proxy_pass http://172.25.254.20:80;
proxy_hide_header ETag;
proxy_pass_header Server;
proxy_pass_request_body on;
proxy_pass_request_headers on;
proxy_set_header X-Forwarded-For $remote_addr;
}
[root@apache20 ~]# vim /etc/httpd/conf/httpd.conf
LogFormat "\"%{X-Forwarded-For}i\" %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%
{User-Agent}i\"" combined
proxy_connect_timeout time;
#配置nginx服务器与后端服务器尝试建立连接的超时时间,默认为60秒
用法如下:proxy_connect_timeout 6s;
#60s为自定义nginx与后端服务器建立连接的超时时间,超时会返回客户端504响应码
proxy_read_timeout time;
#配置nginx服务器向后端服务器或服务器组发起read请求后,等待的超时时间,默认60s
proxy_send_timeout time;
#配置nginx项后端服务器或服务器组发起write请求后,等待的超时 时间,默认60s
proxy_http_version 1.0;
#用于设置nginx提供代理服务的HTTP协议的版本,默认http 1.0
proxy_ignore_client_abort off;
#当客户端网络中断请求时,nginx服务器中断其对后端服务器的请求。即如果此项设置为on开启,则服务器、
会忽略客户端中断并一直等着代理服务执行返回,如果设置为off,则客户端中断后Nginx也会中断客户端请求
并立即记录499日志,默认为off。

示例:反向代理单台web服务器

将用户对www.example.com的请求转发给后端服务器处理。

[root@centos8 ~]# cat /apps/nginx/conf/conf.d/pc.conf
server {
listen 80;
server_name www.example.org;
location / {
proxy_pass http://172.25.254.30;
}
}
#重启Nginx 并访问测试

示例:指定location实现反向代理

server {
listen 80;
server_name www.example.org;
location / {
proxy_pass http://172.25.254.30;
}
location ~ /static {
proxy_pass http://172.25.254.20:8080;
}
}

后端web服务器必须要有相对于的访问URL

[root@apache20 ~]# mkdir /var/www/html/static
[root@apache20 ~]# echo static 172.25.254.20 > /var/www/html/static/index.html
[root@apache30 ~]# echo 172.25.254.30 > /var/www/html/index.html

重启Nginx并访问测试

[2024-07-25 17:09.35] ~
[Administrator.DESKTOP-P19CNDN]curl www.example.org/static/
static 172.25.254.20
[2024-07-25 17:09.39] ~
[Administrator.DESKTOP-P19CNDN]curl www.example.org
172.25.254.30

针对特定资源实现代理

动静分离结合反向代理是一种常见的网站优化技术,主要用于提高网站的响应速度和服务器性能。下面我将简要介绍这两个概念及其如何协同工作。
在这里插入图片描述

静动分离

静动分离是指将网站中的静态资源(如图片、CSS样式表、JavaScript文件等)与动态内容(如数据库查询结果、用户交互产生的数据等)分开处理的一种方法。这种分离可以带来以下好处:

  • 减轻服务器压力:静态资源可以直接从缓存或CDN(Content Delivery Network)中读取,减少了对后端服务器的直接请求。
  • 提高访问速度:静态资源通常被浏览器缓存,用户再次访问时可以更快加载页面。
  • 易于维护:静态资源通常不会频繁更新,可以独立部署和管理。

反向代理

反向代理位于客户端与服务器之间,用于接收客户端的请求,并根据一定的规则将请求转发给后端服务器。反向代理的主要作用包括:

  • 负载均衡:将请求分发到不同的服务器上,避免单点过载。
  • 安全性:隐藏后端服务器的真实IP地址,提供一层安全防护。
  • 缓存功能:对于一些频繁访问的内容,反向代理可以进行缓存,减少后端服务器的压力。

结合使用

当动静分离与反向代理结合使用时,反向代理服务器可以根据URL路径或其他规则判断请求是针对静态资源还是动态内容,并分别进行处理:

  • 对于静态资源的请求,反向代理可以直接返回缓存中的内容,或者从专门存放静态资源的服务器获取。
  • 对于动态内容的请求,则转发给后端的应用服务器进行处理。

通过这种方式,可以有效地提升用户体验,同时减轻应用服务器的压力,提高系统的整体性能。

示例配置

例如,在Nginx中配置反向代理进行静动分离可能如下所示:

server {listen 80;server_name www.example.com;location /static/ {alias /path/to/static/files/;}location / {proxy_pass http://backend_server;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}

在这个例子中,所有以/static/开头的请求会被直接指向静态文件目录,而其他请求则会被代理到后端服务器。

反向代理缓存

在反向代理中,缓存功能是一个非常重要的特性,它可以显著提高网站的性能和响应速度。反向代理服务器作为客户端与后端服务器之间的中介,可以在接收到客户端请求时缓存响应结果,从而减少对后端服务器的直接请求次数。下面是关于反向代理缓存功能的一些关键点:

缓存的基本原理

  1. 缓存存储:反向代理服务器会将从后端服务器获取的数据存储在本地缓存中。
  2. 命中检查:当客户端发起新的请求时,反向代理首先检查缓存中是否存在相同请求的结果。
  3. 缓存命中:如果存在,则直接从缓存中返回结果,而不需要再次请求后端服务器。
  4. 缓存未命中:如果缓存中没有相应的结果,则向后端服务器发起请求,并将新获取的数据存入缓存。

缓存的优势

  • 减少带宽消耗:通过缓存重复的数据,减少了不必要的数据传输。
  • 降低后端服务器负载:缓存减少了对后端服务器的直接请求,有助于分散负载。
  • 提高响应速度:缓存中的数据可以快速返回给客户端,提高了用户体验。
  • 容错性:即使后端服务出现故障,反向代理也可以尝试从缓存中返回数据,保持一定程度的服务可用性。

缓存策略

反向代理中的缓存策略可以很灵活,可以根据HTTP响应头中的Cache-ControlExpires等字段来决定缓存的有效期。例如,如果响应头中包含Cache-Control: max-age=3600,那么这条记录将在缓存中保留一个小时。

实现示例

以Nginx为例,下面是一个简单的缓存配置示例:

http {proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;proxy_cache_key "$scheme$request_method$host$request_uri";server {listen 80;server_name example.com;location / {proxy_pass http://backend_server;proxy_cache my_cache;proxy_cache_valid 200 60m;proxy_cache_valid 404 1m;add_header Cache-Control "private, no-store";}}
}

在这个示例中:

  • proxy_cache_path定义了缓存的存储位置以及缓存区的大小和生存周期。
  • proxy_cache_key指定了用于缓存键的生成规则。
  • proxy_cache_valid设置了不同状态码下的缓存有效期。
  • add_header Cache-Control "private, no-store"可以控制客户端的行为,这里设置为不存储缓存。

注意事项

虽然缓存能带来很多好处,但也需要注意以下几点:

  • 缓存一致性:确保缓存中的数据是最新的,可以通过适当的缓存失效机制来实现。
  • 缓存污染:避免恶意请求导致缓存污染,需要对缓存键的设计进行仔细考虑。
  • 缓存容量:合理规划缓存的大小,避免占用过多内存资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/51397.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无人机之穿越机基础知识

一、用途与性能 主要用于竞赛、娱乐和极限飞行,特点是速度快、机动性强、反应灵敏,能够在短时间内做出迅速的加速、转向和翻滚动作,具有极高的飞行灵活性和第一视角飞行体验(FPV )。 穿越机通常体积小,续…

Open3D mesh 泊松下采样

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2下采样后点云 Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长期更新&#xff0…

【国产游戏的机遇与挑战】

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Git(分布式版本控制系统)

git介绍: git官网:https://gitee.com/ Git工具安装 Git 公司 (git-scm.com)https://git-scm.com/ git本地配置账号和邮箱 一般刚安装Git都要配置用户名、密码和邮箱,因为你提交代码到本地仓库(上传代码到远程仓库)时…

Nginx的Rewrite和Location配置

目录 一、Rewrite模块 1.功能概述 1.1URL重写 1.2URL重定向 1.3条件判断 1.4重写规则的执行顺序 2.语法格式 2.1Flag说明 3. Rewrite跳转实现 4.常用的Nginx正则表达式 二、Location模块 1.概述 2.分类 2.1精准匹配() 2.2前缀匹配…

游戏如何对抗 IL2cppDumper逆向分析

众所周知,Unity引擎中有两种脚本编译器,分别是 Mono 和 IL2CPP 。相较于Mono,IL2CPP 具备执行效率高、跨平台支持等优势,已被大多数游戏采用。 IL2CPP 模式下,可以将游戏 C# 代码转换为 C 代码,然后编译为…

python爬虫——入门

一、概念 万维网之所以叫做网,是因为通过点击超链接或者进入URL,我们可以访问任何网络资源,从一个网页跳转到另一个网页,所有的相关资源连接在一起,就形成了一个网。 而爬虫呢,听名字就让人想起来一个黏糊…

string类题目(上)

string类题目 题目来源(Leetcode) 题目一:仅仅反转字母 分析 这个反转的特点在于只反转字母,不反转特殊字符。 法一:如果我们让一个正向迭代器指向第一个字符,让一个反向迭代器指向最后一个字符&#xf…

ch32v307vct6从头移植FreeRTOS

使用官方的ide可以直接创建带FreeRTOS的工程,但是不利于我们学习移植,所以特此记录怎么从头开始移植FreeRTOS到CH32V307VCT6芯片使用。 下载FreeRTOS源码 首先进入https://www.freertos.org/官网,然后找到如下Download字样,进入下…

华为云通过自定义域名访问桶内对象

问题:通过将自定义域名绑定至OBS桶实现在线预览文件 例如index.html入口文件 且记 自定义域名绑定暂时不支持HTTPS访问方式,只支持HTTP访问方式 自定义域名就先不用部署https证书。 配置完毕之后,将obs桶设置为公开的即可访问 如何在浏览…

Mysql 集群技术

Mysql在服务器中的部署方法 安装MySQL依赖性 rootmysql-node10 ~]# dnf install cmake gcc-c openssl-devel \ ncurses-devel.x86_64 libtirpc-devel-1.3.3-8.el9_4.x86_64.rpm rpcgen.x86_64 下载并解压源码包 使用命令tar zxf mysql-boost-5.7.44.tar.gz进行解压 源码编译安…

硬件面试经典 100 题(81~90)题

81、请问下图电路中二极管 D1、D2 有什么作用? 在 Vi 输入电压接近于零时,D1、D2 给三极管 T1、T2 提供偏置电压,使 T1、T2 维持导通,以消除交越失真。 陈氏解释 这道题参见:硬件面试经典 100 题(51~70 题…

【自动化】一共获取6600多公司信息【逆向】一页15还加密。

一、【逆向】一页15还加密。 二、【自动化】一共获取6600多公司信息 三、对于两种方式我喜欢第二种自动化 from DrissionPage import ChromiumPage, ChromiumOptions import time # chrome:version co = ChromiumOptions().set_paths(browser_path=r"C:\Users\lenovo\A…

【MySQL】MySQL表的增删改查(初阶)

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 表内容操作 插入内容 按顺序插入 指定某些列插入 一次插入多行记录 插入时间 查询表内容 全列查询 指定列查询 指定表达式查询 用as取别名 ​编辑 去重查询 排序查询…

不同搜索引擎蜘蛛的功能、‌抓取策略与技术实现差异探究

搜索引擎作为互联网信息检索的重要工具,‌其核心功能依赖于背后的“蜘蛛”程序。‌这些蜘蛛程序负责访问互联网上的各种内容,‌并建立索引数据库,‌以便用户能够快速准确地找到所需信息。‌然而,‌不同搜索引擎的蜘蛛在功能、‌抓…

Axios介绍;前后端分离开发的介绍;YAPI的使用;Vue项目简介、入门;Elementui的使用;nginx介绍

1 Ajax 1.1 Ajax介绍 1.1.1 Ajax概述 我们前端页面中的数据,如下图所示的表格中的学生信息,应该来自于后台,那么我们的后台和前端是互不影响的2个程序,那么我们前端应该如何从后台获取数据呢?因为是2个程序&#xf…

仿Muduo库实现高并发服务器——EventLoop模块

我刚开始看这个模块时,也是看不明白,什么是事件管理模块。 此时此刻,大领导的背影,还是那么清晰。结合故事模块,慢慢理。 EventLoop模块 成员: 绿色: 利用智能指针对new出来的对象进行管理&…

武汉流星汇聚:亚马逊赋能中小企业,跨境电商市场举足轻重地位稳

在全球经济一体化的浪潮中,跨境电商作为推动国际贸易的重要力量,正以前所未有的速度发展。在这场全球性的商业竞赛中,亚马逊以其卓越的市场表现、强大的技术实力和深厚的品牌影响力,稳居跨境电商市场的领头羊地位,其举…

多任务下载工具.exe

关键代码 void DownloadTask::StartDownload(const QUrl url,QFile *file,qint64 startPoint/* 0 */,qint64 endPoint/* -1 */) {if( NULL file )return;m_HaveDoneBytes 0;m_StartPoint startPoint;m_EndPoint endPoint;m_File file;//根据HTTP协议,写入RANGE…

Vue3基础2

1.Hooks 就是进行数据的封装,同一种类型的 数据 方法 计算属性 ,放在一起 命名规范 use功能名称.ts 或.js 创建一个文件夹 hooks 1.useDog.ts import { reactive,onMounted } from "vue"; import axios from "axios";export def…