在同一臺伺服器上執行 Node Js 和 Apache

Isaac Tony 2023年10月12日
在同一臺伺服器上執行 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

作者: 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