Nginx 的 include 指令可将重写规则模块化拆分到独立文件(如 seo-redirects.conf),需在 server 或 location 块内引入,配合 map 模块可提升百条以上规则的性能与可维护性,修改后须执行 nginx -t 验证、reload 重载并测试响应。

当 URL 重写规则越来越多时,把它们全堆在主配置文件(如 /etc/nginx/sites-available/default)里会变得难以维护、易出错、且不方便团队协作。Nginx 的 include 指令就是为此设计的——它能将外部文件“嵌入”到当前配置上下文中,实现模块化、可复用、易测试的规则管理。
把重写规则单独拆成文件
建议按业务或类型划分,比如:
-
/etc/nginx/rewrites/seo-redirects.conf:品牌词跳转、旧URL永久重定向(301) -
/etc/nginx/rewrites/api-routes.conf:API 路径标准化,如/v1/users→/api/v1/users -
/etc/nginx/rewrites/legacy-pages.conf:老CMS页面迁移映射
每个文件只放 rewrite 或 return 指令,不带 server 或 location 块(除非明确需要局部作用域)。例如:
rewrite ^/about\.html$ /about permanent;<br>rewrite ^/products/(\d+)$ /item?id=$1 last;<br>return 301 https://$host$request_uri;
在 location 或 server 块中 include
不要在顶层直接 include —— 规则必须出现在能生效的作用域内。常见位置有:
- 在
server块开头统一加载全局重定向(如域名跳转、HTTPS 强制) - 在具体
location /里 include 路由重写逻辑(如前端 SPA 的 history fallback) - 在
location ~ \.php$外围 include 参数解析规则(避免干扰 FastCGI)
示例:
server {<br> listen 80;<br> server_name example.com;<br><br> # 全局 SEO 重定向<br> include /etc/nginx/rewrites/seo-redirects.conf;<br><br> location / {<br> # 静态资源优先,再 fallback 到入口<br> try_files $uri $uri/ @fallback;<br> }<br><br> location @fallback {<br> # SPA 路由重写规则<br> include /etc/nginx/rewrites/spa-routes.conf;<br> rewrite ^(.*)$ /index.html last;<br> }<br>}配合 map 模块做动态路由分发
如果规则数量超百条、且有明显分类(如按国家码、设备类型、渠道来源),硬写 rewrite 效率低还难调试。这时推荐用 map 模块预定义映射关系:
- 新建
/etc/nginx/maps/redirect-map.conf,用键值对定义源路径→目标路径 - 在
http块中include它,并声明map变量 - 在
server或location中用if+return或rewrite引用该变量
这样既保持配置清晰,又避免正则反复编译,性能更稳。
验证与上线关键动作
每次修改后务必执行三步检查:
-
sudo nginx -t:确认语法无误,特别留意 include 路径是否存在、权限是否可读(Nginx 进程需有读取权限) -
sudo nginx -s reload:平滑重载,不中断服务 - 用
curl -I或浏览器开发者工具验证响应状态码(301/302/200)和 Location 头是否符合预期
建议把所有 rewrite 文件纳入版本控制,每次上线前 diff 变更内容,避免误覆盖。


















