All Tutorials

Your One-Stop Destination for Learning and Growth

How to Run Node.js on an Apache Server

Node.js is a powerful JavaScript runtime environment that is widely used for building scalable and high-performance applications. However, it is designed to run in the V8 JavaScript engine, which is different from Apache's HTTP server. In this tutorial, we will explore how to configure your Apache server to handle Node.js requests.

Prerequisites

Before we begin, ensure that you have the following prerequisites in place:

  • A working Node.js installation on your system
  • Basic knowledge of the command line interface (CLI)
  • An Apache HTTP Server installed and configured

Step 1: Create a new Node.js application

First, create a simple Node.js application that will serve as an example for this tutorial. You can use any code editor or IDE of your choice to create a new file named app.js with the following content:

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Hello World\n');
});

server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
});

Save the file and run it using the following command:

node app.js

Step 2: Install the Node.js reverse proxy module - 'reverse-proxy'

To enable Apache to act as a reverse proxy for our Node.js application, we will use the reverse-proxy module. First, let's install it using npm:

npm install -g reverse-proxy

Step 3: Configure the Apache server

Create a new file named .htaccess in your project root directory and add the following configuration:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ - [P,CGI,PASS,QSA,W:app.js]

Next, create a new file named proxy.conf in the Apache's conf/ directory and add the following configuration:

ProxyPreserveHost On
<Location />
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/
</Location>

Don't forget to restart your Apache server for the changes to take effect.

Step 4: Testing the setup

Open your web browser and navigate to http://your-website.com/. You should now see the "Hello World" message displayed in your browser, indicating that Node.js is being served through Apache.

Congratulations! You have successfully configured your Apache server to act as a reverse proxy for a Node.js application. This setup can be further extended by handling dynamic routes or integrating other middleware such as SSL certificates and authentication.

Published October, 2018