在同一台服务器上运行 Node Js 和 Apache

Isaac Tony 2022年5月13日
在同一台服务器上运行 Node Js 和 Apache

Apache 是最流行的 Web 服务器之一,它允许我们处理客户端请求并通过 HTTP 提供内容。Apache 是开源的,易于与 MYSQL 和 PHP 等其他技术一起使用。

默认情况下,Apache 服务器配置为侦听端口。但是,它也可以使用 TLS 配置侦听端口 443

Node JS 是一个 JavaScript 运行时,它在 JavaScript 代码中创建服务器端应用程序。Node JS 还使我们能够创建简单的 HTTP 服务器,我们可以使用这些服务器通过各种 HTTP 方法提供静态内容。

Node JS 中的 HTTP 模块允许我们创建一个服务器来监听特定的端口号并响应客户端。下面是我们如何使用 HTTP 模块提供的 HTTP.createServer() 方法创建一个简单的服务器。

const http = require('http');

const requestListener = function (req, res) {
  res.writeHead(200);
  res.end('Hello, World!');
}

const server = http.createServer(requestListener);
server.listen(8080);

在上面的示例中,我们创建了一个接受请求和响应对象作为参数的函数。响应对象返回一个 200 response 代码和一个带有 Hello world 文本的简单有效负载。

最后,我们还使用 HTTP.createServer() 方法创建了一个服务器,该方法在发出请求时调用 requestListener 对象。使用 listen() 方法,我们可以让服务器监听 端口 8080

我们无法处理相同的请求,因为 Node JS 服务器和 Apache 都配置为在不同的端口上运行。尽管我们可以更改端口号并在不同的端口号上运行,但计算机被设计为只有一个进程在一个端口上侦听,而不是更多。

但是,我们可以选择让 Apache 服务器作为反向代理服务器运行,并让 Node JS 服务器单独负责服务客户端请求。代理服务器是用于将请求定向到不同服务器的中间服务器。

反向代理服务器通常位于防火墙后面,通常用于负载平衡,通过缓存和压缩入站数据提供加速,并使用 SSL 加密提供额外的安全性。

首先,我们将首先创建一个简单的 Node JS 服务器,侦听端口 8080,例如我们之前创建的那个。

const http = require('http');

const requestListener = function (req, res) {
  res.writeHead(200);
  res.end('Hello, World!');
}

const server = http.createServer(requestListener);
server.listen(8080);

我在我的代码中使用了 index.js 作为主文件。但是,你可以随意命名。

我将运行以下命令来启动并运行服务器。

node index.js

要查看来自服务器的响应,我将导航到 http://localhost:8080/

在同一台服务器上运行节点 js 和 apache

我们将使用 Apache httpd.conf 中的 ProxyPass 指令将特定 URL 上的所有请求通过管道传输到我们的 Node.JS 应用程序。

这种方法允许我们通过使本地服务器充当代理来将远程服务器映射到本地服务器。在这种情况下,本地服务器称为反向代理或网关

但是,我们首先需要从 Apache Friends 下载并安装 XAMPP 才能开始。XAMPP 是一个跨平台的 Web 服务器解决方案,主要由 MariaDB 和 Apache HTTP 服务器组成。

在同一台服务器上运行节点 js 和 apache 2

现在 XAMPP 已安装,打开 XAMPP 控制面板并通过单击 Start 启动 Apache 服务。然后,单击 Admin 按钮后的 Config 按钮并选择 Apache httpd.conf 选项。

在同一台服务器上运行节点 js 和 apache 3

它将打开一个记事本文档。主要的 Apache HTTP 服务器配置文件包含为服务器提供指令的配置指令。

要将我们的 Node JS 服务器映射到 Apache 服务器,我们将在开头添加 URL /isaactonyloi http://localhost:8080/ 和 ProxyPass 指令,即服务器根 URL,如下所示。不要忘记保存。

在同一台服务器上运行 node js 和 apache 4

最后,我们必须在 Dynamic shared 对象下启用同一文档下的两个模块。

我们将启用两个对象,即 proxy_http_module modules/mod_proxy_http.soproxy_module modules/mod_proxy.so,只需删除注释符号 # 并让它们出现如下所示。

在同一台服务器上运行 node js 和 apache 5

你可能会发现 proxy_module modules/mod_proxy. 已启用。为了使更改生效,我们需要保存它们并通过单击停止按钮并在控制面板中再次单击开始按钮来重新启动我们的 Apache 服务器。

现在要使用 Apache HTTP 服务器作为代理访问来访问来自 Node JS 服务器的响应,请使用 URL http://localhost/isaactonyloi。响应应如下所示。

在同一台服务器上运行节点 js 和 apache 6

Author: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn