首先聲明,服務器是linux 版本是ubuntu server 18.04,不是windows server。windows server 2016放棄治療了,2019可能會有改善,不過雲廠商的公共鏡像並沒有。windows container折騰死人啊.
架構如上圖所示,.net core應用通過docker運行,監聽11101端口,不對外部開放。
angular應用通過nginx 鏡像運行,監聽11102端口,不對外部開放。
主nginx容器監聽某個域名80端口,配置端口轉發至11101,監聽另一個域名的80端口,配置端口轉發至11102。
這樣對於外部來說就像是直接通過那兩個域名進行訪問一樣。
三個容器運行情況如下所示,.net core應用容器監聽11101端口,ng應用容器監聽11102端口,nginx容器監聽80和443端口
nginx的配置如下。
用的是華為雲的CES,有個小坑,就是localhost總是用不了,得用局域網IP, 我這里配置的就是192.168.1.122這里除了轉發請求外還有兩個點需要注意,Abp.TenantId請求頭中有小數點.對於nginx來說是非法的請求頭,默認是會被過濾掉的,所以需要手動配置關閉過濾,也就是圖中的
ignore_invalid_headers off;
說實話被這個坑困擾了好久,最終還是在abp的github issues中找到了。
還有另一個就是url rewrite的問題,之前部署在iis是安裝了iis 的rewrite模塊,但在nginx中url rewrite是重定向配置,也是找了好久才找到是url和文件路徑匹配。解決這個問題需要修改前端站點的nginx配置
加上標記的那行,表示url和文件路徑匹配。
后兩行是設定index所在路徑。
這樣配置的效果就是http請求轉發到了前端ng站點,https的請求轉發到了.net core的webapi站點。
前端站點每個容器都要進去修改nginx配置文件也很麻煩,既然如此,那當然是改nginx鏡像啦。下一篇見。