当 httpd 被赋予一个错误的端口号时会发生什么?

当 httpd 被赋予一个错误的端口号时会发生什么?

我有一个 httpd.conf 文件,该文件被意外更改,服务器侦听的端口号更改为大于 65535 的数字。当 HTTPD 读取此配置文件时它会做什么?它会回退到端口 80 吗?

答案1

这取决于配置。您可以定义多个端口进行监听,在这种情况下,它会尝试绑定到所有端口。将应用程序启动视为一个多步骤过程。最基本的形式是,该过程如下所示:

  1. 读取配置文件,检查错误
  2. 尝试绑定到指定端口
  3. 监听连接

如果你给它一个不可用但存在的端口,那么 httpd 将到达步骤 2 并失败。该应用程序将无法完全启动,并且会不是端口 80 故障。

如果您提供的是非端口,即文本、负数或大于 65535 的数字,则配置将被视为无效,并且 httpd 将在 1 处死亡。

答案2

一种方法是自己尝试一下,然后使用

网络状态监测
查看 httpd 正在监听哪个端口。

答案3

如果您设置的端口高于 65535,例如 65536,就会出现语法错误“无效地址或端口”。

答案4

很大程度上取决于您所使用的特定服务器软件。

您可能认为软件会因非法端口号而抛出错误,但事实并非如此;有些软件会很乐意接受您提供的任何信息,从而导致非常奇怪的行为。

问题在于:端口号是一个无符号的 16 位值(0 - 65535),在某些情况下,应用程序会接受更大的数字,但只使用低 16 位。这导致了一些令人困惑的情况,启动脚本指定了(例如)90000 的端口,但应用程序却在监听端口 24464(90000 mod 65536 = 24464)

我在 2002 年 2 月的 SysAdmin Magazine 杂志中记录了类似事件“通过取证操作提高可靠性”复制) 理想情况下,这些事情永远不应该发生,但在幼稚的软件和不了解底层网络细节的开发人员之间(IE尽管合法端口范围很广,但仍然需要防范这种“不可能”的事件。我首选的方法是与开发人员合作,确保他们的代码对操作人员友好,但操作人员和开发人员之间的关系往往不太好。

相关内容