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


43

我对使用计算机作为网络服务器有疑问。为什么某台计算机可以作为Web服务器?哪些功能使其可以成为Web服务器?电脑无法充当网络服务器吗?


网卡。
el.pescado

1
我见过的最小的是Apacer制造的wifi SD卡。它具有4MB的ram并运行linux,并且可以在摄像头中响应Web请求并传输图像。
user3528438

@ el.pescado除非客户端在同一主机上。
德米特里·格里戈里耶夫

Answers:


96

只要可以连接到网络并且可以运行Web服务器软件,几乎任何计算机都可以用作[Web]服务器。由于Web服务器非常简单,并且有免费和开源的Web服务器,实际上,任何设备都可以充当Web服务器。

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

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

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

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


2
另一个问题是便宜的设备可能不如“真实”服务器可靠,因为它们的组件没有经过认证可以在很长时间内运行,并且它们的内存没有任何防止ECC RAM等位腐烂的手段。我见过我的同事离开他们的计算机好几个月了,最终陷入BSOD
phuclv

11
是的,没有。我已经运行了很多没有ecc ram的24/7系统,并且大多数家用/小型企业路由器-都是wenb服务器,而且运行可靠而没有bsod。当然,BSOD等效项在Windows世界之外并不普遍。
大卫

9
@davidgo Bugcheck错误在Windows世界中也不常见,除非您的硬件或驱动程序失败。这会导致任何操作系统出现类似问题。Windows和Linux上与视频驱动程序相关的问题数已丢失。
鲍勃(Bob)

7
@davidgo BSOD只是一种故障保护,它本身不是问题。这是防止恶意代码/数据损坏和硬件损坏的最后尝试。在任何情况下,轶事证据在这种情况下都是完全没有用的-您很有可能永远不会遇到与此相关的明显问题,否则您会误认为它,并且有大量的环境因素使之成为现实。或多或少的可能性(温度,纬度,电磁噪声,电网质量,系统负载,给定组件的可靠性)。ECC RAM的成本和价值,这是业务决策。
卢安

15
您可能已经在家中拥有一些Web服务器:路由器/接入点,打印机以及所有其他可配置的家庭自动化小工具,例如智能电表,IP摄像机,VoIP电话,可编程恒温器,电视。较小的那些使您了解需要多少硬件。另一个要点是:网络不是Web服务器的严格要求-拥有一台仅向同一台计算机上的用户提供页面的服务器是很有意义的。
彼得-恢复莫妮卡

25

一点也不难。它仅取决于您对“ Web服务器”的定义。

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

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

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

在此处输入图片说明

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

售价5美元的ESP8266 –具有wifi的廉价,最小限度的微控制器可以处理其中的大部分内容,甚至可以处理基本的动态内容

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

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

至此,您正在谈论消费类路由器,在UI上使用网页的小型应用程序等等。

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

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


11
甚至可以将一些TTL芯片焊接在一起并运行Web服务器。有关详细信息,请参见此页面
Josef

7
大概就像在说:“甚至有可能用螺栓固定在一起并建造埃菲尔铁塔。这太酷了
Journeyman Geek

1
有趣的是,您的“无意义”网络服务器正是某些产品用于某些产品的帮助方式:)-我不记得例子了,但是至少有一种情况下,该服务在服务器上运行(不仅仅是呈现的html页面)由浏览器)和随后出现的问题(打开防火墙后,我的帮助页面无法加载!)。
djsmiley2k-CoW

5
@ djsmiley2k Eclipse帮助使用本地Web服务器。因为Java。
user253751 '17

2
raspi的功能要比2000年的99.9%的商用Web服务器高。而那时人们已经在做大量动态工作。
rackandboneman

11

最低裸机

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

  • 网络连接
  • 一个非常简单的Web服务器应用程序,例如

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

服务内联网

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

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

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

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

为外界服务

要利用Internet基础结构为全世界服务,您将需要:

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


._。我认为一个raspi绝对是最低限度的,而且简直太糟糕了。还值得记住的是,许多东西都使用网页作为UI。例如,您的路由器具有不是 Web服务器。
Journeyman Geek

9
完全不同意这些评论-路由器就是Web服务器(以及其他东西)。根据评论的逻辑,不存在Web服务器之类的东西,因为任何此类系统都具有其他功能。
大卫,

5
大量的CPU和其他资源需求更多地是关于Web应用程序和动态HTML生成语言(例如,PHP,这是一种通用的语言,但是(尤其是按通常的方式进行设置)这种语言效率极低),而不是Web服务。如果有人麻烦的话,可以制造具有16MB RAM的33MHz 80486来处理大量的静态页面。
rackandboneman

@rackandboneman很好。我将阐明“如果您的业务规模更大”的含义,以解决您的担忧。

@rackandboneman不仅可以“处理”,而且可以“经常”处理。
jwg

8

编程/软件角度:

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

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

如果可以通过本地主机访问它,则可以从同一网络中的任何位置访问它,并且可以从其他任何地方访问此计算机及其网络适配器。

注意:默认安装中的许多多合一开发环境都限制了对Localhost的访问。毕竟,您不希望您的管理工具可从Internet访问。

硬件:

硬件始于“运行XP或Linux的已有10年历史的计算机”,并终止于“ 128核,其中有2个TiB RAM和256 TiB的SSD突袭”,并且数据库也在不同的服务器上运行。Web应用程序往往具有可并行性,因此您可以/必须通过这些服务器的群集来进一步提高它的性能。和地理广播。并进行分布式设计。还有很多其他的东西。这完全取决于我们所讨论的规模。

您可能会遇到的最简单的Web服务器是您使用的路由器,顺便说一句。他们全都运行Web服务器以进行配置,并托管在Linux上(这完成所有DHCP和NAT工作)。

联网:

现在有了与其他网络(包括Internet上的任何地方)之间的路径,是一个完全不同的故事,而且比对应用程序进行编程更难。在路由器的NAT和运营商级NAT之间,这些东西变得非常难。

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

2
“那台运行Linux的10年历史的计算机”。考虑到网络的年代,我们可以放心地将其推后。我个人还记得大约20年前在原始Intel 80386上运行Web服务器。
MSalters

@MSalters你可以比这低得多。我今天找不到它,但是几年前,我遇到了一个Shell脚本/ CGI Web服务器,该服务器可以在低端(如moto 68k)的硬件上运行。15-20年前,它在嵌入式领域显然比较流行。
丹·尼利

3

如果您手头上装有Python的任何类型的计算机(PC,便携式计算机,智能手机,raspberryPI ...),请键入:

$ python -m SimpleHTTPServer

或者,如果您安装了Node.js:

$ npm install http-server -g
$ http-server

恭喜,您有一个Web服务器!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.