基于Nginx反向代理

2019-05-30 20:37 更新

在靜態(tài)部署預(yù)覽Swagger JSON章節(jié)中我們已經(jīng)講過如何通過nginx來部署靜態(tài)文件預(yù)覽文檔,但此時我們會發(fā)現(xiàn)存在一個問題,即無法進(jìn)行接口的調(diào)試。

我們借助于nginx的反向代理功能,幫助我們實現(xiàn)接口的調(diào)試功能

假設(shè)還是提供靜態(tài)JSON的方式,我們只需要在nginx的配置節(jié)點中添加一層location即可

如下:

server {
        listen       18001;
        server_name  192.168.0.112;
        #charset koi8-r;


        location / {
            root /mnt/application/swagger-static;
        }
        location /api/ {
            // Swagger JSON文件中所有以api開頭的接口全部走8999的代理
            proxy_pass http://127.0.0.1:8999/api/;
            client_max_body_size   200m;
        }


    }

通過以上配置,我們即可預(yù)覽及調(diào)試我們的接口文檔

但是

我們又會發(fā)現(xiàn)問題,很多時候,我們所寫的接口可能并不規(guī)范,并非所有的接口都是以/api開頭的,或者以固定的其他格式開頭的接口,那此時如果我們以上面的配置方式來配置,當(dāng)我們的接口以/admin/test這種形式出現(xiàn)時,我們就無法調(diào)試該接口

那或許我們可以換一種方式,我們將該服務(wù)下的所有接口理解為一個服務(wù),我們給一個服務(wù)取一個特點的名稱,然后通過聚合服務(wù)的方式,將文檔聚合顯示出來,這樣既可進(jìn)行調(diào)試

例如:

127.0.0.1:8999理解為service1

我們在訪問該服務(wù)的接口時加上服務(wù)前綴:/service1/api/xxx,此時,不管我們的接口又多么不規(guī)范,只要是service1下的接口,nginx都會將它轉(zhuǎn)發(fā)到127.0.0.1:8999這臺服務(wù)上,這樣我們也完成了接口的調(diào)試

nginx配置:

server {
        listen       18001;
        server_name  192.168.0.112;
        #charset koi8-r;


        location / {
            root /mnt/application/swagger-static;
        }
        location /service1 {
            proxy_pass http://127.0.0.1:8999/;


        }
        location /service2 {
            proxy_pass http://127.0.0.1:8998/;


        }


    }

很顯然,通過以上配置,最終能達(dá)到我們的預(yù)期,但是在我們的文檔界面中,沒有service1這樣的basePath屬性供我們配置,此時,我們應(yīng)該如何處理

針對這種情況,swagger-bootstrap-ui在分組屬性中,擴展了一個basePath屬性值

此時,我們的group.json文件如下:

[
  {
    "name": "微服務(wù)-用戶模塊",
    "url": "/service1/v2/api-docs?group=分組接口",
    "swaggerVersion": "2.0",
    "location": "/service1/v2/api-docs?group=分組接口",
    "basePath":"/service1"
  },
  {
    "name": "微服務(wù)-訂單模塊",
    "url": "/service2/v2/api-docs?group=默認(rèn)接口",
    "swaggerVersion": "2.0",
    "location": "/service2/v2/api-docs?group=默認(rèn)接口",
    "basePath":"/service2"
  }
]

此時,我們的Swagger的JSON路徑地址,我們也可以使用我們服務(wù)提供給我們的接口地址,只需要加上為服務(wù)名稱,分組名稱即可得到該服務(wù)的Swagger JSON文件

通過這種方式,我們可以在group.json文件中聚合所有后端的Swagger服務(wù)接口,最終一致輸出顯示

效果如下:

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號