【nginx】如何给API接口的URL上增加版本号?
背景故事
系统环境
Nginx
PHP5.3.28
Onethink、Thinkphp3.2.3
项目是由第三方开发的, 也没有规范的文档, 现在由于APP升级旧版的APP也要保留使用.
目前结构目录
现状
api.xxx.com api1.xxx.com 由二级域名对应每个版本 ps: 项目直接复制 ~
这样可以分出来,但每发一个版本就要增加一个二级域名. 再说域名运营对二级域名有限制.
初想
服务目录结构
wwwrootapi.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