如何繞過網關進行文件的上傳

爲什麼要繞過網關去上傳文件?

因爲我們所有的請求都要經過網關,假如有一天網關微服務出了問題,那麼我們所有的文件都上傳不了,所以我們上傳文件可以繞過網關去上傳。

我們該如何實現繞過網關去上傳?

首先你要知道,我們從瀏覽器發送過來的地址,都是從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。
在這裏插入圖片描述

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