GNU/Linux >> Linux Esercitazione >  >> Cent OS

Installazione di Nginx con PHP5 (e PHP-FPM) e supporto MySQL su CentOS 6.4

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 CentOS 6.4 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 Abilitazione di repository aggiuntivi

php-fpm non è disponibile dai repository CentOS ufficiali, ma dal repository RPM Remi che a sua volta dipende dal repository EPEL; possiamo abilitare entrambi i repository come segue:

rpm --import https://fedoraproject.org/static/0608B895.txt 
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
yum install yum-priorities

Modifica /etc/yum.repos.d/epel.repo...

vi /etc/yum.repos.d/epel.repo

... e aggiungi la linea priority=10 alla sezione [epel]:

[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
[...]

Quindi fai lo stesso per la sezione [remi] in /etc/yum.repos.d/remi.repo, oltre a modificare abilitato a 1:

vi /etc/yum.repos.d/remi.repo
[remi]
name=Les RPM de remi pour Enterprise Linux $releasever - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/$releasever/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/$releasever/remi/mirror
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
failovermethod=priority

[remi-test]
name=Les RPM de remi en test pour Enterprise Linux $releasever - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/$releasever/test/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/$releasever/test/mirror
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

3 Installazione di MySQL 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:

chkconfig --levels 235 mysqld on
/etc/init.d/mysqld start

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      1799/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:

/etc/init.d/mysqld restart

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




NOTA: L'ESECUZIONE DI TUTTE LE PARTI DI QUESTO SCRIPT È CONSIGLIATA PER TUTTI MySQL
      SERVER IN PRODUZIONE UTILIZZATA ! PER FAVORE, LEGGERE ATTENTAMENTE OGNI PASSAGGIO!


Per accedere a MySQL per proteggerlo, avremo necessità della password
corrente per l'utente root. Se hai appena installato MySQL 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 MySQL
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 MySQL ha un utente anonimo, consentendo a chiunque
di accedere a MySQL senza deve avere un account utente creato per
loro. Questo è destinato solo a test 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 riesca a indovinare la password root dalla rete.

Disattivare l'accesso root da remoto? [S/n] <-- ENTER
 ... Successo!

Per impostazione predefinita, MySQL viene con un database denominato 'test' a cui chiunque può
accedere. Questo è anche destinato solo a test, e dovrebbe essere rimosso
prima di trasferirsi 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 di privilegi garantirà che tutte le modifiche apportate finora
diventeranno immediatamente effettive.

Ricaricare le tabelle privilegi adesso? [S/n] <-- ENTER
 ... Successo!

Pulizia ...



Tutto fatto! Se hai completato tutti i passaggi precedenti, l'installazione di MySQL
dovrà essere protetta.

Grazie per aver utilizzato MySQL!


[[ email protetto] ~]#

4 Installazione di Nginx

Nginx è disponibile come pacchetto per CentOS 6.4 (da EPEL) che possiamo installare come segue:

yum install nginx

Quindi creiamo i collegamenti di avvio del sistema per nginx e lo avviamo:

chkconfig --levels 235 nginx on
/etc/init.d/nginx start

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:

5 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). Possiamo installare php-fpm insieme a php-cli e alcuni moduli PHP5 come php-mysql di cui hai bisogno se vuoi usare MySQL dai tuoi script PHP come segue:

yum install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy

APC è 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 eAccelerator e Xcache. Si consiglia vivamente di averne uno installato per velocizzare la tua pagina PHP.

APC può essere installato come segue:

yum install php-pecl-apc

Quindi apri /etc/php.ini e imposta cgi.fix_pathinfo=0:

vi /etc/php.ini
[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...]

(Leggi http://wiki.nginx.org/Pitfalls per scoprire perché dovresti farlo.)

Inoltre, per evitare errori come

[08-Aug-2011 18:07:08] 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 'CEST/2.0/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 impostare date.timezone in /etc/php.ini:

[...]
[Date]
; Defines the default timezone used by the date functions
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = "Europe/Berlin"
[...]

Puoi scoprire il fuso orario corretto per il tuo sistema eseguendo:

cat /etc/sysconfig/clock
[[email protected] nginx]# cat /etc/sysconfig/clock
ZONE="Europe/Berlin"
[[email protected] nginx]#

Quindi crea i collegamenti di avvio del sistema per php-fpm e avvialo:

chkconfig --levels 235 php-fpm on
/etc/init.d/php-fpm start

PHP-FPM è un processo demone (con lo script init /etc/init.d/php-fpm) che esegue un server FastCGI sulla porta 9000.

6 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 {} nella directory /etc/nginx/conf.d. Modifichiamo il vhost predefinito (in /etc/nginx/conf.d/default.conf) come segue:

vi /etc/nginx/conf.d/default.conf
[...]
server {
    listen       80;
    server_name  _;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.php index.html index.htm;
    }

    error_page  404              /404.html;
    location = /404.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_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;). 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). 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 ($document_root si traduce in /usr/share/nginx/html perché è quello che abbiamo impostato come root del nostro documento).

PHP-FPM è in ascolto sulla porta 9000 su 127.0.0.1 per impostazione predefinita, quindi diciamo a nginx di connettersi a 127.0.0.1:9000 con la linea fastcgi_pass 127.0.0.1:9000;. È anche possibile fare in modo che PHP-FPM utilizzi un socket Unix - lo descriverò nel capitolo 7.

Ora salva il file e ricarica nginx:

/etc/init.d/nginx reload

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:

7 Fare in modo che PHP-FPM utilizzi un socket Unix

Per impostazione predefinita, PHP-FPM è in ascolto sulla porta 9000 su 127.0.0.1. È anche possibile fare in modo che PHP-FPM utilizzi un socket Unix che evita l'overhead del TCP. Per fare ciò, apri /etc/php-fpm.d/www.conf...

vi /etc/php-fpm.d/www.conf

... e fai in modo che la linea di ascolto appaia come segue:

[...]
;listen = 127.0.0.1:9000
listen = /tmp/php5-fpm.sock
[...]

Quindi ricarica PHP-FPM:

/etc/init.d/php-fpm reload

Quindi passa attraverso la tua configurazione di nginx e tutti i tuoi vhost e cambia la riga fastcgi_pass 127.0.0.1:9000; a fastcgi_pass unix:/tmp/php5-fpm.sock;, ad es. così:

vi /etc/nginx/conf.d/default.conf
[...]
    location ~ \.php$ {
        root           /usr/share/nginx/html;
        try_files $uri =404;
        fastcgi_pass   unix:/tmp/php5-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
[...]

Infine ricarica nginx:

/etc/init.d/nginx reload

  • 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/
  • CentOS:http://www.centos.org/

Informazioni sull'autore

Falko Timme è il proprietario di Timme Hosting (hosting web nginx ultra veloce). È il principale manutentore di HowtoForge (dal 2005) e uno degli sviluppatori principali di ISPConfig (dal 2000). Ha anche contribuito al libro di O'Reilly "Linux System Administration".


Cent OS
  1. Come installare Laravel 5.x con Nginx e PHP-FPM 7.1 su CentOS 7

  2. Installazione di Nginx con PHP5 (e PHP-FPM) e supporto MySQL (LEMP) su Ubuntu 14.04 LTS

  3. Installazione di Lighttpd con PHP5 (PHP-FPM) e supporto MySQL su Ubuntu 14.04LTS

  4. Installazione di Apache2 con PHP5 e supporto MySQL su OpenSUSE 13.1 (LAMP)

  5. Installazione di Lighttpd con PHP5 e supporto MySQL su Ubuntu 10.04

Installazione di Lighttpd con PHP5 (PHP-FPM) e MySQL su Debian 8 (Jessie)

Installazione di Apache2 con PHP5 e supporto MySQL su CentOS 6.2 (LAMP)

Installazione di Apache2 con PHP5 e supporto MySQL su CentOS 6.3 (LAMP)

Installazione di Apache2 con PHP5 e supporto MySQL su CentOS 6.4 (LAMP)

Installazione di Nginx con PHP5 (e PHP-FPM) e supporto MySQL su Fedora 19

Installazione di Apache2 con PHP5 e supporto MySQL su Fedora 20 (LAMP)