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

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

\\

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

\\

正文

\\

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

\\

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

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

3cace44b6740833e16a2b19d7cd06db1.png

\\

微缓存的思想是,动态、非个性化响应可以缓存非常短的时间(比如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头。

\\
\\u0026lt;?php\  if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')\        $_SERVER['HTTPS']='on';\?\u0026gt;\
\\

指令proxy_cache_key决定NGINX如何唯一标识一个响应正文。通过预先在参数名上加上前缀“$arg_”,你可以使用NGINX变量显式引用缓存键中的查询参数。举例来说,考虑下这个URL:http: //www.example.com?abc=1\u0026amp;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)关注我们。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值