写点什么

NGINX 应用性能优化指南(第三部分):内容缓存、转发和微缓存

  • 2016-04-08
  • 本文字数:1691 字

    阅读完需:约 6 分钟

【编者的话】本文是“NGINX 应用性能优化指南”系列文章的第三篇,主要介绍了如何从内容缓存、转发和微缓存方面实现 NGINX 应用性能优化。

注:本文最初发布于 MaxCDN 博客,InfoQ 中文站在获得作者授权的基础上对文章进行了翻译。

正文

NGINX 反向代理非常适合强力 I/O,作为一个不错的内容缓存,将数据移动到距离客户端或边缘节点较近的地方。这让你可以完全解放你的服务器,让它们专注于处理业务逻辑和动态内容生成。

在理想情况下,静态文件由位于源服务器反向代理上的本地快速存储(SSD)提供,并进一步通过 CDN 缓存。针对内容缓存和繁重工作设置 NGINX 反向代理有几种通常互补的方式。它们是:

  1. 动态内容微缓存;
  2. 静态内容缓存;
  3. 通过本地存储和 / 或应用服务器重定向实现内容转发;
  4. 后台存储阵列转发;
  5. 带响应缓存的存储服务转发。

微缓存的思想是,动态、非个性化响应可以缓存非常短的时间(比如 1 秒)。事实上,有人会说,根据预期工作流的不同,个性化响应也可以缓存一小段时间。

虽然它也许没有提供直观的意义,但微缓存让你的服务在面临过量需求或攻击时可以存活更长的时间。它可以(有点人为地)提高基准测试数值。

相关阅读: NGINX 微缓存的好处

在处理静态内容的可管理目录时,最简单的方法可能是让反向代理在其文件系统上存储大量公共资源,作为一个简单的 WebRoot,并直接提供它们。公共资源可以使用一个名为try_files(或者alias)的普通location 块提供。缓存不命中的话,可以像平常一样发送给后台服务器,而响应可以缓存:

复制代码
location / {
alias /home/nginx/www-sparse;
try_files $uri @backend;
}
location @backend {
proxy_cache myCache;
proxy_cache_valid 2h;
proxy_pass http://backend;
}

当资源访问需要身份验证或其他业务逻辑时,应用服务器可以使用 HTTP 头 _X-Accel-Redirect_ 生成一个重定向响应,请求反向代理向客户端提供资源。

可以在反向代理上使用internal 指令限制访问这些内部产生的请求。NGINX 确保客户端请求永远不会匹配被标记为internallocation

复制代码
location /secret {
internal;
alias /home/nginx/group/data;
try_files $uri =404;
}

后台存储阵列也可以使用proxy_pass指令寻址。如果你使用存储服务代替,那么你可能还会想缓存响应,为了将数据移动到距离客户端或边缘节点较近的地方。

复制代码
location /external {
proxy_cache MY_CACHE;
proxy_cache_valid 1h;
proxy_pass http://192.168.10.201;
}

不要忘记更新所需的 HTTP 头,并在 XFF 头(或者新的 RFC 7239 Forwarded头)中添加代理的 IP 地址:

复制代码
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;

当代理 HTTPS 客户端连接到达 HTTP 后台时,应用服务器必须为恰当的模式生成内容 URL。你可以使用X-Forwarded-Proto头传播这个模式。部分微软应用程序会查找Front-End-Https作为替代。

复制代码
map $scheme $front_end_https {
https on;
default off;
}
proxy_set_header X-Forwarded-Proto $scheme;
add_header Front-End-Https $front_end_https;

例如,在生成链接时,WordPress 会使用 PHP 的全局变量$_SERVER控制 HTTP(S)模式。你可以将下面的代码片段加到 WordPress 后台的根目录下(例如,在wp-config.php末尾),以便使用X-Forwarded-Proto头。

复制代码
<?php
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS']='on';
?>

指令proxy_cache_key决定 NGINX 如何唯一标识一个响应正文。通过预先在参数名上加上前缀“$arg_”,你可以使用 NGINX 变量显式引用缓存键中的查询参数。举例来说,考虑下这个 URL:http: //www.example.com?abc=1&xyz=2 。NGINX 将提供$arg_abc$arg_xyz供 NGINX 配置使用。

相关教程:借助查询字符串参数应用自定义规则

查看英文原文: NGINX Application Performance Optimization:Content Caching, Relay, and Micro-Caching


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-04-08 23:514738
用户头像

发布了 1008 篇内容, 共 389.5 次阅读, 收获喜欢 344 次。

关注

评论

发布
暂无评论
发现更多内容

深入探讨RPA在数字化转型中的应用:从业务、组织、战略三个层面解析

快乐非自愿限量之名

RPA 自动化 低代码

MySQL 查询数据库响应时长详解

霍格沃兹测试开发学社

开个技术外挂|数字孪生技术如何成为美洲杯帆船赛成功的关键?

Altair RapidMiner

人工智能 数据分析 数字孪生 仿真

如何制定测试团队的绩效考核

老张

团队管理 OKR KPI 绩效考核

使用Playwright进行键盘操作的详细指南

霍格沃兹测试开发学社

天谋科技与拓维信息完成兼容性互认证

Apache IoTDB

Python 抽奖程序限定次数详解

霍格沃兹测试开发学社

搭建服务端性能监控系统 Prometheus 详细指南

霍格沃兹测试开发学社

德中恒越选择 TDengine Cloud 优化能源物联网平台

TDengine

数据库 tdengine 时序数据库

律所优选管理软件排名:Alpha法律智能操作系统领先行业

科技汇

Python 遍历文件每一行判断是否只有一个换行符详解

霍格沃兹测试开发学社

从低代码开发看,国企数字化转型的思考与探索

不在线第一只蜗牛

低代码 数字化 国企

就业寒冬从面试无力感,到一天2个offer的一些经验分享

霍格沃兹测试开发学社

为什么解决文件协议 OP 放大的问题,对分布式文件存储特别重要?

XSKY星辰天合

文件存储 分布式存储 XSKY 星辰天合

MoneyPrinterPlus:AI自动短视频生成工具-阿里云配置详解

程序那些事

工具 AIGC

Postman 自定义变量使用详解

霍格沃兹测试开发学社

0元体验|使用 Prometheus 监控 Kubernetes 的最佳实践

腾讯云可观测平台

#Prometheus 腾讯云可观测

MoneyPrinterPlus:AI自动短视频生成工具,详细使用教程

程序那些事

AI 程序那些事 AIGC

什么是ETL?

RestCloud

ETL 数据集成 数据集成平台 ETLCloud

单机游戏推荐:地下蚁国单机游戏下载支持win和mac版

你的猪会飞吗

Mac游戏下载 Mac游戏分享

性能分析系统级别指标详解:IO、CPU、内存和网络

霍格沃兹测试开发学社

AI教育“智”变大考,小度率先交卷了

Openlab_cosmoplat

人工智能 开源

APM Profile 在系统可观测体系中的应用

观测云

APM Profile

Alpha系统联结大数据、GPT两大功能,助力律所管理降本增效

科技汇

前端项目如何规范文件命名

伤感汤姆布利柏

搭建数据分析系统 Grafana 详细指南

霍格沃兹测试开发学社

什么是iPaaS?

RestCloud

数字化转型 数据集成 ipaas

如何解决虚拟仿真教学中的设备限制和卡顿问题?|点量云流技术解决方案

点量实时云渲染

WebGL 虚拟仿真 实时云渲染 实时渲染云虚拟仿真 虚拟仿真教学

深入解析Nginx配置文件

霍格沃兹测试开发学社

NGINX应用性能优化指南(第三部分):内容缓存、转发和微缓存_后端_谢丽_InfoQ精选文章