Nginx Installazione · 10 min read · Jan 23, 2026
Compilare Nginx Da Sorgente Su Debian Squeeze
Compilare Nginx Da Sorgente Su Debian Squeeze
Versione 1.0
Autore: Michel Käser
Questo tutorial descrive come puoi compilare nginx da sorgente su Debian Squeeze. Inoltre, includeremo alcuni moduli di terze parti utili come il naxsi WAF (web application firewall), SPDY, ecc.
Alla fine avrai un’installazione di nginx completamente funzionante.
Non fornisco alcuna garanzia che questo funzionerà per te!
1 Requisiti
Per seguire questo tutorial avrai bisogno dei seguenti:
- un server dedicato che esegue Debian Squeeze
- circa 30 minuti di tempo per leggere attentamente
2 Note Preliminari
In questo tutorial utilizzeremo la versione di sviluppo di nginx come nostra base sorgente. Si prega di essere consapevoli che queste versioni potrebbero essere instabili e non sono raccomandate per l’esecuzione su server di produzione.
Alcuni moduli come SPDY richiedono tuttavia la versione di nginx 1.3.1x o successiva - e personalmente direi che è più o meno sicuro utilizzare la versione di sviluppo di nginx poiché non ci sono exploit noti.
3 Prerequisiti
Poiché nginx è scritto in linguaggio di programmazione C, dovremo installare alcuni pacchetti che ci aiuteranno a costruire/compilare il codice sorgente. Sono un grande fan del gestore di pacchetti apt, ma puoi usare anche aptitude ecc.:
apt-get -y install build-essential zlib1g-dev libpcre3 libpcre3-dev libbz2-dev libssl-dev tar unzipQuesto installerà tutti i pacchetti richiesti come gcc e make.
4 Scaricare il sorgente di nginx
L’ultima versione di nginx può essere trovata sul seguente sito web: nginx.org/en/download.html. Al momento della scrittura è 1.3.12 - quindi andremo a scaricare:
cd /tmp
wget http://nginx.org/download/nginx-1.3.12.tar.gze estrarre il sorgente:
tar -xzvf nginx-1.3.12.tar.gzNon costruiremo ancora la nostra versione di nginx, poiché andremo prima a scaricare alcuni moduli di terze parti che includeremo in seguito.
5 Moduli aggiuntivi di terze parti
A differenza di Apache HTTPd, che supporta il caricamento dinamico dei moduli (è per questo che possiamo installarli dai repository), nginx non include tale funzionalità - e da quello che ho letto non è qualcosa che sarà implementato a breve.
Dobbiamo quindi decidere presto quali moduli vogliamo includere nella nostra installazione personalizzata. C’è una bella panoramica/tabella sul sito ufficiale di nginx che elenca i più popolari: wiki.nginx.org/3rdPartyModules.
Poiché non include tutti i moduli disponibili, ti consiglio di eseguire una query su Google come: nginx redis module github se stai cercando un modulo particolare - molti di essi sono ospitati su Github.
5.1 Scaricare i moduli
Per questo tutorial andremo a scaricare alcuni moduli davvero fantastici come naxsi, SPDY e alcuni meno conosciuti.
headers_more
Iniziamo con headers_more. Puoi usarlo per nascondere completamente le informazioni del server web, ad esempio, per migliorare la sicurezza del server:
mkdir /tmp/nginx-modules
cd /tmp/nginx-modules
wget https://github.com/agentzh/headers-more-nginx-module/archive/v0.19.tar.gz
tar -xzvf v0.19.tar.gzQuesto scaricherà la versione più recente e la estrarrà. Assicurati di controllare il repository ufficiale di tanto in tanto per vedere se c’è una nuova versione in giro (vale per tutti gli altri moduli).
Cache Purge
Potresti non aver bisogno di questo modulo per la tua configurazione. Se hai nginx davanti ad Apache, che funge da reverse proxy e memorizza nella cache i risultati di proxy_pass, questo potrebbe essere un vincitore! Altrimenti, salta:
wget https://github.com/FRiCKLE/ngx_cache_purge/archive/2.0.tar.gz
tar -xzvf 2.0.tar.gznaxsi
Naxsi è un modulo firewall per applicazioni web open source, ad alte prestazioni e con bassa manutenzione delle regole per nginx - molto simile a mod_security in funzionalità. Lo utilizzeremo per proteggere le applicazioni web dei nostri clienti:
wget http://naxsi.googlecode.com/files/naxsi-core-0.49.tgz
tar -xzvf naxsi-core-0.49.tgzSPDY
SPDY è un modulo che consente al tuo server web di sfruttare le funzionalità di SPDY come il multiplexing dei flussi e la compressione degli header e molte persone parlano di esso come un nuovo standard (sembra che lo sia).
Aggiornare OpenSSL
Richiede OpenSSL 1.0.1+, qualcosa che non abbiamo sulla nostra macchina Squeeze per impostazione predefinita. Useremo il repository testing di Debian in questo tutorial per installarlo. Puoi però compilarlo da sorgente o controllare altri repository.
nano /etc/apt/sources.liste incollare le seguenti righe:
deb http://ftp.debian.org/debian/ testing main contrib non-free
deb http://security.debian.org/ testing/updates main contrib non-freeDovremmo ora impedire al nostro server di aggiornare altri pacchetti alla versione testing. Possiamo farlo creando/modificando il file /etc/apt/apt.conf.d/releases: ``` nano /etc/apt/apt.conf.d/releases ``` e incollare: ``` APT::Default-Release "squeeze"; ``` Attenzione: Se ti riferisci a repository stabili con stable nel tuo sources.list, dovresti sostituire squeeze con stable nel testo sopra. Ora possiamo *safely* eseguire: ``` apt-get update apt-get -t testing install openssl ``` che aggiornerà/installare la versione esistente di OpenSSL. #### Applicare la patch Attualmente non c'è modo di includerlo come altri moduli, invece, è fornito come una patch per il codice sorgente di nginx. La lettura ufficiale può essere trovata qui: nginx.org/patches/spdy/README.txt ``` cd /tmp/nginx-1.3.12 wget http://nginx.org/patches/spdy/patch.spdy.txt patch -p1 < patch.spdy.txt ``` dovrebbe fare tutta la magia per noi. ### 6 Compilare nginx Fino ad ora abbiamo scaricato il sorgente di nginx, alcuni moduli aggiuntivi di terze parti per esso e applicato la patch SPDY. È ora di costruire la nostra installazione di nginx. È come con tutte le applicazioni C - un processo in 3 fasi. Passeremo attraverso il primo passo in modo più dettagliato: ``` ./configure --help ``` Questo ti mostrerà un elenco di tutte le opzioni di configurazione disponibili per la compilazione, come quali moduli possono essere disabilitati, abilitati e così via. Il mio appare così (accorciato): ``` --help stampa questo messaggio --prefix=PATH imposta il prefisso di installazione --sbin-path=PATH imposta il percorso binario di nginx --conf-path=PATH imposta il percorso di nginx.conf --error-log-path=PATH imposta il percorso del log degli errori --pid-path=PATH imposta il percorso di nginx.pid --lock-path=PATH imposta il percorso di nginx.lock --user=USER imposta l'utente non privilegiato per i processi worker --group=GROUP imposta il gruppo non privilegiato per i processi worker --builddir=DIR imposta la directory di build --with-rtsig_module abilita il modulo rtsig --with-select_module abilita il modulo select --without-select_module disabilita il modulo select --with-poll_module abilita il modulo poll --without-poll_module disabilita il modulo poll --with-file-aio abilita il supporto AIO per i file --with-ipv6 abilita il supporto IPv6 --with-http_ssl_module abilita ngx_http_ssl_module [...] --with-http_stub_status_module abilita ngx_http_stub_status_module --without-http_charset_module disabilita ngx_http_charset_module [...] --without-http_browser_module disabilita ngx_http_browser_module --without-http_upstream_ip_hash_module disabilita ngx_http_upstream_ip_hash_module --without-http_upstream_least_conn_module disabilita ngx_http_upstream_least_conn_module --without-http_upstream_keepalive_module disabilita ngx_http_upstream_keepalive_module --with-http_perl_module abilita ngx_http_perl_module --with-perl_modules_path=PATH imposta il percorso dei moduli Perl --with-perl=PATH imposta il percorso binario di perl --http-log-path=PATH imposta il percorso del log di accesso http --http-client-body-temp-path=PATH imposta il percorso per memorizzare i file temporanei del corpo della richiesta http --http-proxy-temp-path=PATH imposta il percorso per memorizzare i file temporanei del proxy http --http-fastcgi-temp-path=PATH imposta il percorso per memorizzare i file temporanei fastcgi http --http-uwsgi-temp-path=PATH imposta il percorso per memorizzare i file temporanei uwsgi http --http-scgi-temp-path=PATH imposta il percorso per memorizzare i file temporanei scgi http --without-http disabilita il server HTTP --without-http-cache disabilita la cache HTTP --with-mail abilita il modulo proxy POP3/IMAP4/SMTP [...] --without-mail_smtp_module disabilita ngx_mail_smtp_module --with-google_perftools_module abilita ngx_google_perftools_module --with-cpp_test_module abilita ngx_cpp_test_module --add-module=PATH abilita un modulo esterno --with-cc=PATH imposta il percorso del compilatore C [...] --with-cpu-opt=CPU costruisci per la CPU specificata, valori validi: pentium, pentiumpro, pentium3, pentium4, athlon, opteron, sparc32, sparc64, ppc64 --without-pcre disabilita l'uso della libreria PCRE [...] --with-pcre-jit costruisci PCRE con supporto per la compilazione JIT --with-md5=DIR imposta il percorso delle sorgenti della libreria md5 --with-md5-opt=OPTIONS imposta opzioni di build aggiuntive per md5 --with-md5-asm usa sorgenti assembler md5 --with-sha1=DIR imposta il percorso delle sorgenti della libreria sha1 --with-sha1-opt=OPTIONS imposta opzioni di build aggiuntive per sha1 --with-sha1-asm usa sorgenti assembler sha1 --with-zlib=DIR imposta il percorso delle sorgenti della libreria zlib --with-zlib-opt=OPTIONS imposta opzioni di build aggiuntive per zlib --with-zlib-asm=CPU usa sorgenti assembler zlib ottimizzate per la CPU specificata, valori validi: pentium, pentiumpro --with-libatomic forza l'uso della libreria libatomic_ops --with-libatomic=DIR imposta il percorso delle sorgenti della libreria libatomic_ops --with-openssl=DIR imposta il percorso delle sorgenti della libreria OpenSSL --with-openssl-opt=OPTIONS imposta opzioni di build aggiuntive per OpenSSL --with-debug abilita il logging di debug ``` Questo ti aiuterà molto a decidere quali moduli vuoi includere/escludere, così come cosa altro può essere definito. Utilizzeremo il seguente comando di configurazione: ``` ./configure \ --prefix=/usr/share/nginx \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/access.log \ --user=www-data \ --group=www-data \ --without-mail_pop3_module \ --without-mail_imap_module \ --without-mail_smtp_module \ --without-http_fastcgi_module \ --without-http_uwsgi_module \ --without-http_scgi_module \ --without-http_memcached_module \ --with-ipv6 \ --with-http_ssl_module \ --with-http_spdy_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --add-module=/tmp/nginx-modules/headers-more-nginx-module-0.19 \ --add-module=/tmp/nginx-modules/naxsi-core-0.49/naxsi_src \ --add-module=/tmp/nginx-modules/ngx_cache_purge-2.0 ``` che escluderà tutto ciò che riguarda la posta e i gestori di cui non abbiamo bisogno (potresti averne bisogno se non stai eseguendo come reverse proxy!) e includerà i nostri moduli di terze parti scaricati e la patch SPDY. Ho usato i percorsi standard di Debian qui, ma sentiti libero di cambiarli. Successivamente, possiamo compilare il sorgente: ``` make ``` Attenzione: Se questo genera errori, dovresti leggerli attentamente per vedere dove si trova il problema e cosa sia. Infine, installa il sorgente compilato: ``` make install ``` Questo copierà tutti i file nelle posizioni corrette. Fatto! ### 7 Abilitare l'avvio automatico Debian utilizza script di init attraverso i quali puoi controllare il comportamento del servizio. Sto usando quello del pacchetto ufficiale di nginx - tutti i crediti appartengono al suo manutentore: ``` #!/bin/sh ### BEGIN INIT INFO # Provides: nginx # Required-Start: $local_fs $remote_fs $network $syslog # Required-Stop: $local_fs $remote_fs $network $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: avvia il server web nginx # Description: avvia nginx utilizzando start-stop-daemon ### END INIT INFO PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/sbin/nginx NAME=nginx DESC=nginx # Includi nginx di default se disponibile if [ -f /etc/default/nginx ]; then . /etc/default/nginx fi test -x $DAEMON || exit 0 set -e . /lib/lsb/init-functions test_nginx_config() { if $DAEMON -t $DAEMON_OPTS >/dev/null 2>&1; then return 0 else $DAEMON -t $DAEMON_OPTS return $? fi } case "$1" in start) echo -n "Avviando $DESC: " test_nginx_config # Controlla se l'ULIMIT è impostato in /etc/default/nginx if [ -n "$ULIMIT" ]; then # Imposta gli ulimits ulimit $ULIMIT fi start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON -- $DAEMON_OPTS || true echo "$NAME." ;; stop) echo -n "Arrestando $DESC: " start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON || true echo "$NAME." ;; restart|force-reload) echo -n "Riavviando $DESC: " start-stop-daemon --stop --quiet --pidfile \ /var/run/$NAME.pid --exec $DAEMON || true sleep 1 test_nginx_config # Controlla se l'ULIMIT è impostato in /etc/default/nginx if [ -n "$ULIMIT" ]; then # Imposta gli ulimits ulimit $ULIMIT fi start-stop-daemon --start --quiet --pidfile \ /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS || true echo "$NAME." ;; reload) echo -n "Ricaricando la configurazione di $DESC: " test_nginx_config start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON || true echo "$NAME." ;; configtest|testconfig) echo -n "Testando la configurazione di $DESC: " if test_nginx_config; then echo "$NAME." else exit $? fi ;; status) status_of_proc -p /var/run/$NAME.pid "$DAEMON" nginx && exit 0 || exit $? ;; *) echo "Uso: $NAME {start|stop|restart|reload|force-reload|status|configtest}" >&2 exit 1 ;; esac exit 0 ``` Non dimenticare dichmod`:chmod 755 /etc/init.d/nginx Possiamo anche creare un file di default in stile Debian:nano /etc/default/nginx e incollare:# Nota: Potresti voler guardare la seguente pagina prima di impostare l'ULIMIT. # http://wiki.nginx.org/CoreModule#worker_rlimit_nofile # Imposta la variabile ulimit se hai bisogno di cambiare i valori predefiniti. # Esempio: ULIMIT="-n 4096" #ULIMIT="-n 4096" Ultimo ma non meno importante, se desideri avviare nginx automaticamente all’avvio, puoi eseguire:update-rc.d nginx defaults ### 8 Direttive speciali dei moduli Non passeremo attraverso la configurazione di nginx e i file vhost qui, ma le seguenti direttive dei nostri moduli sono interessanti:# Modulo SPDY (vhost) listen 443 ssl spdy; # modulo more_headers (http) more_clear_headers 'Server'; # rimuove le informazioni del server #### naxsi naxsi è un po’ più complesso. Prima, le regole di configurazione globali dovrebbero essere incluse nella sezione http del file di configurazione di nginx:nano /etc/nginx/nginx.conf e incollare:http { [...] include /etc/nginx/naxsi_core.rules; [...] } Attenzione: Assicurati che questo file esista. Puoi copiare i file di configurazione di naxsi dall’archivio scaricato (vedi: Moduli aggiuntivi di terze parti). Successivamente, devi includere le regole predefinite all’interno del tuo template vhost:[...] location / { include /etc/nginx/naxsi.rules; [...] } [...] e una posizione per le richieste bloccate:[...] location /blocked { return 403; #proxy_pass http://127.0.0.1:4242; # modalità di apprendimento } [...] Attenzione: Assicurati che la posizione per le richieste bloccate corrisponda a quella del file di configurazione /etc/nginx/naxsi.rules:LearningMode; SecRulesEnabled; #SecRulesDisabled; DeniedUrl "/blocked"; [...] Come puoi vedere, naxsi ha alcune opzioni strane, ma non sono strane. Dovresti consultare la loro documentazione per leggere come farlo funzionare al meglio. Un suggerimento che ho cercato a lungo: Devi eseguire uno script Python e passare le richieste bloccate ad esso durante la modalità di apprendimento per creare una whitelist per falsi allerta. ### 9 Link / Crediti - http://code.google.com/p/naxsi/ - http://nginx.org/ - https://www.rackster.ch/
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.