是什么使 PC 能够成为 Web 服务器,又是什么使其不能?

Vin*_*rdo 44 networking webserver

我有一个关于将计算机用作 Web 服务器的问题。为什么某台电脑可以作为网络服务器?什么特性使它能够成为一个网络服务器?有没有电脑不能作为网络服务器的情况?

dav*_*dgo 96

几乎任何计算机都可以用作 [web] 服务器,前提是它可以连接到网络,并且可以运行 Web 服务器软件。由于 Web 服务器可以非常简单,并且有免费和开源的 Web 服务器,因此在实践中,任何设备都可以充当 Web 服务器。

更大的问题是网络方面。为了让系统充当服务器,其他机器需要能够访问它。如果只是在局域网中使用,则没有问题;但是,如果要从更广泛的 Internet 使用它,则需要将数据路由到它。这需要与服务器关联的静态 IP 地址(或通过路由器转发的端口),或者可以将域名/子域映射到不断变化的动态 IP 地址的外部服务。

(FWIW,您可以购买10 美元的计算机,它可以充当基本的 Web 服务器。)

当然,虽然任何设备都可以充当网络服务器,但网站的功能可能会千差万别,便宜的设备(或慢速连接)可能无法满足特定网站的需求。

我注意到上面的所有内容都是关于 Web 服务器的 - 但对于几乎任何类型的服务器都可以这样说。

  • 您家中可能已经有几台 Web 服务器:您的路由器/接入点、打印机和所有其他类型的可配置家庭自动化小工具,如智能电表、IP 摄像头、VoIP 电话、可编程恒温器、电视。较小的让您了解需要多少硬件。另一条评论:网络对 Web 服务器不是严格要求——拥有一台服务器只为用户提供页面*在同一台机器上*是非常有意义的。 (15认同)
  • 是和否。我已经在没有 ecc ram 的情况下 24/7 全天候运行大量系统,以及大多数家庭/小型企业路由器 - 它们是 wenb 服务器,并且在没有 bsod 的情况下也能非常可靠地运行。当然,BSOD 等价物在 Windows 世界之外并不常见。 (11认同)
  • @davidgo Bugcheck 错误在 Windows 世界中也不常见,除非您的硬件或驱动程序出现故障。这会导致任何操作系统出现类似问题。丢失了 Windows 和 Linux 上视频驱动程序相关问题的数量。 (9认同)
  • @davidgo BSOD 只是一种故障保护,本身不是问题。这是防止偷偷摸摸的代码/数据损坏和硬件损坏的最后尝试。在任何情况下,轶事证据在这样的事情中完全没有用 - 很有可能你永远不会遇到明显的问题,或者你会错误地归咎于它,并且有大量的环境因素导致它或多或少(温度、纬度、电磁噪声、电网质量、系统负载、给定组件的可靠性)。ECC RAM 的成本和价值等是商业决策。 (7认同)
  • 另一个问题是廉价设备可能不如“真实”服务器可靠,因为它们的组件没有经过长时间运行认证,而且它们的内存没有任何方法来防止像 ECC RAM 那样的位腐烂。我看到我的同事离开他们的电脑几个月并最终陷入 BSOD (2认同)

Jou*_*eek 25

这一点都不棘手。这仅取决于您对“网络服务器”的定义。

完全有可能在像微控制器这样简单的设备上运行“网络服务器”。

让我们考虑一下最小的 Web 服务器需要做什么。它需要输出一些文本 - 甚至不一定是 HTML 到客户端。它需要知道一个请求是一个请求,并做出适当的响应。如果您的“客户端”是本地的,您甚至不需要网络连接。这将是一个完全没有意义的网络服务器。

它相当于其中之一的 Web 服务器。

在此处输入图片说明

为客户端添加网络连接(以太网很好,但没有技术原因您无法连接到在 wifi 上运行的 Web 服务器)并且能够从客户端路由会更好。

一个 5 美元的ESP8266——一个便宜、最小的带 wifi 的微控制器可以处理大部分内容,甚至可能是基本的动态内容

我使用类似的东西来使用 Python 进行快速文件共享。仍然完全有可能在微控制器上编写这样的东西,甚至在手机上运行它。

静态内容很无聊。添加动态语言,您需要开始考虑更重的权重系统。运行 Linux 或 Windows 的东西很好。

在这一点上,您指的是消费者路由器、在 UI 上使用网页的小型应用程序等等。

Web 服务器甚至不是一个复杂的问题,可以用五行 bash编写并在 Linux 上运行。现在厄运……但是任何可以运行厄运的系统都可以运行网络服务器。

一个良好的网络服务器建立能够处理给定负载是有点棘手。

  • 甚至可以将一些 TTL 芯片焊接在一起并运行网络服务器。[详情请参阅此网页](http://www.homebrewcpu.com/) (11认同)
  • 这大致就像在说“甚至可以用螺栓将一些钢材固定在一起并建造埃菲尔铁塔。这太酷了 (7认同)
  • @djsmiley2k Eclipse 帮助使用本地网络服务器。因为爪哇。 (5认同)
  • raspi 的功能可能比 2000 年 99.9% 的商业 Web 服务器都要高。那时人们已经在做大量动态的事情了。 (2认同)

小智 11

最低限度

从字面上看,任何具有以下条件的计算机都可以成为 Web 服务器:

  • 网络连接
  • 一个非常简单的网络服务器应用程序,像这样

但这就足够了吗?现在,这是一个棘手的问题。

服务内网

让计算机成为网络服务器,为整个社区(例如学校、公司、博物馆)提供现代网页或网络应用程序:

  • 能够同时响应多台计算机的硬件。也许一台运行 Linux 或 Windows XP 的旧电脑就可以了。
  • 具有足够带宽的高速网络连接,例如 1 Gbit/sec 以太网或 802.11g Wi-Fi。
  • 一个好的 Web 服务器应用程序,如IISApacheNginx其他。(令人惊讶的是,这三个是免费的。)

但这只是小型操作的最低要求。当您的操作变得更大时(即您获得更重的流量并提供复杂的 Web 应用程序而不是静态页面),您的需求就会增长。您最终将需要:

  • 服务器级硬件,例如具有多个 Xeon CPU 和数百 GB RAM 的机架式服务器
  • 光纤网络

服务外面的世界

要利用互联网基础设施为全世界服务,您需要:

没有这些,您所拥有的只是一个潜在的Web 服务器。

  • 不同意这些评论 - 路由器是网络服务器(以及其他东西)。根据评论的逻辑,没有网络服务器这样的东西,因为任何这样的系统都有其他功能。 (9认同)
  • 大量的 CPU 和其他资源需求更多地与 Web 应用程序和动态 HTML 生成语言有关 - 例如 PHP,一种常见但(特别是如果按照通常的方式设置)这种语言非常低效 - 而不是 Web 服务。如果有人打扰的话,可以制作一个带有 16MB RAM 的 33MHz 80486 来处理大量静态页面。 (5认同)

小智 8

编程/软件视角:

能够侦听网络适配器上的端口 80 的程序。它在您拥有的操作系​​统上运行。并且可以根据 HTTP 定义处理请求。

可以从同一网络中的每台计算机访问侦听任何端口的程序。理想情况下,它应该是一个已知的标准端口(HTML 服务器为 80 和 8080;自定义应用程序选择 1024 以上)。在您进行开发的同一台计算机上运行网络可达程序的开发甚至是常见的做法。

如果您可以通过 localhost 访问它,那么您可以从同一网络中的任何地方访问它,并且可以从任何其他地方访问这台机器及其网络适配器。

警告:默认安装中的许多一体式开发环境会限制对 Localhost 的访问。毕竟,您不希望从 Internet 访问您的管理工具。

硬件:

硬件从“运行 XP 或 Linux 的 10 年前的计算机”开始,到“128 核,2 TiB RAM 和 256 TiB SSD”结束,数据库也在不同的服务器上运行. Web 应用程序往往具有令人愉悦的可并行性,因此您可以/必须使用这些服务器的集群进行更多操作。和 Geocast。和分布式设计。还有很多其他的东西。这完全取决于我们所谈论的规模。

您可能遇到的最简单的 Web 服务器是您正在使用的路由器,顺便说一句。它们都运行一个用于配置目的的 Web 服务器,托管在 Linux 上(执行所有 DHCP 和 NAT 工作)。

联网:

拥有来自其他网络的路径——包括互联网上的任何地方——现在是一个完全不同的故事,比编写应用程序更难。在路由器的 NAT 和运营商级 NAT 之间,这件事变得非常困难。

  • 您始终可以选择从您的 ISP 购买固定 IP 地址,即使是私人。正如它所表明的那样,这可能会增加额外费用。DNS 条目将是一种生活质量。
  • 回到运营商级 NAT之前,您可以使用动态 IP 地址和 DynDNS 服务。但是使用运营商级 NAT,您现在需要克服另一个无法控制的 NAT - 也许吧。取决于您的提供商。
  • 穿越一种 NAT 的最终解决方案,任意层数是TCP/IP 打孔。所有 VPN 解决方案都使用它。Skype、TeamViewer 和所有其他软件也是如此。问题是:为了进行 TCP/IP 打孔,您需要一台已经可以在 Internet 上访问的服务器。
  • 如果是小规模(1 到 10 个端点),通常,最简单的方法是将 VPN 连接到具有服务器的网络中。大多数路由器都支持它。

  • “那台运行 Linux 的 10 年前的计算机”。考虑到网络时代,我们可以安全地将其推后。我个人记得大约 20 年前在原始英特尔 80386 上运行网络服务器。 (2认同)