(如果此内容发布在错误的论坛上,请原谅。我们不知道将其发布到哪里。)
我们有一个 ASP.NET Web API 单页应用程序 - 一个在 IIS 中运行的基于浏览器的应用程序,用于提供 HTML5/CSS3/JavaScript,它仅与 ASP.NET Web API 端点通信以访问数据库和传输 JSON 数据。在我们的开发环境中,一切都运行良好 - 也就是说,我们有一个 Visual Studio 解决方案,其中包含一个 ASP.NET Web API 项目和两个用于数据访问的类库项目。在开发框中进行开发和测试时,使用 IIS Express 到 localhost:port 来运行站点并访问 Web API,一切都很好。
现在我们需要将其移至生产环境(但我们遇到了问题 - 或者只是不明白需要做什么)。
生产环境全部是内部的(不会在公共互联网上暴露任何内容)。有两个域。一个域是企业域,所有用户都可以正常登录。另一个域是进程域,包含我们的应用和 Web API 需要访问的 SQL Server 实例。
IT 人员希望在两个域之间放置一个 DMZ 来容纳 IIS 应用程序,并阻止公司域上的用户直接访问流程域。所以,我猜他们想要的是:
公司域(最终用户)<–> 防火墙(打开端口 80)<–> DMZ(运行 IIS 的 Web 服务器)<–> 防火墙(打开端口 80 或 1433????)<–> 进程域(用于 Web API 和 SQL Server 的 IIS)
我们是开发人员,并不真正了解所有的网络方面,所以我们想知道如何在这种情况下部署我们的浏览器/ Web API 应用程序。
- 我们是否需要分解我们的应用程序,以便所有客户端代码(HTML5 / CSS3 / JavaScript /图像/等)都位于 DMZ 中的 IIS 服务器上,而 Web API 安装在进程域中的服务器上?
- 或者,整个应用程序(客户端代码和 Web API)是否一起保留在 DMZ 中的 IIS 服务器上,然后以某种方式访问 SQL Server 实例来获取数据?
- 从 DMZ 中的 IIS 服务器和应用程序,您是否只需通过转到“http://服务器/应用程序名称/api/getitmes“?
- 在 DMZ 和进程域之间的第二个防火墙中,由于 Web API 是 HTTP 端点,您是否必须打开端口 1433 还是仅打开端口 80?
- 或者,是否存在更好的部署方式(即,如何将全部用 HTML5 和 JavaScript 编写的 ASP.NET Web API 单页应用程序部署到生产环境?)?
我肯定还有其他问题,但我们先从这些问题开始。谢谢!!!
(注意:服务器是Win2k8 R2、SQL Server 2k8 R2和IIS 7.5。)
答案1
我可以理解您的 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 查询。
简而言之,如下:
总结:您应该在客户端和两个 IIS 实例(顺便说一下,它们可以是同一台服务器)之间设置防火墙,以允许 HTTP 和 HTTPS 流量。然后在该 Web 服务器的另一个接口上,您可以连接到进程域,并且只允许 SQL 流量进入(1433 和 1434)。
希望有所帮助。