摘要

经常会有同学遇到api通过ip可以访问,但是通过域名却不可以访问。本篇文章总结了造成这种情况可能的原因。
因为与具体技术的选型、规则配置有关,所以没有深入讨论,只是列出可能性,仅供参考。

分析

问题

通过域名访问不到的请求表现的现象有

  1. 接口返回404
  2. 一个错误页面
  3. 提示method type不支持
  4. 提示接口缺乏必要的参数

这些都是接口访问不到,2是配置了错误页面;3,4则发出的POST/PUT 请求,但是请求了GET方法

概览

通过域名访问,在整个后端的访问路径如下图,大致分四个部分,浏览器、负载均衡层、网关层、服务层。
域名解析这里忽略不讨论了。

出现ip可以访问,但是域名不可访问,4层都有可能导致这个问题。

微服务层

  1. 配置了接口访问权限

在微服务口中,单独限制了这个接口的访问权限,导致该接口没有注册到注册中心,这个可以通过查看代码,或者查看注册中心注册列表找出问题。

  1. 该接口的api prefix不符合该服务的规则

网关在根据api uri路由到某个具体服务时,为了提高检索效率,有些定义了路由规则,不同服务以不同的prefix来区分。这样服务里面的某个api prefix不符合该服务定义的前缀规则,则匹配不上
(当然一般的网关路由会做降级,前缀不符,就降级为遍历)

这个可以通过访问网关的ip/uri来找出问题。

网关层

  1. 路由算法有问题
  2. 没有订阅微服务
    不是所有的微服务都需要对外暴露,对于中台类/或者其他一些内部服务是不对外暴露的。这些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可访问,域名不可访问问题分析的更多相关文章

  1. .NET Core 微服务—API网关(Ocelot) 教程 [二]

    上篇文章(.NET Core 微服务—API网关(Ocelot) 教程 [一])介绍了Ocelot 的相关介绍. 接下来就一起来看如何使用,让它运行起来. 环境准备 为了验证Ocelot 网关效果,我 ...

  2. 微服务API Gateway

    翻译-微服务API Gateway 原文地址:http://microservices.io/patterns/apigateway.html,以下是使用google翻译对原文的翻译. 让我们想象一下 ...

  3. 【微服务】之六:轻松搞定SpringCloud微服务-API网关zuul

    通过前面几篇文章的介绍,我们可以轻松搭建起来微服务体系中比较重要的几个基础构建服务.那么,在本篇博文中,我们重点讲解一下,如何将所有微服务的API同意对外暴露,这个就设计API网关的概念. 本系列教程 ...

  4. .NET Core 微服务—API网关(Ocelot) 教程 [三]

    前言: 前一篇文章<.NET Core 微服务—API网关(Ocelot) 教程 [二]>已经让Ocelot和目录api(Api.Catalog).订单api(Api.Ordering)通 ...

  5. 基于微服务API级权限的技术架构

    一般而言,企业内部一套成熟的权限系统,都是基于角色(Role)的 访问控制方法(RBAC – Role Based Access Control),即权限 (Permission)与角色相关联,用户( ...

  6. 自动化API之一 自动生成Mysql数据库的微服务API

        本文演示如何利用Uniconnector平台,自动生成Mysql数据库的API,节约开发人员编写后台API的时间.使用生成API的前提是开发者有 自己的数据库,有数据库的管理权限,并能通过外网 ...

  7. 翻译-微服务API Gateway

    原文地址:http://microservices.io/patterns/apigateway.html,以下是使用google翻译对原文的翻译. 让我们想象一下你正在建立一个使用微服务模式的网上商 ...

  8. 微服务API网关

    当你选择采用微服务构建自己的程序,则你需要考虑客户端怎样与后端服务交互.对于一个单体应用,仅有一个服务群提供服务(通过负载均衡器实现).在微服务架构里面,每一个服务都暴漏了一个服务器集群.本篇文章我们 ...

  9. 【10】JMicro微服务-API网关

    如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到9小节 1. Api网关基本特性: Api网关作为对外网提供服务的基本入口,地位类似于NGINX, ...

随机推荐

  1. 个人永久性免费-Excel催化剂功能第57波-一键生成完全组合的笛卡尔积结果表

    在数据库的多表查询中,通常会有各种连接关系,同样地在Excel环境中,也有很大的场景需要用到类似数据库的多表查询,如经典的VLOOKUP就是其中一种类似LEFT JOIN查询的查询效果.在很多时候需要 ...

  2. C#3.0新增功能08 Lambda 表达式

    连载目录    [已更新最新开发文章,点击查看详细] Lambda 表达式是作为对象处理的代码块(表达式或语句块). 它可作为参数传递给方法,也可通过方法调用返回. Lambda 表达式广泛用于: 将 ...

  3. [leetcode] 55. Jump Game (Medium)

    原题 题目意思即 每一格代表你当前最多能再往后跳几次,从第一格开始,如果能跳到最后一格返回true,反之为false. 思路:用一个下标记录当前最多能跳到哪一格,遍历一遍 --> 如果当前格子不 ...

  4. 端口,OSI7层模型,TCP的三次握手和四次挥手,进度条

    1.端口: 端口是为了将同一个电脑上的不同程序进行隔离 IP是找电脑,端口是找电脑上的程序 MySQL是一个软件,帮助我们在硬盘上进行文件操作,默认端口是3306 Redis是一个软件,帮助我们在内存 ...

  5. Java编程基础阶段笔记 day01 Java语言概述

    ​目录内容 DOS命令 电脑配置 Java语言的特性 Java两种核心机制 Java语言环境搭建 第一个Java程序 注释 Java语句说明 编程风格 作业 常用的DOS命令 dir :    列出当 ...

  6. Spring Boot2(十五):Shiro记住我rememberMe、验证码Kaptcha

    接着上次学习的<Spring Boot2(十二):手摸手教你搭建Shiro安全框架>,实现了Shiro的认证和授权.今天继续在这个基础上学习Shiro实现功能记住我rememberMe,以 ...

  7. F#周报2019年第30期

    新闻 Fantomas 3.0 宣告.NET Core 3.0预览版7 .NET Core 3.0预览版7中ASP.NET Core与Blazor的升级 Visual Studio 2019版本16. ...

  8. JS中构造函数和普通函数有什么区别

    JS中构造函数有普通函数有什么区别? 1.一般规则 构造函数都应该以 一个大写字母开头,eg: function Person(){...} 而非构造函数则应该以一个小写字母开头,eg: functi ...

  9. python多进程详解

    目录 python多进程 序.multiprocessing 一.Process process介绍 例1.1:创建函数并将其作为单个进程 例1.2:创建函数并将其作为多个进程 例1.3:将进程定义为 ...

  10. Android开发——通过wifi接收IPCamera视频流

    前面,我们已经了解了怎么在android app上打开关闭和扫描,搜索wifi,现在,我来写一下怎么通过连接wifi来使app获取到IPCamera摄像头的视频. 一.通过URL获取视频的地址 二.创 ...