如何將基於 ASP.NET Web API 和瀏覽器的應用程序部署到生產環境
(如果這是在錯誤的論壇上發布的,請原諒。我們不知道確切的發布位置。)
我們有一個 ASP.NET Web API 單頁應用程序——一個在 IIS 中執行的基於瀏覽器的應用程序,用於提供 HTML5/CSS3/JavaScript,它與 ASP.NET Web API 端點對話只是為了訪問數據庫和傳輸 JSON 數據。在我們的開發環境中一切都執行良好——也就是說,我們有一個帶有 ASP.NET Web API 項目的 Visual Studio 解決方案和兩個用於數據訪問的類庫項目。在開發盒上進行開發和測試時,使用 IIS Express 到 localhost:port 來執行站點並訪問 Web API,一切都很好。
現在我們需要將其移至生產環境(我們遇到了問題——或者只是不了解需要做什麼)。
生產環境都是內部的(不會在公共網際網路上暴露任何東西)。有兩個域。一個域,即公司域,是所有使用者正常登錄的地方。另一個域(程序域)包含我們的應用程序和 Web API 需要訪問的 SQL Server 實例。
IT 人員希望在兩個域之間放置一個 DMZ 以容納 IIS 應用程序並保護公司域上的使用者無法直接訪問程序域。所以,我猜他們想要的是:
corp 域(最終使用者)<–> 防火牆(開放埠 80)<–> DMZ(執行 IIS 的 Web 伺服器)<–> 防火牆(開放埠 80 或 1433????)<–> 程序域(用於 Web API 的 IIS和 SQL 伺服器)
我們是開發人員,並不真正了解所有網路方面,所以我們想知道如何在這種情況下部署我們的瀏覽器/Web API 應用程序。
- 我們是否需要分解我們的應用程序,以便所有客戶端程式碼(HTML5/CSS3/JavaScript/images/etc.)都在 DMZ 中的 IIS 伺服器上,而 Web API 安裝在程序域中的伺服器上?
- 或者,整個應用程序(客戶端程式碼和 Web API)是否一起保存在 DMZ 中的 IIS 伺服器上,然後以某種方式訪問 SQL Server 實例以獲取數據?
- 從 DMZ 中的 IIS 伺服器和應用程序,您是否只需通過“ http://server/appname/api/getitmes ”訪問程序域中伺服器上的 Web API?
- 在 DMZ 和程序域之間的第二個防火牆中,您必須打開埠 1433 還是只打開埠 80,因為 Web API 是 HTTP 端點?
- 或者,是否有更好的部署方式(即,如何將全部用 HTML5 和 JavaScript 編寫的 ASP.NET Web API 單頁應用程序部署到生產環境?)?
我敢肯定還有其他問題,但我們將從這些開始。謝謝!!!
(注意:伺服器是 Win2k8 R2、SQL Server 2k8 R2 和 IIS 7.5。)
我可以理解您的 IT 團隊想要解決這個問題,但他們似乎也不完全了解此設置的工作原理。我不會過多介紹,但本質上,您將與伺服器交換到
process
域的唯一流量是標準 HTTP 流量(假設您使用 Web API 進行 REST 呼叫)基本上你會得到以下結果:
Initial Request SPA Web Server ---> Client (Running SPA) | | - REST Call Firewall -> | - Port 80 Only Web API Server | | - SQL (1433) .NET Connection/Data Source Firewall -> | - Port 1433 / 1434 Backend SQL Servers
請記住,對於 SPA,客戶端與 SPA Web 伺服器的唯一通信是獲取 HTML、JS 和 CSS 的初始請求。之後(取決於您如何編寫)它應該直接向 Web API 伺服器發出 REST 呼叫。
Web API 伺服器從那裡直接向數據庫發出 SQL 查詢。
所以它的長短如下:
TL;DR:您應該在客戶端和兩個 IIS 實例(它們可以是同一台伺服器)之間設置防火牆,以允許/或 HTTP 和 HTTPS 流量。然後在該 Web 伺服器的另一個介面上,您連接到 Process 域,並且只允許 SQL 流量進入(1433 和 1434)。
希望有幫助。