【nginx】如何给API接口的URL上增加版本号?

背景故事

系统环境

  • Nginx

  • PHP5.3.28

  • Onethink、Thinkphp3.2.3

项目是由第三方开发的, 也没有规范的文档, 现在由于APP升级旧版的APP也要保留使用.

目前结构目录
【nginx】如何给API接口的URL上增加版本号?

现状

api.xxx.com api1.xxx.com 由二级域名对应每个版本 ps: 项目直接复制 ~

这样可以分出来,但每发一个版本就要增加一个二级域名. 再说域名运营对二级域名有限制.

初想

服务目录结构

wwwroot

api.xxx.com

v1

项目版本1

v2

项目版本2

api.xxx.com/v1/Home/Order/create 指向到目录v1中

api.xxx.com/v2/Home/Order/create 指向到目录v2中

问: 如何配置可以达到上面效果呢?

回答

通过修改nginx配置, 达到预期效果. ^_^

location /v1/ {

if (!-e $request_filename) {

rewrite ^/v1/(.*)$ /v1/index.php?s=$1 last;

break;

}

}

location /v2/ {

if (!-e $request_filename) {

rewrite ^/v2/(.*)$ /v1/index.php?s=$1 last;

break;

}

}

thinkphp3.2.3路由, 在这评论里找到答案, Ctrl+F 搜索修改nginx配置

配置nginx

server {

listen 80;

server_name api.xxx.com;

location /v1/ {

proxy_pass http://127.0.0.1:8001/;

proxy_redirect http://127.0.0.1:8001/ /v1/;

proxy_set_header Host $host;

}

location /v2/ {

proxy_pass http://127.0.0.1:8002/;

proxy_redirect http://127.0.0.1:8002/ /v2/;

proxy_set_header Host $host;

}

}

server {

listen 8001;

allow 127.0.0.1; # 仅允许本地访问8001端口(如有必要)

deney all;

server_name api.xxx.com;

root api.xxx.com/v1/;

# php 相关的fastcgi配置

}

server {

listen 8002;

allow 127.0.0.1; # 仅允许本地访问8001端口(如有必要)

deney all;

server_name api.xxx.com;

root api.xxx.com/v2/;

# php 相关的fastcgi配置

}

域名不行的话,在v1基础上做个v2子项目?还是就是单独的v2项目?

使用动态路由,api.xxx.com/{version}/Home/Order/create,里面的version做动态路由设置,数据调用方就可以根据需求自行访问具体接口

使用Webserver的URL重写实现

tp3.2的话没有显式路由,你直接可以看下他的路由解析规则稍微修改下就行了,应该也不难

以上是 【nginx】如何给API接口的URL上增加版本号? 的全部内容, 来源链接: utcz.com/a/82871.html

回到顶部