首页 > 解决方案 > 许多网址在 nginx 上的最快重定向?

问题描述

nginx 上的新功能。

我们已经迁移了一个站点,需要将大约 800 个 url 重定向到新站点。

nginx 通过 map、return 或其他方法来做会更快吗?

标签: nginx

解决方案


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

推荐阅读