Nginx 的 include 指令通过将重定向规则拆分到独立文件(如 legacy-urls.conf、campaigns.conf)并显式引入 server 块,实现配置结构清晰、易于维护和协作;需规范子文件写法、注意加载顺序与作用域,并通过 nginx -t 和 -s reload 验证热加载。

Nginx 的 include 指令是管理大型重定向配置的实用手段,核心在于把逻辑相关的重定向规则拆到独立文件中,再按需引入主配置,让结构清晰、维护方便。
用 include 拆分重定向规则的典型目录结构
建议在 /etc/nginx/conf.d/ 下建立专门目录(如 redirects/),按业务或来源归类:
-
/etc/nginx/conf.d/redirects/legacy-urls.conf—— 老站点 URL 迁移 -
/etc/nginx/conf.d/redirects/campaigns.conf—— 市场活动临时跳转 -
/etc/nginx/conf.d/redirects/geolocation.conf—— 地域性跳转(需配合 geo 模块) -
/etc/nginx/conf.d/redirects/mobile-redirects.conf—— 移动端适配跳转
这样既避免单个 server 块臃肿,也方便团队协作时只修改对应文件。
在 server 块中按需 include
不要把所有重定向塞进一个 include redirects/*.conf —— 容易误加载、难调试。推荐显式引入:
server {
listen 80;
server_name example.com;
<pre class="brush:php;toolbar:false;"># 仅引入与当前域名强相关的重定向
include /etc/nginx/conf.d/redirects/legacy-urls.conf;
include /etc/nginx/conf.d/redirects/campaigns.conf;
location / {
proxy_pass http://backend;
}}
注意:include 必须放在具体作用域内(如 server 或 location),且顺序影响匹配优先级 —— 越靠前的 rewrite/return 越先生效。
被 include 文件里的写法要规范
每个子配置文件应只包含纯重定向语句,不带 server 或 location 容器(除非必要嵌套):
- 用
return 301代替rewrite ... permanent(更高效、语义明确) - 路径匹配尽量用精确匹配(
=)或前缀匹配(^~),避免正则过度消耗 - 每条规则加简短注释,说明用途和生效时间(如
# 2024 Q3 产品页迁移)
示例 legacy-urls.conf:
# /old-product → /products/abc return 301 /products/abc$request_uri; <h1>/blog/archive → /blog</h1><p>rewrite ^/blog/archive(/.*)?$ /blog$1 permanent;</p>
验证与热加载不能跳过
每次修改 include 文件后必须检查语法并重载:
-
sudo nginx -t—— 确保所有被引用文件存在且语法正确(缺失文件会导致 test 失败) -
sudo nginx -s reload—— 平滑重载,不影响线上请求
小技巧:可在 include 路径中使用通配符(如 include /etc/nginx/conf.d/redirects/enabled/*.conf;),通过软链接开关某组规则,无需注释代码。











