插件窝 干货文章 Nginx Rewrite模块应用的场景有哪些

Nginx Rewrite模块应用的场景有哪些

示例 Rewrite 场景 Nginx 268    来源:    2025-04-22

Nginx的Rewrite模块(ngx_http_rewrite_module)是一个功能强大的工具,主要用于URL重写、重定向和条件判断。以下是其典型的应用场景及示例:


1. URL重写(美化URL)

  • 场景:将动态URL转换为静态化、更友好的格式。
  • 示例nginx rewrite ^/product/([0-9]+)/?$ /product.php?id=$1 last;
    • /product/123 重写为 /product.php?id=123

2. 强制HTTPS跳转

  • 场景:将所有HTTP请求重定向到HTTPS,提升安全性。
  • 示例nginx if ($scheme != "https") { rewrite ^ https://$host$request_uri permanent; }

3. 域名重定向

  • 场景:旧域名跳转到新域名,或统一主域名。
  • 示例nginx rewrite ^(.*)$ https://newdomain.com$1 permanent;

4. 路径标准化

  • 场景:统一URL格式(如补全/、大小写转换)。
  • 示例nginx rewrite ^/([^/]*[^/])$ /$1/ permanent; # 自动补全末尾斜杠 rewrite (?i)^/oldpath /newpath; # 忽略大小写重定向

5. 动态参数处理

  • 场景:隐藏真实路径或简化复杂参数。
  • 示例nginx rewrite ^/search/(.*)/page/([0-9]+)$ /search.php?q=$1&page=$2? last;

6. 防止盗链

  • 场景:限制非本站资源引用(如图片)。
  • 示例nginx location ~* \.(jpg|png)$ { valid_referers none blocked *.example.com; if ($invalid_referer) { rewrite ^ /blocked.png; } }

7. 多条件重定向

  • 场景:根据变量(如设备、语言)跳转不同页面。
  • 示例(移动端跳转): nginx if ($http_user_agent ~* "mobile") { rewrite ^ /mobile/ redirect; }

8. 兼容旧URL

  • 场景:保留旧版URL的兼容性,避免404。
  • 示例nginx rewrite ^/old-page.html$ /new-page permanent;

9. 负载均衡或A/B测试

  • 场景:按规则分发流量到不同后端。
  • 示例nginx rewrite ^/service/(.*)$ /backend-$1 break; proxy_pass http://backend_pool;

10. 防止恶意请求

  • 场景:拦截可疑请求(如注入攻击)。
  • 示例nginx if ($args ~* "script|select|drop") { rewrite ^ /403.html last; }

注意事项

  1. 性能:频繁的Rewrite规则可能影响性能,建议优先使用location匹配。
  2. 循环风险lastbreakredirectpermanent需谨慎使用,避免死循环。
  3. 测试工具:使用nginx -t验证配置,或通过在线工具(如RegExr)测试正则表达式。

通过灵活组合Rewrite规则,可以高效解决URL管理、SEO优化、安全防护等多种需求。