1. 程式人生 > 實用技巧 >如何繞過閘道器進行檔案的上傳

如何繞過閘道器進行檔案的上傳

為什麼要繞過閘道器去上傳檔案?

因為我們所有的請求都要經過閘道器,假如有一天閘道器微服務出了問題,那麼我們所有的檔案都上傳不了,所以我們上傳檔案可以繞過閘道器去上傳。

我們該如何實現繞過閘道器去上傳?

首先你要知道,我們從瀏覽器傳送過來的地址,都是從nginx進行代理,然後轉發給閘道器進行匹配微服務,如果我們繞過閘道器的話,只需要直接從nginx配置不經過閘道器的地址就可以了。

在這裡插入圖片描述
像這個地址,之前我們只配置了一個地址,就是訪問閘道器的地址,讓瀏覽器只能傳送到閘道器裡面,現在我們在上面增多一個地址,這個是可以訪問到上傳檔案路徑的地址,為了更精準一點,我們加上後面的字尾/api/load,因為只要你點選上傳檔案的話,他就會訪問這個地址,你只需要加上這個字尾,他能去自動訪問這個地址,然後由上傳檔案的微服務去擷取,埠我們可以直接改成上傳檔案的微服務的埠,我們這一定義上傳檔案的微服務的埠是8082,所以轉發到8082也就是轉發到上傳檔案的微服務,然後再由上傳檔案的微服務的controller去擷取/upload,就可以實現後面的操作。但是有一點需要注意的是,一定要注意把上傳檔案的配置寫在閘道器配置的前面,也就是上圖用紅框圈起來的地方,這個順序一定要注意,不然的話,路徑會經過閘道器先,然後才會到上傳檔案路徑,這樣就會經過閘道器。

在這裡插入圖片描述

但是因為前端的原因,請求路徑會自動加上api,然後這個是閘道器的api,雖然不是閘道器的埠,但是多了這個api,我們上傳檔案的微服務也沒有辦法訪問到,所以我們要用到一個方法,nginx裡面可以去重寫路徑。

怎麼去重寫路徑呢?

在這裡插入圖片描述
我們可以看看這個方法,這個是我們重寫的方法,這裡用了正則表示式,以^開頭,$結尾,第一個也就是api,表示的是需要修改的物件,然後第二個也就是(.)表示的是api後面的引數也就是/upload/image,然後用雙引號括起來,這就是一個物件,我們需要獲取的是1,這個1表達的是什麼意思呢?就是你要求改的物件後面的一個引數比如(.)這個是代表什麼上面已經說到了,也就是獲取這些全部引數,這些也就是1,如果你加多幾個(.*),那就可以選擇二或者三。

寫完之後我們還要做一個選擇:
在這裡插入圖片描述
需要加這兩個引數之中的一個,兩者的區別就是進行一次路徑匹配跟不匹配,如果進行一次路徑匹配的話,我們上面的地址是沒有api的,在nginx所有地址當中,都是帶有api的,就連我們當前的這個地址,都是帶api的,只是我們重寫了而已,所以我們不能再重新進行一次路徑匹配,只能不再重新匹配地址,選擇第二個break。

在這裡插入圖片描述
在這裡插入圖片描述
最終結果把這後面的也去掉,所以我們最終訪問8082這個上傳檔案的微服務,訪問的時候順便重寫地址把api去掉,就可以正常訪問微服務的controller。
在這裡插入圖片描述

在這裡插入圖片描述
最終結果。