经常会有同学遇到api通过ip可以访问,但是通过域名却不可以访问 。本篇文章总结了造成这种情况可能的原因 。
文章插图
因为与具体技术的选型、规则配置有关,所以没有深入讨论,只是列出可能性,仅供参考 。
分析
问题
通过域名访问不到的请求表现的现象有
- 接口返回404
- 一个错误页面
- 提示method type不支持
- 提示接口缺乏必要的参数
概览
通过域名访问,在整个后端的访问路径如下图,大致分四个部分,浏览器、负载均衡层、网关层、服务层 。
域名解析这里忽略不讨论了 。
文章插图
出现ip可以访问,但是域名不可访问,4层都有可能导致这个问题 。
微服务层
- 配置了接口访问权限
- 该接口的api prefix不符合该服务的规则
(当然一般的网关路由会做降级,前缀不符,就降级为遍历)
这个可以通过访问网关的ip/uri来找出问题 。
网关层
- 路由算法有问题
- 没有订阅微服务
- 不是所有的微服务都需要对外暴露,对于中台类/或者其他一些内部服务是不对外暴露的 。这些api是不可以直接通过域名访问的 。
Nginx
Nginx里可以配置各种redirect规则,过滤规则 。当通过网关ip可以访问api时,那多半是nginx的问题 。可以检查nginx的配置问题,来定位问题 。
浏览器重定向,将POST/PUT请求改写成了GET请求
比如网站从http升级到https,某个uri redirect了 。当我们在浏览器中键入以www为开头的网址时,网页并不会自动跳转为HTTPS网站,因为浏览器默认打开HTTP网站,基于此,我们就需要对HTTP的访问在服务器端做301、302或307重定向,使之跳转到HTTPS网站 。当使用了301,302后,浏览器会使用GET方式访问在Location中规定的URI,而无视原先请求的方法 。
【微服务API通过ip可访问,域名不可访问问题分析】
推荐阅读
- 天猫商家如何开通隔日达服务 天猫发货时效规定48小时
- 微软|国产操作系统优麒麟下载量超3800万次:有机会弯道超车Win系统
- 一个手机号码可以申请二个微信号吗?如何申请?
- 微信改版后,这3种朋友圈会被折叠!我们找到了8个防折叠的方法
- 微信又出新规:添加微信好友,需要先开权限
- 如果微信绑定了,这两个功能最好关闭,不然密码形同虚设
- 小心你的微信被“监听”,7张图详细教你怎么关闭它?
- 老年人使用微信付款,开启这3个小开关,资金会更安全
- 支撑抖音等数年后 火山引擎新一代视频点播服务对外开放
- 轮胎侧壁起鼓包要不要换 轮胎侧面轻微鼓包一定要换吗