微服务API通过ip可访问,域名不可访问问题分析
摘要
经常会有同学遇到api通过ip可以访问,但是通过域名却不可以访问。本篇文章总结了造成这种情况可能的原因。
因为与具体技术的选型、规则配置有关,所以没有深入讨论,只是列出可能性,仅供参考。
分析
问题
通过域名访问不到的请求表现的现象有
- 接口返回404
- 一个错误页面
- 提示method type不支持
- 提示接口缺乏必要的参数
这些都是接口访问不到,2是配置了错误页面;3,4则发出的POST/PUT 请求,但是请求了GET方法
概览
通过域名访问,在整个后端的访问路径如下图,大致分四个部分,浏览器、负载均衡层、网关层、服务层。
域名解析这里忽略不讨论了。
出现ip可以访问,但是域名不可访问,4层都有可能导致这个问题。
微服务层
- 配置了接口访问权限
在微服务口中,单独限制了这个接口的访问权限,导致该接口没有注册到注册中心,这个可以通过查看代码,或者查看注册中心注册列表找出问题。
- 该接口的api prefix不符合该服务的规则
网关在根据api uri路由到某个具体服务时,为了提高检索效率,有些定义了路由规则,不同服务以不同的prefix来区分。这样服务里面的某个api prefix不符合该服务定义的前缀规则,则匹配不上
(当然一般的网关路由会做降级,前缀不符,就降级为遍历)
这个可以通过访问网关的ip/uri来找出问题。
网关层
- 路由算法有问题
- 没有订阅微服务
不是所有的微服务都需要对外暴露,对于中台类/或者其他一些内部服务是不对外暴露的。这些api是不可以直接通过域名访问的。
这些都可以通过访问网关的依赖,或者网关ip/uri来找出问题。
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,而无视原先请求的方法。
参考
https://zhuanlan.zhihu.com/p/27480845
https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
https://segmentfault.com/a/1190000016828036
微服务API通过ip可访问,域名不可访问问题分析的更多相关文章
- .NET Core 微服务—API网关(Ocelot) 教程 [二]
上篇文章(.NET Core 微服务—API网关(Ocelot) 教程 [一])介绍了Ocelot 的相关介绍. 接下来就一起来看如何使用,让它运行起来. 环境准备 为了验证Ocelot 网关效果,我 ...
- 微服务API Gateway
翻译-微服务API Gateway 原文地址:http://microservices.io/patterns/apigateway.html,以下是使用google翻译对原文的翻译. 让我们想象一下 ...
- 【微服务】之六:轻松搞定SpringCloud微服务-API网关zuul
通过前面几篇文章的介绍,我们可以轻松搭建起来微服务体系中比较重要的几个基础构建服务.那么,在本篇博文中,我们重点讲解一下,如何将所有微服务的API同意对外暴露,这个就设计API网关的概念. 本系列教程 ...
- .NET Core 微服务—API网关(Ocelot) 教程 [三]
前言: 前一篇文章<.NET Core 微服务—API网关(Ocelot) 教程 [二]>已经让Ocelot和目录api(Api.Catalog).订单api(Api.Ordering)通 ...
- 基于微服务API级权限的技术架构
一般而言,企业内部一套成熟的权限系统,都是基于角色(Role)的 访问控制方法(RBAC – Role Based Access Control),即权限 (Permission)与角色相关联,用户( ...
- 自动化API之一 自动生成Mysql数据库的微服务API
本文演示如何利用Uniconnector平台,自动生成Mysql数据库的API,节约开发人员编写后台API的时间.使用生成API的前提是开发者有 自己的数据库,有数据库的管理权限,并能通过外网 ...
- 翻译-微服务API Gateway
原文地址:http://microservices.io/patterns/apigateway.html,以下是使用google翻译对原文的翻译. 让我们想象一下你正在建立一个使用微服务模式的网上商 ...
- 微服务API网关
当你选择采用微服务构建自己的程序,则你需要考虑客户端怎样与后端服务交互.对于一个单体应用,仅有一个服务群提供服务(通过负载均衡器实现).在微服务架构里面,每一个服务都暴漏了一个服务器集群.本篇文章我们 ...
- 【10】JMicro微服务-API网关
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到9小节 1. Api网关基本特性: Api网关作为对外网提供服务的基本入口,地位类似于NGINX, ...
随机推荐
- 安卓图片加载框架--Universal-Image-Loader
今天来介绍图片加载的框架Android-Universal-Image-Loader GITHUB上的下载路径为:https://github.com/nostra13/Android-Univers ...
- Winform 连接Web Service 记录
一般自己控制的项目都会使用webApi,比较少使用WS,感觉要配置一堆东西很繁琐. 场景:多个系统间数据交互. 角色:我们属于下游系统,要把一部分数据格式化后上传到SAP中. SAP提供了一个WS,使 ...
- SQL server 2014使用导出数据为Excel
1.打开SQL server 2014,连接至数据库引擎 2.在要导出的数据库上右击,选择"任务->导出数据" 3.数据源选择"SQL Server Native ...
- Linux系统安装MySQL——.rpm版
0.环境 本文操作系统: CentOS 7.2.1511 x86_64MySQL 版本: 5.7.13 1.下载 MySQL 官方的 Yum Repository 从 MySQL 官网选取合适的 My ...
- python找质数对
python找质数对 编写python脚本,输入一个正整数,输出有几对质数的和等于这个正整数. 例如输入一个正整数10,可以找出有“3+7=10”.“5+5=10”两个质数对的和为10. 要实现这个功 ...
- 单调栈&单调队列
最近打了三场比赛疯狂碰到单调栈和单调队列的题目,第一,二两场每场各一个单调栈,第三场就碰到单调队列了.于是乎就查各种博客,找单调栈,单调队列的模板题去做,搞着搞着发现其实这两个其实是一回事,只不过利用 ...
- 简单的JSP分页显示
1.mysql的limit关键字 (DAO) select * from tablename limit startPoint, numberPerPage; tablename 就是要分页显示的那张 ...
- SpringBoot Kafka 整合使用
前提 假设你了解过 SpringBoot 和 Kafka. 1.SpringBoot 如果对 SpringBoot 不了解的话,建议去看看 DD 大佬 和 纯洁的微笑 的系列博客. 2.Kafka K ...
- Rust生命周期bound用于泛型的引用
在实际编程中,可能会出现泛型引用这种情况,我们会编写如下的代码: struct Inner<'a, T> { data: &'a T, } 会产生编译错误: error[E0309 ...
- Confluence未授权模板注入/代码执行(CVE-2019-3396)
--- title: Confluence未授权模板注入/代码执行(CVE-2019-3396) tags: [poc,cve] num :g7y12 --- # 简介 --- Confluence是 ...