如何在 Node.js 中监听 80 端口?

2025 年 5 月 3 日 | 阅读 5 分钟

超文本传输协议 (HTTP) 使用端口 80 作为默认通信端口,为主要的网络浏览业务打开了门户。大多数 Web 服务器监听此端口,允许用户无需在浏览器中指定端口即可访问服务,这对于面向公共互联网的应用程序是必需的。

Web 服务器的核心实际上是 Node.js,因为它特别突出,能够轻松处理许多并发连接,主要以事件驱动和非阻塞的方式。本教程将引导您完成设置一个监听端口 80 的 Node.js 服务器,包括其语法、参数、示例、最佳实践、优点、安全注意事项和实际用例。

语法

要使用 Node.js 监听端口 80,通常需要使用 http 或 https 模块。以下是基本语法

参数

server.listen() 方法接受几个参数

  • 端口:服务器将监听传入连接的端口号。此处为 80。
  • 主机名(可选):特定的 IP 地址或主机名。如果未指定,服务器将接受所有可用 IP 上的连接。
  • 回调(可选):服务器开始监听后执行的函数。

示例及输出

示例 1:基本的 HTTP 服务器监听端口 80

输出

当您在浏览器中导航到 https:// 时,输出将显示

 
Welcome to my server!   

控制台输出

 
Server is running on https://:80   

示例 2:添加用于日志记录的中间件

输出

对 /api 的请求的控制台日志

 
Received a GET request for /api
Server is listening on port 80   

浏览器输出

 
 { "message": "Request received" }   

监听端口 80 的优点

使用 Node.js 监听端口 80 有几个优点,如下所示

  • 标准 HTTP 端口:它是 HTTP 的默认端口;因此,用户无需在 URL 中指定任何端口。
  • 默认端口 80 用于面向公众的服务器,图方便和约定俗成。
  • 客户端兼容性:按照惯例,大多数客户端应用程序(浏览器)期望 HTTP 服务器监听端口 80。
  • 改善用户体验:用户无需在 URL 中使用端口号即可访问默认 HTTP 端口。

用例

  • Web 应用程序托管静态或动态网站以提供内容。
  • API 服务器:它为客户端提供 RESTful API 以在它们之间交换数据。
  • 代理服务器它充当用户和后端服务之间的中介。
  • 物联网应用程序它处理物联网设备的 HTTP 请求。

特殊考虑

  • 根权限:基于 Unix 的系统需要根权限才能监听端口 80。为了避免以 root 身份运行应用程序,您可以使用端口转发或反向代理,如 Nginx 或 Apache。
  • 安全性:确保您的服务器安全,使用 HTTPS 和适当的防火墙规则。监听端口 80 通常会将流量重定向到端口 443 以进行安全通信。
  • 负载均衡器:在部署到生产环境的情况下,端口 80 通常与负载均衡器配合使用,以有效管理传入流量。

安全注意事项

  • 运行特权端口:Unix 系统上的特权端口,特别是低于 1024 的端口(如端口 80),是绑定保留点。在类 Unix 系统上,绑定到这些端口需要提升的权限,而这些权限只能由超级用户授予。然而,以 root 身份运行服务器可能会引入某种危险的漏洞。
  • 使用反向代理:使用 NGINX 或 Apache 将来自端口 80 的请求转发到 Node.js 应用程序正在监听的更高、非特权端口(例如 8080)。
  • 降低权限:以 root 身份运行 Node.js 进程以绑定到端口 80,然后使用 process.setuid() 和 process.setgid() 将权限降低到一个较低权限的用户。

http 模块的关键特性

  • 请求处理:处理传入的客户端请求,包括方法(GET、POST、PUT 等)、标头和有效负载。
  • 响应生成:它使用状态码、标头和正文内容发送适当的响应。
  • 事件驱动架构:利用 Node.js 的非阻塞 I/O 模型,使其在处理并发请求方面非常高效。

Node.js 如何处理请求?

  • 回调执行:传递给 http.createServer() 的回调函数;它会用 req(请求)和 res(响应)对象调用。
  • 响应传输:服务器使用 res 对象生成响应并将其发送给客户端。

示例工作流程

客户端向 http://example.com 发送 GET 请求。之后,请求发送到 Node.js 服务器,该服务器对其进行处理并以 HTTP 状态码 200 OK 和请求的内容作为响应发送回来。

结论

总之,对于简单的情况,设置 Node.js 监听端口 80 会相对容易,因为它基于 http 模块。它为创建 HTTP 应用程序的入口点提供了便利,但同时,它并没有隐藏系统信息、安全性以及性能优化。因此,这种设置将与反向代理、HTTPS 和适当的访问控制相结合。

开发人员可以在 HTTP 端口 80 上的 Node.js 的帮助下创建快速可扩展的应用程序,以处理大量并发连接。但是,对于应用程序开发来说,最重要的是要关注此类配置带来的风险和限制。首先,端口号 80 在许多系统上都是一个特权端口,这使得安全性成为重中之重,因为应用程序必须消耗该端口号。不应允许以 root 权限运行应用程序——可以改用 NGINX 或 Apache 等反向代理。