如何從同一伺服器託管 Web 應用程序和 API,同時將它們分開?
假設我們有 2 個獨立的應用程序,一個 Web Api 應用程序和一個 MVC 應用程序,它們都是用 .NET 4.5 編寫的。如果您要在 IIS 中的主機頭“ <https://www.mymvcapp.com/> ”下託管 MVC 應用程序,是否可以在 IIS 中的主機頭“ https://www. mymvcapp.com/api/ ”?
在 IIS 中執行 2 個應用程序的程序需要分開。我知道託管、自託管和使用 IIS 託管的不同方法。如果可能的話,我想使用 IIS。
另外,如果兩個應用程序(一個 API 和一個 Web 應用程序)都位於單獨的伺服器上,我將如何託管兩個應用程序,以便我可以從中提供 api
http://www.mymvcapp.com/api?
至少有 4 種方法可以做你想做的事。前兩種方法適用於如果您有 1 個 Web 伺服器,並且這兩個應用程序都由執行 IIS 的那個 Web 伺服器提供服務。如果您在負載均衡器後面執行多個 Web 伺服器,只要 API 和網站在同一台伺服器上執行,此方法也適用。
後兩種方法使用所謂的“反向代理”,本質上是一種根據您接收的流量類型將流量從一個伺服器(代理伺服器)路由到多個內部伺服器的方法。這適用於當您在一組伺服器上執行 Web 伺服器並在另一組伺服器上執行 API時。你可以使用任何你想要的反向代理軟體,我提到了 nginx 和 HAProxy,因為我過去都使用過。
執行 IIS 的單個 Web 伺服器
在 IIS 中有兩種方法可以做到這一點:
如果你的物理文件夾結構如下:
c:\sites\mymvcapp c:\sites\mymvcapp\api您可以執行以下操作:
創建子應用程序
創建子應用程序將允許從 訪問您的“API”站點
www.mymvcapp.com/api,而無需進行任何路由更改。要做到這一點:
- 打開 IIS 管理器
- 點擊左側“站點”文件夾樹中的相應站點
- 右鍵點擊
API文件夾- 點擊“轉換為應用程序”
缺點是所有子應用程序都繼承其父應用程序的 Web 配置,如果您在那裡有衝突的設置,您會看到一些執行時怪異(如果它完全有效)。
創建目錄Junction
第二種方法是一種使應用程序保持獨立性的方法;再一次,你不必做任何路由。
假設有兩個文件夾結構:
c:\sites\api c:\sites\mvcapp您可以在 Windows 中設置交匯點。從命令行*:
cd c:\sites mklink /D /J mymvcapp c:\sites\mvcapp cd mymvcapp mklink /D /J api c:\sites\api然後進入 IIS 管理器,並將兩者都轉換為應用程序。這樣,
API將在 中可用\api\,但實際上不會與父級共享其 web.config 設置。多台伺服器
如果您使用 nginx 或 haproxy 作為反向代理,您可以將其設置為將呼叫路由到每個應用程序,具體取決於。
nginx反向代理設置
在您的 nginx.conf 中(最佳實踐是創建一個
sites-enabled符號連結到的 confsites-available,並且您可以在部署時銷毀該符號連結)執行以下操作:location / { proxy_pass http://mymvcapp.com:80 } location /api { proxy_pass http://mymvcapp.com:81 }然後設置正確的 IIS 設置,讓每個站點監聽埠 80 (mymvcapp) 和埠 81 (api)。
HAProxy
acl acl_WEB hdr_beg(host) -i mymvcapp.com acl acl_API path_beg -i /api use_backend API if acl_API use_backend WEB if acl_WEB backend API server web mymvcapp.com:81 backend WEB server web mymvcapp.com:80*我正在從記憶體中發出 Junction 命令;幾個月前我這樣做了,但不是最近,所以如果命令有問題,請告訴我
注意:配置文件並不是完整的配置文件——只是為了顯示反向代理所需的設置。根據您的環境,您可能需要設置其他設置。