1. 程式人生 > >微服務API通過ip可訪問,域名不可訪問問題分析

微服務API通過ip可訪問,域名不可訪問問題分析

摘要

經常會有同學遇到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/1190000016828