Category Archives: Nginx

Installare Nginx utilizzando i file sorgenti

Alcune distribuzioni Linux mettono a disposizione i pacchetti di installazione di Nginx nei propri repository, è comunque consigliabile installare il server web utilizzando i file sorgente.
In questo modo si ha la possibilità di scegliere i moduli che si vogliono attivare in fase di installazione.

-Scaricare i file sorgente dal sito ufficiale all’indirizzo http://nginx.org/en/download.html

-Estrarre il file scaricato
tar -xvzf nginx-0.8.37.tar.gz

-Accedere alla cartella in cui sono stati estratti i file e eseguire il comando ./configure
Il comando permette di specificare diversi parametri per la compilazione tra cui troviamo i seguenti.

–prefix=<path> – Specifica il percorso in cui installare Nginx. Se il parametro non viene specificato, viene utilizzato il percorso /usr/local/nginx.
–sbin-path=<path> – Specifica il percorso per gli eseguibili di Nginx. Se il parametro non viene specificato, viene utilizzato il percorso <prefix>/sbin/nginx.
–conf-path=<path> – Il percorso dei file di configurazione di Nginx. Se il parametro non viene specificato, viene utilizzato il percorso <prefix>/conf/nginx.conf.
–pid-path=<path> – Il percorso nel quale verrà creato il file PID. Se il parametro non viene specificato, viene utilizzato il percorso <prefix>/logs/nginx.pid.
–lock-path=<path> – Il percorso nel quale viene creato il file nginx.lock. Se il parametro non viene specificato, viene utilizzato il percorso <prefix>/logs/nginx.lock.
–error-log-path=<path> – Il percorso del file di log degli errori. Se il parametro non viene specificato, viene utilizzato il percorso <prefix>/logs/error.log.
–http-log-path=<path> – Il percorso del file di log degli accessi. Se il parametro non viene specificato, viene utilizzato il percorso <prefix>/logs/access.log.
–user=<user> – Specifica l’utente proprietario del processo Nginx.
–group=<group> – Specifica il gruppo per il processo Nginx.
–with-rtsig_module – Abilita il modulo rtsi.
–with-select_module –without-select_module – Abilita o disabilita il modulo select.
-–with-poll_module –without-poll_module – Abilita o disabilita il modulo poll.
–with-http_ssl_module – Abilita il modulo ngx_http_ssl_module. Abilita il supporto SSL e la possibilità di gestire richieste https.
–with-http_realip_module – Abilita il modulo ngx_http_realip_module
–with-http_addition_module – Abilita il modulo ngx_http_addition_module
–with-http_sub_module – Abilita il modulo ngx_http_sub_module
–with-http_dav_module – Abilita il modulo ngx_http_dav_module
–with-http_flv_module – Abilita il modulo ngx_http_flv_module
–without-http_charset_module – Disabilita il modulo ngx_http_charset_module
–without-http_gzip_module – Disabilita il modulo ngx_http_gzip_module.
–without-http_ssi_module – Disabilita il modulo ngx_http_ssi_module
–without-http_userid_module – Disabilita il modulo ngx_http_userid_module
–without-http_access_module – Disabilita il modulo ngx_http_access_module
–without-http_auth_basic_module – Disabilita il modulo ngx_http_auth_basic_module
–without-http_autoindex_module – Disabilita il modulo ngx_http_autoindex_module
–without-http_geo_module – Disabilita il modulo ngx_http_geo_module
–without-http_map_module – Disabilita il modulo ngx_http_map_module
–without-http_referer_module – Disabilita il modulo ngx_http_referer_module
–without-http_rewrite_module – Disabilita il modulo ngx_http_rewrite_module.
–without-http_proxy_module – Disabilita il modulo ngx_http_proxy_module
–without-http_fastcgi_module – Disabilita il modulo ngx_http_fastcgi_module
–without-http_memcached_module – Disabilita il modulo ngx_http_memcached_module
–without-http_limit_zone_module – Disabilita il modulo ngx_http_limit_zone_module
–without-http_empty_gif_module – Disabilita il modulo ngx_http_empty_gif_module
–without-http_browser_module – Disabilita il modulo ngx_http_browser_module
–without-http_upstream_ip_hash_module – Disabilita il modulo ngx_http_upstream_ip_hash_module
–with-http_perl_module – Abilita il modulo ngx_http_perl_module
–with-perl_modules_path=PATH – Imposta il percorso dei moduli Perl
–with-perl=PATH – Importa il percorso per i file binari Perl
–http-fastcgi-temp-path=PATH – Imposta il percorso per i file temporanei fastcgi.
–with-mail – Abilita il modulo di proxy IMAP4/POP3/SMT
–with-mail_ssl_module – Abilita ngx_mail_ssl_module
–with-cc=PATH – Imposta il percorso del compilatore C
–with-cpp=PATH – Imposta il percorso del preprocessore
–with-cc-opt=OPTIONS – Parametri addizionali che saranno aggiunti alla variabile CFLAGS.
–with-cpu-opt=CPU – Compilazione per una specifica CPU.
–without-pcre – Disabilita l’utilizzo delle librerie PCRE.
–with-pcre=DIR – Imposta il percorso dei sorgenti della libreria PCRE.
–with-pcre-opt=OPTIONS – Imposta opzioni addizionali per la compilazione di PCRE.
–with-md5=DIR – Impostazione del percorso per i sorgenti della libreria md5.
–with-md5-opt=OPTIONS – Imposta opzioni addizionali per la compilazione della libreria
–with-sha1=DIR – Imposta il percorso dei sorgenti per la libreria sha1.
–with-sha1-opt=OPTIONS – Imposta opzioni addizionali per la compilazione della libreria sha1.
–with-sha1-asm – Utilizza il sorgente asm per la libreria sha1.
–with-zlib=DIR – Imposta il percorso del sorgente della libreria zlib.
–with-zlib-opt=OPTIONS – Imposta opzioni addizionali per la compilazione della libreria zlib.
–with-zlib-asm=CPU – Utilizza i sorgenti assembler per la libreria zlib, ottimizzata per una specifica CPU; i parametri validi sono: pentium, pentiumpro
–with-openssl=DIR – Imposta il percorso per i sorgenti della libreria OpenSSL
–with-openssl-opt=OPTIONS – Imposta parametri addizionali per la compilazione della libreria OpenSSL
–with-debug – Abilita il logging a livello di debug
–add-module=PATH – Aggiunge i moduli sviluppati da terze parti trovati nella directory specificata dal valore del pametro PATH

Un esempio di configurazione è quindi il seguente
./configure –with-openssl=/usr/lib/ssl

-Installare Nginx eseguendo i seguenti comandi
make
make install

WordPress e Nginx – Rewrite Rule

Se si utilizza WordPress con un server web Nginx, è possibile che si ricevano molti errori 404 a causa delle regole URL Rewrite sbagliata.

Risolvere questo tipo di problema e permettere a WordPress di funzionare correttamente con Nginx risulta essere piuttosto semplice, il sito rockia lo spiega in una breve guida.

Come prima cosa bisogna copiare il seguente codice all’interno di un file e salvarlo nella cartella di configurazione di Nginx con il nome wordpress.conf.

# if the requested file exists, return it immediately
if (-f $request_filename) {
break;
}

set $supercache_file ”;
set $supercache_uri $request_uri;

if ($request_method = POST) {
set $supercache_uri ”;
}

# Using pretty permalinks, so bypass the cache for any query string
if ($query_string) {
set $supercache_uri ”;
}

if ($http_cookie ~* &quot;comment_author_|wordpress|wp-postpass_&quot; ) {
set $supercache_uri ”;
}

# if we haven’t bypassed the cache, specify our supercache file
if ($supercache_uri ~ ^(.+)$) {
set $supercache_file /wp-content/cache/supercache/$http_host/$1index.html;
}

# only rewrite to the supercache file if it actually exists
if (-f $document_root$supercache_file) {
rewrite ^(.*)$ $supercache_file break;
}

# all other requests go to WordPress
if (!-e $request_filename) {
rewrite . /index.php last;
}

Una volta fatto questo è necessario modificare il file nginx.conf in modo da includere il file di configurazione creato in precedenza.

include wordpress.conf;

Al prossimo riavvio di Nginx, le regole per l’url rewrite di WordPress saranno caricate.

Installare AWStats con Nginx

AWStats è un’applicazione che permette di generare statistiche relative agli accessi ai siti ospitati sul proprio server.
In questa guida vediamo come installare e configurare AWStats per l’utilizzo su un server web Nginx.

Il presupposto è quindi che sul server sia già installato Nginx, per i dettagli relativi all’installazione di Nginx rimandiamo all’articolo pubblicato in passato.

La prima cosa da fare è quindi installare awstats, per completare questa operazione su un server Debian, basta eseguire il seguente comando.
sudo apt-get install awstats

Durante la fase di installazione viene chiesto se si vuole utilizzare la configurazione automatica per apache e lighttpd, non bisogna selezionare questa opzione visto che non si usano questi server web.

L’accesso all’applicazione AWStats viene fatto all’indirizzo /cgi-bin/awstats.pl, risulta quindi necessario creare uno script php a cui vengono inoltrate le richieste attraverso php-cgi.
sudo nano /etc/nginx/cgi-bin.php

<?php

$descriptorspec = array( 
0 => array(“pipe”, “r”),  // stdin is a pipe that the child will read from
1 => array(“pipe”, “w”),  // stdout is a pipe that the child will write to
2 => array(“pipe”, “w”)   // stderr is a file to write to
);

$newenv = $_ENV; 
$newenv[“SCRIPT_FILENAME”] = $_ENV[“X_SCRIPT_FILENAME”];
$newenv[“SCRIPT_NAME”] = $_ENV[“X_SCRIPT_NAME”];

if (is_executable($_ENV[“X_SCRIPT_FILENAME”])) { 
$process = proc_open($_ENV[“X_SCRIPT_FILENAME”], $descriptorspec, $pipes, NULL, $newenv);
if (is_resource($process)) {
fclose($pipes[0]);
$head = fgets($pipes[1]);
while (strcmp($head, “n”)) {
header($head);
$head = fgets($pipes[1]);
}
fpassthru($pipes[1]);
fclose($pipes[1]);
fclose($pipes[2]);
$return_value = proc_close($process);
}
else {
header(“Status: 500 Internal Server Error”);
echo(“Internal Server Error”);
}
}
else {
header(“Status: 404 Page Not Found”);
echo(“Page Not Found”);
}
?>

L’operazione successiva consiste nel modificare il formato dei log di Nginx, bisogna infatti utilizzare lo stesso formato dei log di Apache per permettere a Awstats di leggerli.

sudo nano /etc/nginx/nginx.conf

Trovare la seguente riga all’interno dei file.
include       /etc/nginx/conf/mime.types;

Inserire la seguente riga sotto quella indicata in precedenza.
log_format main    ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘;

A questo punto è necessario configurare tutti i domini in modo che venga utilizzato awstats.
sudo cp /etc/awstats/awstats.conf /etc/awstats/awstats.domain.com.conf
sudo nano /etc/awstats/awstats.domain.com.conf

All’interno del file è necessario modificare le seguenti righe in base alle impostazioni del dominio.
LogFile=”/home/user_name/public_html/domain.com/logs/access.log”
LogFormat=1
SiteDomain=”domain.com”
HostAliases=”www.domain.com localhost 127.0.0.1″

Salvare il file e eseguire AWStats per la generazione iniziale delle statistiche.
sudo /usr/lib/cgi-bin/awstats.pl -config=domain.com -update

Programmare l’esecuzione di AWStats con Cron in modo che le statistiche vengano generate ogni dieci minuti.
sudo crontab -e
*/10 * * * * /usr/lib/cgi-bin/awstats.pl -config=domain.com -update > /dev/null 2>&1

L’ultima operazione da eseguire consiste nel modificare il file di configurazione di Nginx e inserire il redirect cgi-bin in modo da inoltrare le richieste allo script creato in precedenza.
sudo nano /etc/nginx/sites-available/domain.com

Trovare la seguente riga.
location ~ .php$ {

Inserire le seguenti righe prima di quella indicata in precedenza.
location ^~ /awstats-icon {
alias /usr/share/awstats/icon/;
access_log off;
}

location ^~ /awstatscss { 
alias /usr/share/doc/awstats/examples/css/;
access_log off;
}

location ^~ /awstatsclasses { 
alias /usr/share/doc/awstats/examples/classes/;
access_log off;
}

# Configure /cgi-bin/scripts to go through php-fastcgi 
location ~ ^/cgi-bin/.*.(cgi|pl|py|rb) {
gzip off;
fastcgi_pass  127.0.0.1:49232;
fastcgi_index cgi-bin.php;
fastcgi_param SCRIPT_FILENAME    /etc/nginx/cgi-bin.php;
fastcgi_param SCRIPT_NAME        /cgi-bin/cgi-bin.php;
fastcgi_param X_SCRIPT_FILENAME  /usr/lib$fastcgi_script_name;
fastcgi_param X_SCRIPT_NAME      $fastcgi_script_name;
fastcgi_param QUERY_STRING       $query_string;
fastcgi_param REQUEST_METHOD     $request_method;
fastcgi_param CONTENT_TYPE       $content_type;
fastcgi_param CONTENT_LENGTH     $content_length;
fastcgi_param GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param SERVER_SOFTWARE    nginx;
fastcgi_param REQUEST_URI        $request_uri;
fastcgi_param DOCUMENT_URI       $document_uri;
fastcgi_param DOCUMENT_ROOT      $document_root;
fastcgi_param SERVER_PROTOCOL    $server_protocol;
fastcgi_param REMOTE_ADDR        $remote_addr;
fastcgi_param REMOTE_PORT        $remote_port;
fastcgi_param SERVER_ADDR        $server_addr;
fastcgi_param SERVER_PORT        $server_port;
fastcgi_param SERVER_NAME        $server_name;
fastcgi_param REMOTE_USER        $remote_user;
}

Il file deve essere modificando a seconda della configurazione del proprio server.

Riavviare Nginx
sudo /etc/init.d/nginx restart