nginx api 接口重写核心是区分内部重写(last/break)与外部重定向(redirect/permanent),通过 location、rewrite 和 proxy_pass 协同实现路径映射;常用场景包括前缀剥离、参数化重写及 https 强制跳转。

API 接口重写是 Nginx 最常用也最关键的用途之一,核心目标是:对外暴露简洁、语义清晰的路径(如 /user/123),而对内转发到真实后端服务(如 /api/v2/users?id=123 或 http://backend/users/123)。配置关键在于区分「内部重写」和「外部重定向」,并配合 location、rewrite 和 proxy_pass 协同工作。
明确重写类型:内部转发 vs 外部跳转
多数 API 场景需要的是「内部重写」——用户看到的 URL 不变,Nginx 在内部改写路径再代理出去。这靠 last 或 break 实现;只有当需用户浏览器地址栏同步变更(如旧 API 域名迁移),才用 redirect 或 permanent。
-
用
last:重写后重新匹配location,适合带复杂路由逻辑或需二次处理的场景 -
用
break:重写后直接使用新路径,不再查找其他location,更高效,推荐用于简单前缀剥离 -
用
permanent:返回 301,告诉搜索引擎和客户端“这个 API 永久搬走了”,适用于废弃旧路径
剥离前缀并代理到后端(最常见)
例如,把 /api/user/123 转发到后端 http://svc/users/123(去掉 /api):
location /api/ {
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://svc;
proxy_set_header Host $host;
}
注意:proxy_pass 结尾不能加 /(否则会拼接成 http://svc//users/123);rewrite 后跟 break 确保路径改写后立即交给 proxy_pass 处理。
参数化重写(动态路径转查询参数)
将 RESTful 风格路径 /v1/product/456 映射为传统参数式接口 /product.php?id=456:
location /v1/product/ {
rewrite ^/v1/product/(\d+)$ /product.php?id=$1 last;
}
这里用 last 是因为改写后路径 /product.php?id=456 需要重新匹配 PHP 相关的 location ~ \.php$ 块来执行脚本。
跨域或协议升级时的重定向
强制所有 HTTP API 请求跳转 HTTPS:
server {
listen 80;
server_name api.example.com;
return 301 https://$server_name$request_uri;
}
或用 rewrite(等效但略冗余):
rewrite ^(.*)$ https://$server_name$1 permanent;
这种写法触发浏览器跳转,适用于域名或协议变更类的 API 迁移,不建议用于日常接口调用——会多一次请求开销。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











