0%

微服务反向代理配置错了,有点丢脸


还是某校,我们隔壁学院有一个后端微服务架构的系统,分为三个服务:管理后台后端服务、微信小程序后端服务和定时任务服务。这三个服务是单机部署的,分别通过 java -jar xxx 启动,并通过 pm2 管理进程。(关于这个上古系统的升级,有空我会再写一篇博客来讲讲)

今天,用户反馈无法创建活动,我根据维护时的经验推断:由于创建活动的时候需要创建定时任务,通过 Restful Api 调用定时任务服务的接口,所以大概率是在这一过程出错。 登录堡垒机,进入服务器导出日志查看,我却看到了从来没想过的报错信息:

java.io.IOException: 
Server returned HTTP response code: 405 for URL: http://localhost/task/api/task/addActivityTask

错误码是405?Method Not Allowed?我首先检查了 /addActivityTask 接口,和另外一个服务中请求该接口的逻辑,发现 Method 都是 POST ,理论上不会出问题啊? 于是我到服务器上执行

curl http://localhost/task/api/task/addActivityTask

curl命令默认是 GET,我却收到了响应,是 HTML,而不是定时任务服务返回的 JSON 格式错误响应。然后我在浏览器中用该服务器的IP请求 /task/api/task/addActivityTask,居然成功定向到了管理后台的登录页面!这时我推断,原因是出在反向代理的配置! 进入 /etc/nginx/conf.d/cat 一下配置文件,果然!我只处理了管理后台后端服务的 /admin 路径和微信小程序后台服务的 /wx 路径,而定时任务服务的 /task 路径却没有处理,于是被 Nginx 按我配置的默认规则转发到了管理后台。所以在我修改静态图片资源的代理后,整整一周来整个定时任务服务都是没有被正确代理的! 还好这功能只是一周稳定使用一次,不然直接喜提 “P0” 了!