Nginx (pronunciato "engine x") è un server HTTP gratuito, open source e ad alte prestazioni. Nginx è noto per la sua stabilità, il ricco set di funzionalità, la configurazione semplice e il basso consumo di risorse. Questo tutorial mostra come installare Nginx su un server Fedora 19 con supporto PHP5 (tramite PHP-FPM) e supporto MySQL.
Non garantisco che questo funzionerà per te!
1 Nota preliminare
In questo tutorial utilizzo l'hostname server1.example.com con l'indirizzo IP 192.168.0.100. Queste impostazioni potrebbero differire per te, quindi devi sostituirle dove appropriato.
2 Installazione di MySQL/MariaDB 5
Per prima cosa installiamo MySQL 5 in questo modo:
yum install mysql mysql-server
Quindi creiamo i collegamenti di avvio del sistema per MySQL (in modo che MySQL si avvii automaticamente ogni volta che il sistema si avvia) e avviamo il server MySQL:
systemctl enable mysqld.service
systemctl start mysqld.service
Ora controlla che la rete sia abilitata. Corri
netstat -tap | grep mysql
Dovrebbe mostrare qualcosa del genere:
[[email protected] ~]# netstat -tap | grep mysql
tcp 0 0 *:mysql *:* LISTEN 1116/mysqld
[[email protected] ~]#
In caso contrario, modifica /etc/my.cnf e commenta l'opzione skip-networking:
vi /etc/my.cnf
[...] #skip-networking [...]
e riavvia il tuo server MySQL:
systemctl restart mysqld.service
Corri
mysql_secure_installation
per impostare una password per l'utente root (altrimenti chiunque può accedere al tuo database MySQL!):
[[email protected] ~]# mysql_secure_installation
/usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found
NOTA:L'ESECUZIONE DI TUTTE LE PARTI DI QUESTO SCRIPT È RACCOMANDATA PER TUTTI MariaDB
SERVER IN PRODUZIONE UTILIZZATI! PER FAVORE, LEGGERE ATTENTAMENTE OGNI PASSAGGIO!
Per accedere a MariaDB per proteggerlo, avremo bisogno della password attuale per l'utente root. Se hai appena installato MariaDB, e
non hai impostato la password root, la password sarà vuota,
quindi dovresti premere invio qui.
Entra password corrente per la radice (inserire per nessuno): <-- INVIO
OK, password utilizzata con successo, andando avanti...
L'impostazione della password di radice garantisce che nessuno possa accedere a MariaDB
utente root senza l'autorizzazione appropriata.
Impostare la password root? [S/n] <-- ENTER
Nuova password: <-- yourrootsqlpassword
Reinserire nuova password: <-- yourrootsqlpassword
Password aggiornata con successo!
Ricaricamento delle tabelle dei privilegi. .
... Successo!
Per impostazione predefinita, un'installazione MariaDB ha un utente anonimo, consentendo a chiunque
di accedere a MariaDB senza deve avere un account utente creato per
loro. Questo è destinato solo a testing, e a rendere l'installazione
andare un po' più agevole. Dovresti rimuoverli prima di trasferirti in un
ambiente di produzione.
Rimuovere utenti anonimi? [S/n] <-- ENTER
... Successo!
Normalmente, root dovrebbe essere consentito solo di connettersi da 'localhost'. Questo
garantisce che qualcuno non può indovinare la password root dalla rete.
Disattivare l'accesso root da remoto? [S/n] <-- ENTER
... Success!
Per impostazione predefinita, MariaDB viene con un database denominato 'test' a cui tutti possono
accedere. Questo è anche destinato solo a test, e dovrebbe essere rimosso
prima di trasferire in un ambiente di produzione.
Rimuovere database di test e accedere ad esso? [S/n] <-- ENTER
- Dropping database di test...
... Successo!
- Rimozione privilegi sul database di test...
... Successo !
Ricaricare le tabelle dei privilegi garantirà che tutte le modifiche apportate finora
diventeranno effettive immediatamente.
Ricaricare le tabelle dei privilegi ora? [S/n] <-- ENTER
... Successo!
Pulizia ...
Fatto! Se hai completato tutti i passaggi precedenti, l'installazione di MariaDB
dovrebbe essere protetta.
Grazie per utilizzare MariaDB!
[[email protected] ~]#
3 Installazione di Nginx
Nginx è disponibile come pacchetto per Fedora 19 che possiamo installare come segue:
yum install nginx
Quindi creiamo i collegamenti di avvio del sistema per nginx e lo avviamo:
systemctl enable nginx.service
systemctl start nginx.service
Digita l'indirizzo IP o il nome host del tuo server web in un browser (ad es. http://192.168.0.100) e dovresti vedere la pagina di benvenuto di nginx:
4 Installazione di PHP5
Possiamo far funzionare PHP5 in nginx tramite PHP-FPM (PHP-FPM (FastCGI Process Manager) è un'implementazione PHP FastCGI alternativa con alcune funzionalità aggiuntive utili per siti di qualsiasi dimensione, in particolare i siti più affollati). C'è un pacchetto php-fpm nei repository ufficiali di Fedora 19, quindi possiamo installare php-fpm insieme a php-cli e alcuni moduli PHP5 come php-mysqlnd che ti servono se vuoi usare MySQL dai tuoi script PHP:
yum install php-fpm php-cli php-mysqlnd php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-magickwand php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy
Zend OPcache è un cacher di codice operativo PHP gratuito e aperto per la memorizzazione nella cache e l'ottimizzazione del codice intermedio PHP. È simile ad altri cacher di codice operativo PHP, come APC e Xcache. Si consiglia vivamente di averne uno installato per velocizzare la tua pagina PHP. Poiché Zend OPcache è ora ufficialmente incluso in PHP 5.5, lo usiamo al posto di altri opcode cacher.
Zend OPcache può essere installato come segue:
yum install php-opcache
Per evitare errori come
[13-Nov-2011 22:13:16] PHP Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CET/1.0/no DST' instead in /usr/share/nginx/html/info.php on line 2
... in /var/log/php-fpm/www-error.log quando chiami uno script PHP nel tuo browser, dovresti aprire /etc/php.ini e impostare date.timezone:
vi /etc/php.ini
[...] [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = "Europe/Berlin" [...]
Quindi crea i collegamenti di avvio del sistema per php-fpm e avvialo:
systemctl enable php-fpm.service
systemctl start php-fpm.service
PHP-FPM è un processo demone che esegue un server FastCGI sulla porta 9000.
5 Configurazione di nginx
La configurazione di nginx è in /etc/nginx/nginx.conf che apriamo ora:
vi /etc/nginx/nginx.conf
La configurazione è di facile comprensione (puoi saperne di più qui:http://wiki.codemongers.com/NginxFullExample e qui:http://wiki.codemongers.com/NginxFullExample2)
Innanzitutto (questo è facoltativo) puoi aumentare il numero di processi di lavoro e impostare keepalive_timeout su un valore ragionevole:
[...] worker_processes 4; [...] keepalive_timeout 2; [...]
Gli host virtuali sono definiti nei contenitori del server {}. Il vhost predefinito è definito più in basso nel file /etc/nginx/nginx.conf - modifichiamolo come segue:
vi /etc/nginx/nginx.conf
[...] server { listen 80; server_name _; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.php index.html index.htm; } # redirect server error pages to the static page /40x.html # error_page 404 /404.html; location = /40x.html { root /usr/share/nginx/html; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { root /usr/share/nginx/html; try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } } [...]
nome del server _; lo rende un vhost catchall predefinito (ovviamente puoi anche specificare un nome host qui come www.example.com).
Nella posizione / parte, ho aggiunto index.php alla riga dell'indice. root /usr/share/nginx/html; significa che la radice del documento è la directory /usr/share/nginx/html.
La parte importante per PHP è la stanza posizione ~ \.php$ {}. Decommentalo per abilitarlo. Modificare la riga principale nella radice del documento del sito Web (ad es. root /usr/share/nginx/html;). Assicurati di cambiare la riga fastcgi_param in fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; perché altrimenti l'interprete PHP non troverà lo script PHP che chiami nel tuo browser.
Si noti che ho aggiunto la riga try_files $uri =404; per prevenire exploit zero-day (vedi http://wiki.nginx.org/Pitfalls#Passing_Uncontrol_Requests_to_PHP e http://forum.nginx.org/read.php?2,88845,page=3). In alternativa, se non vuoi usare try_files $uri =404; riga, puoi impostare cgi.fix_pathinfo =0; in /etc/php5/fpm/php.ini (non dimenticare di ricaricare PHP-FPM in seguito).
Ora salva il file e ricarica nginx:
systemctl reload nginx.service
Ora crea il seguente file PHP nella radice del documento /usr/share/nginx/html...
vi /usr/share/nginx/html/info.php
<?php phpinfo(); ?>
Ora chiamiamo quel file in un browser (es. http://192.168.0.100/info.php):
Come vedi, PHP5 funziona e funziona tramite FPM/FastCGI, come mostrato nella riga dell'API del server. Se scorri più in basso, vedrai tutti i moduli che sono già abilitati in PHP5, incluso il modulo MySQL:
6 link
- nginx:http://nginx.org/
- Wiki di nginx:http://wiki.nginx.org/
- PHP:http://www.php.net/
- PHP-FPM:http://php-fpm.org/
- MySQL:http://www.mysql.com/
- Fedora:http://fedoraproject.org/