nginx - 许多网址在 nginx 上的最快重定向?
问题描述
nginx 上的新功能。
我们已经迁移了一个站点,需要将大约 800 个 url 重定向到新站点。
nginx 通过 map、return 或其他方法来做会更快吗?
解决方案
map
速度非常快并不完全正确。众所周知(引用文档):
由于仅在使用变量时才对其进行评估,因此即使是大量“映射”变量的声明也不会增加请求处理的任何额外成本。
但是,在您的情况下,您需要一个变量并根据大量字符串检查它。当然它可能仍然很快,但它不会随着你必须比较的更多字符串而很好地扩展。此外,虽然可以忽略不计,但这些字符串必须存储在内存中。
因此,与其潜在地减慢每个请求的速度,不如用应用程序的语言对重定向进行编码。
server {
# ...
rewrite ^/article/(\d)/.* /old-format.php?article_id=$1;
location = /old-format.php {
internal;
fastcgi_pass /your/php/socket;
# all the fastcgi directives as usual
}
# ...
}
在 内部/old-format.php
,检查$_REQUEST['article_id']
并发出适当的重定向。
为什么这更好:
- 符合新 URL 格式的页面,不会受到针对 800 个 URL 的请求 URI 评估;只有正则表达式不匹配,这比给定的映射快得多,特别是如果您在文件
pcre_jit on;
顶部使用指令nginx.conf
- 您可以(可能)用几行代码在 PHP 文件中编写重定向逻辑(从数据库中获取文章和类别 ID 之间的关系)。如果对旧 URL 的访问速度有任何顾虑,您可以将 FastCGI 缓存应用到
old-format.php
位置,例如(+ 在上下文fastcgi_cache_valid 301 24h;
中定义 FastCGI 缓存区域)http
推荐阅读
- javascript - groupRowInnerRenderer ag-grid 版本 1.14.1 的模板
- python - 在 Python 中从 STL 文件渲染 2D 图像
- javascript - React Native Expo Building Javascript Bundle 卡在 99
- python - 如何找到列表最大值的索引?
- google-api - 如何在没有客户端登录的情况下获取客户端数据
- java - 计算二维 int 数组的最小值的程序
- c# - 在 linq 中,通过引用或字符串进行比较更快吗?
- swift - Firebase 数据库不存储用户信息
- python - 无法解析网页中的某些文本
- macos - 如何在 OS X 上创建指向由 venv 创建的 python3 的符号链接?