Configurare Apache e Node.js

Mattepuffo's logo
Configurare Apache e Node.js

Configurare Apache e Node.js

Oggi vediamo come configurare Apache per far girare una applicazione Node.js usando sempre la porta 80.

Adesso mi spiego meglio andando per punti; considerate che è un caso reale:

  • sul dominio https://www.sito.it ho un sito che gira con PHP e Wordpress
  • ho caricato la mia applicazione scritta con Node.js ed Express sul server nella sottodirectory api
  • dopo averla caricata e lanciata, l'applicazione è raggiungibile all'url http://www.sito.it:8080; notate che sto usando HTTP e non HTTPS in questo caso ovviamente, in quanto non è configurato per la 8080
  • voglio raggiungere la app all'indirizzo https://www.sito.it/api senza indicare la porta
  • il tutto lasciando il sito principale in funzione

Dobbiamo fare qualche configurazione ad Apache, ma nulla di così difficile.

Dopo ogni operazione vi conviene controllare che il sito sia raggiungibile.

Primva di tutto avviamo due moduli:

# a2enmod proxy
# a2enmod proxy_http
# systemctl restart apache2

Adesso modificate la configurazione del vostro sito; nel mio caso /etc/apache2/sites-enabled/default-ssl.conf:

<IfModule mod_ssl.c>
	<VirtualHost _default_:443>
		ServerAdmin webmaster@localhost
		ServerName www.sito.it
		DocumentRoot /var/www/html

		ErrorLog ${APACHE_LOG_DIR}/error.log
		CustomLog ${APACHE_LOG_DIR}/access.log combined
		SSLEngine on
		SSLCertificateFile	/etc/letsencrypt/live/www.sito.it/fullchain.pem
		SSLCertificateKeyFile /etc/letsencrypt/live/www.sito.it/privkey.pem

		<FilesMatch ".(cgi|shtml|phtml|php)$">
				SSLOptions +StdEnvVars
		</FilesMatch>
		<Directory /usr/lib/cgi-bin>
				SSLOptions +StdEnvVars
		</Directory>

		# INIZIO AGGIUNTE
		ProxyRequests Off
 		ProxyPreserveHost On
 		ProxyVia Full
 		<Proxy *>
 			Require all granted
 		</Proxy>
		<Location /api>
			ProxyPass http://127.0.0.1:8080
			ProxyPassReverse http://127.0.0.1:8080
 		</Location>
		# INIZIO AGGIUNTE
		
		Include /etc/letsencrypt/options-ssl-apache.conf
	</VirtualHost>
</IfModule>

Vi ho segnalato quello che ho aggiunto; in sostanza si tratte delle impostazione relative al ProxyPass.

Riavviate di nuovo Apache:

# systemctl restart apache2

Adesso dovreste essere in grado di raggiungere sia il sito normale che l'applicazione Express, rispettivamente a questi url:

  • https://www.sito.it
  • https://www.sito.it/api
  • https://www.sito.it/api/PARAM_ID

Questa la mia applicazione Express:

const express = require('express');
const MongoClient = require('mongodb').MongoClient;
const ObjectID = require('mongodb').ObjectID;

const app = express();
const cors = require('cors');
const uri = "mongodb://HOST:27017";
const client = new MongoClient(uri, {useNewUrlParser: true, useUnifiedTopology: true});
const port = 8080;

app.use(cors());

app.get('/api', function (request, response, next) {
	// DO STUFF
);

app.get('/api/:id', function (request, response, next) {
	// DO STUFF
);

app.listen(port);

Enjoy!


Condividi

Commentami!