Nginx下return和rewrite在301重定向的区别

2018/04/2322:16:52Nginx下return和rewrite在301重定向的区别已关闭评论 132

唯一区别:正则匹配的性能区别

Nginx下常见的301跳转有以下三种,虽然都能达到同样的目的。但是三种写法上还是有区别的,主要的区别是在正则匹配的性能上。

Nginx下return和rewrite在301重定向的区别

rewrite ^/(.*)$ https://example.com/$1;
rewrite ^ https://example.com$request_uri? permanent;
return 301 https://example.com$request_uri;
第一种 rewrite 写法是抓取所有的 URI 再减去开头第一个 / (反斜线)。

第二种写法用了$request_uri 省去了减去开头第一个反斜线的过程,正则匹配上性能更优。但仍不如第三种写法,因为 rewrite 有很多写法和规则,执行到最后 nginx 才知道这是一个 301 永久重定向。

第三种则直接 return 301 + $request_uri,直接告诉 nginx 这是个 301重定向,直接抓取指定URI。这种方法是性能上最优的,因为rewrite指令有很多写法和规则,执行完所有正则匹配后,Nginx 才会知道这是一个301永久重定向。

所以以上三种写法,第三种性能更优一些。当然,一般情况下快那么一点点,作为普通业余站长来说,我们也感觉不到。

通过以上三种写法介绍,我们可以看出return指令在301跳转上比rewrite指令性能上更加有优势。虽然在访问量不大的情况下几种写法的性能表现上区别并不大,不过在海量访问中一个小小的优化也能在提升业务系统性能上起到不小的作用哟!

历史上的今天:

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
avatar