我们有一个 ASP.NET Web API 服务器,它为 SQL Server 数据驱动的网站提供服务。该 API 使用 JSON 将数据从 SQL Server 传输到前端。
我们需要将其移至内部生产环境(任何内容都不会暴露在公共互联网上),但我们遇到了问题 - 或者只是不明白需要做什么。
有两个域:
- 企业域 – 所有用户正常登录的地方。
- 流程域 - 包含 Web API 需要访问的数据库。
IT 人员希望在两个域之间放置一个 DMZ 来容纳 IIS 应用程序,并阻止公司域上的用户直接访问流程域。
理想的配置是:
corp domain (end users) <–> firewall (open port 80) <–> DMZ (web server running IIS) <–> firewall (open port 80 or 1433????) <–> process domain (IIS for Web API and SQL Server)
我们确实不明白如何在这种情况下部署我们的浏览器/Web API 应用程序。
- 我们是否需要拆分我们的应用程序,以便所有客户端代码都位于 DMZ 中的 IIS 服务器上,而 Web API 安装在进程域中的服务器上?
- 整个应用程序(客户端代码和 Web API)是否都保留在 DMZ 中的 IIS 服务器上,然后以某种方式访问 SQL Server 实例来获取数据?
- 从 DMZ 中的 IIS 服务器和应用程序,您是否可以通过以下方式简单地访问进程域中服务器上的 Web API
http://server/appname/api/getitmes
? - 在 DMZ 和进程域之间的第二个防火墙中,由于 Web API 是 HTTP 端点,您是否必须打开端口 1433 还是仅打开端口 80?
- 或者,是否存在更好的部署方式(即,如何将全部用 HTML5 和 JavaScript 编写的 ASP.NET Web API 单页应用程序部署到生产环境?)?
注意:服务器是 Win2k8 R2、SQL Server 2k8 R2 和 IIS 7.5。
答案1
一般来说,您的代码将部署在 IIS 服务器上。这意味着您的“web api”和网站。
坦率地说,我认为您在这里使用的术语不正确,因为您似乎在说您有一个网站,该网站与 Web 服务进行通信,然后该 Web 服务与 SQL 服务器通信以访问数据。
Web 服务和网站将位于 DMZ 之外的一个或多个 Web 服务器上。数据库服务器将位于 DMZ 内。应将 DMZ 配置为仅允许来自 Web 服务器的请求发送到数据库服务器。通常通过端口 1433 或 SQL 配置使用的任何端口。
在 DMZ 之外,应该设置防火墙来限制对端口 80 或 443 上的 Web 服务器的访问。如果不是 SSL,则为 80;如果启用了 SSL,则为 443。