由于我是将多个项目放置在同一个laradock环境下, 业务碰到了,两个项目间需要接口调用的需要.
例如 A项目, 域名为: A.com
B项目,域名为B.com;
在A项目某个业务中,需要调用到B项目的某个接口, 在正常情况下,我们就在A项目对应的业务上通过 Curl::post("http://B.com/XXXX/XXX") 去调用, 但发现请求结果都是 false, 去B项目对应接口打印日志发现根本就没进来, 同时发现这个接口请求响应时间5s多.
发生问题的原因:
在同一个laradock下, 两个项目共同监听的都是 80 端口, 导致在A项目中通过B项目的域名去请求接口就无法识别是哪个项目,最终请求超时失败.
解决思路: 给B项目增加个监听端口,如 9000, 在A项目中调用B项目接口时通过这个9000端口来实现通讯;
解决办法:
1. 首先. 配置nginx容器,增加监听 9000端口.
cd /home/laradock vi docker-compose.yml
找到nginx 服务
ports:
- "80:80"
- "9000:9000"
在ports: 下增加监听 9000端口, 具体如上图;
2. 配置B项目对应的nginx配置, 增加监听 9000端口
listen 80;
listen 9000;
3. 重构+重启 nginx 服务
> cd /home/laradock
> docker-compose stop nginx
> docker-compose build nginx
> docker-compose up -d nginx
// 看一下nginx 新增监听端口有没有启动 // 先看一下nginx 的容器ID
> docker ps > docker inspect 1acd
说明启动了.
4. A项目中调用B项目接口的实现
记得url 使用的是 http://nginx:9000
$url = "http://nginx:9000/api/v1/sign-verify";
网友评论