GNU/Linux >> Linux Esercitazione >  >> Fedora

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

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:

  • 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/

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

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

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

  4. Installazione di Apache 2 con PHP5 e supporto MySQL su Fedora 21 (LAMP)

  5. Come installare Nginx con PHP-FPM e MySQL su Fedora 16 "Verne"

Installazione di Lighttpd con PHP5 (PHP-FPM) e supporto MySQL su Debian Wheezy

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 Nginx con PHP5 (e PHP-FPM) e supporto MySQL su CentOS 6.4

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