Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Installare un server HTTP/2 su Ubuntu Server

Guida all'installazione di un server HTTP/2 su Ubuntu Server, sfruttando opportunamente Apache ed il modulo nghttpx.
Guida all'installazione di un server HTTP/2 su Ubuntu Server, sfruttando opportunamente Apache ed il modulo nghttpx.
Link copiato negli appunti

Una volta scaricata la ISO di Ubuntu Server 14.04 dal sito ufficiale, procediamo all’installazione. Per semplicità, accettiamo tutte le impostazioni di default che ci vengono proposte, con due eccezioni:

Figura 1. Scelta dei software da installare (click per ingrandire)

Scelta dei software da installare

Selezionando i software in figura, saremo sicuri di installare Apache, PHP e MySQL, che ci serviranno per i passi successivi.

Figura 2. Configurazione degli aggiornamenti automatici (click per ingrandire)

Configurazione degli aggiornamenti automatici

Poiché si tratta di un server, si ritiene opportuno installare automaticamente gli aggiornamenti.

Installazione del server HTTP/2

Per prima cosa è necessario installare alcune dipendenze.

$ sudo apt-get install build-essential autotools-devlibtoolpkg-config \
			zlib1g-dev libcunit1-dev libssl-dev libxml2-dev libev-devlibevent-devlibjansson-dev \
			libjemalloc-devcython python3.4-dev gitlibboost-devlibboost-thread-dev apache2-dev

Spdylay

Se vogliamo che nghttpx funga anche da proxy per SPDY, è necessario installare un’apposita libreria di supporto, chiamata spdylay, sviluppata da Tatsuhiro Tsujikawa. Per installarla è sufficiente eseguire i comandi che seguono:

$ git clone https://github.com/tatsuhiro-t/spdylay
			$ cd spdylay
			$ autoreconf -i
			$ automake
			$ autoconf
			$ ./configure –prefix=/usr/local
			$ make
			$ sudo make install
			$ sudo ldconfig

Nghttp2

Nghttp2 è la libreria C che utilizzeremo per fornire il supporto al nuovo protocollo, creata anch’essa da Tatsuhiro Tsujikawa. Per compilarla ed installarla occorre eseguire i seguenti comandi:

git clone https://github.com/tatsuhiro-t/nghttp2
			$ cd nghttp2
			$ autoreconf -i
			$ automake
			$ autoconf
			$ ./configure –enable-asio-lib –prefix=/usr/local
			$ make
			$ sudo make install
			$ sudo ldconfig

Configurazione di nghttpx

Una volta installato nghttpx, è possibile procedere alla configurazione del proxy. Sebbene sia possibile utilizzarlo in maniera interattiva, nghttpx può funzionare in modalità daemon, restando in background in attesa di richieste da soddisfare.

Per eseguire nghttpx in quest’ultima modalità è necessario:

  • creare un utente non privilegiato nghttpx, dedicato e con gli accessi disabilitati;
  • creare un file di configurazione, /usr/local/etc/nghttpx/nghttpx.conf;
  • creare un job file per Upstart, /etc/init/nghttpx.conf, per la gestione del ciclo di vita del daemon.

Possiamo creare l’utente nghttpx con i comandi seguenti:

$ sudo useradd nghttpx
			$ sudo passwd –l nghttpx

Il file di configurazione di nghttpx può essere così creato:

sudo nano /etc/init/nghttpx.conf

I parametri usati per questa guida sono i seguenti:

#
			# Configuration file for nghttpx.
			#
			# * Line staring '#' is treated as comment.
			#
			# * The option name in the configuration file is the long command-line
			# option name with leading '--' stripped (e.g., frontend). Put '='
			# between option name and value. Don't put extra leading or trailing
			# spaces.
			#
			# * The options which do not take argument in the command-line *take*
			# argument in the configuration file. Specify 'yes' as argument
			# (e.g., http2-proxy=yes). If other string is given, it disables the
			# option.
			#
			# * To specify private key and certificate file, use private-key-file
			# and certificate-file. See the examples below.
			#
			# * conf option cannot be used in the configuration file. It will be
			# ignored.
			#
			# Examples:
			#
			frontend=0.0.0.0,3000
			backend=127.0.0.1,80
			private-key-file=/usr/local/etc/nghttpx/nghttpx.key
			certificate-file=/usr/local/etc/nghttpx/nghttpx.crt
			accesslog-file=/var/log/nghttpx/access.log
			errorlog-file=/var/log/nghttpx/error.log
			http2-proxy=no
			workers=1

Analizziamo brevemente le chiavi di configurazione:

Opzione Descrizione
frontend Indirizzo e porta di ascolto di nghttpx
backend Indirizzo e porta di ascolto di Apache
private-key-file File della chiave privata usata per generare il certificato SSL
certificate-file File del certificato TLS
accesslog-file File di log degli accessi
errorlog-file File di log degli errori
http2-proxy Abilita, se posta a yes, la modalità secureproxy
workers Numero di workerthread da utilizzare per gestire le richieste

Dopo aver salvato il file ed essere usciti dall’editor di testo, occorre creare la cartella e i file vuoti di log, ed impostare i permessi corretti per tutti i file

sudo chownroot:root /usr/local/etc/nghttpx/nghttpx.conf
			sudo chmod 0600 /usr/local/etc/nghttpx.conf
			sudo mkdir –p /var/log/nghttpx /usr/local/etc/nghttpx
			sudo touch /var/log/nghttpx/access.log
			sudo touch /var/log/nghttpx/error.log
			sudo chown –R nghttpx::nghttpx /var/log/nghttpx

Come si anticipava precedentemente, le comunicazioni saranno cifrate con TLS. Se li abbiamo già a disposizione, ad esempio perché già acquistati, possiamo porre la chiave privata ed il certificato nei percorsi indicati nel file di configurazione.

In alternativa si può pensare di generare un certificato self-signed come mostrato fra breve.

Creazione del job file

È possibile creare il job file per Upstart aprendo nano:

$ sudo nano /etc/init/nghttpx.conf

e scrivendo quanto segue:

# nghttpx - nghttpx job file
			# For reference, see:
			# https://help.ubuntu.com/community/UbuntuBootupHowto
			# http://upstart.ubuntu.com/cookbook/
			# man 5 init
			description "nghttpx HTTP/2 proxy"
			author "EmanueleCipolla<emanuele@emanuelecipolla.net>"
			# Stanzas
			#
			# Stanzas control when and how a process is started and stopped
			# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn
			env USER=nghttpx
			# When to start the service
			start on runlevel [2345]
			# When to stop the service
			stop on runlevel [016]
			# Automatically restart process if crashed
			respawn
			# Essentially lets upstart know the process will detach itself to the background
			expect fork
			script
			exec /usr/local/bin/nghttpx -D --conf=/usr/local/etc/nghttpx/nghttpx.conf --pid-file=/var/run/ng
			httpx.pid
			end script

Dopo aver salvato il file e chiuso nano, si possono impostare proprietario e permessi corretti per il file appena creato, e provare ad avviare nghttpx:

$ sudo chown root:root /etc/init/nghttpx.conf
			$ sudo chmod 0600 /etc/init/nghttpx.conf
			$ sudo initctl reload-configuration
			$ sudo service nghttpx start

Generare un certificato self-signed

Per generare un certificato self-signed, abbiamo innanzitutto bisogno di ottenere una chiave privata:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /usr/local/etc/nghttpx/nghttpx.key -out /usr/local/etc/nghttpx.crt

Dovremo inserire le informazioni della nostra organizzazione e un “common name”, che dovrebbe corrispondere al nome dell’host su cui viene installato il certificato. Riempire gli altri campi è facoltativo, con l’eccezione della password, che non andrebbe inserita, in quanto verrebbe richiesta a ogni avvio del server.

Test di funzionamento

Supponendo che l’indirizzo IP del server HTTP/2 sia 10.211.55.17, è possibile verificare il suo corretto funzionamento collegandosi all’indirizzo https://10.211.55.17:3000.

Effettuando una connessione di test si potrà notare che, se è stato scelto l’utilizzo di un certificato self-signed, Firefox chiederà all’utente di assumersi la responsabilità di accettare un certificato non affidabile.

Figura 3. Certificato self-signed (click per ingrandire)

Certificato self-signed

Rispondendo affermativamente, la pagina di test di Apache di Ubuntu viene visualizzata.

Si può verificare dal file /var/log/nghttpx/access.log che l’accesso è avvenuto usando il protocollo HTTP/2:

10.211.55.2 - - [20/Apr/2015:00:42:50 +0200] "GET / HTTP/2" 200 3256 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:37.0) Gecko/20100101
			Firefox/37.0"
			10.211.55.2 - - [20/Apr/2015:00:42:51 +0200] "GET /icons/ubuntu-logo.png HTTP/2" 404 294 "https://10.211.55.17:3000/" "Mozilla/5.0 (Macintosh; Intel Mac OS
			X 10.9; rv:37.0) Gecko/20100101 Firefox/37.0"
			10.211.55.2 - - [20/Apr/2015:00:42:51 +0200] "GET /favicon.ico HTTP/2" 404 284 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:37.0) Gecko/20100101
			Firefox/37.0"
			10.211.55.2 - - [20/Apr/2015:00:44:07 +0200] "GET /favicon.ico HTTP/2" 404 284 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:37.0) Gecko/20100101
			Firefox/37.0"
			10.211.55.2 - - [20/Apr/2015:00:44:11 +0200] "GET /icons/ubuntu-logo.png HTTP/2" 404 294 "https://10.211.55.17:3000/" "Mozilla/5.0 (Macintosh; Intel Mac OS
			X 10.9; rv:37.0) Gecko/20100101 Firefox/37.0"

Ti consigliamo anche