GNU/Linux >> LINUX-Kenntnisse >  >> Cent OS

Installieren von Nginx mit PHP5 (und PHP-FPM) und MySQL-Unterstützung unter CentOS 6.4

Nginx (ausgesprochen „Engine x“) ist ein kostenloser, hochleistungsfähiger Open-Source-HTTP-Server. Nginx ist bekannt für seine Stabilität, seinen umfangreichen Funktionsumfang, seine einfache Konfiguration und seinen geringen Ressourcenverbrauch. Dieses Tutorial zeigt, wie Sie Nginx auf einem CentOS 6.4-Server mit PHP5-Unterstützung (über PHP-FPM) und MySQL-Unterstützung installieren können.

Ich gebe keine Garantie dafür, dass dies bei Ihnen funktioniert!

1 Vorbemerkung

In diesem Tutorial verwende ich den Hostnamen server1.example.com mit der IP-Adresse 192.168.0.100. Diese Einstellungen können für Sie abweichen, daher müssen Sie sie gegebenenfalls ersetzen.

2 Aktivieren zusätzlicher Repositories

php-fpm ist nicht in den offiziellen CentOS-Repositorys verfügbar, sondern im Remi-RPM-Repository, das selbst vom EPEL-Repository abhängt; wir können beide Repositories wie folgt aktivieren:

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

Bearbeiten Sie /etc/yum.repos.d/epel.repo...

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

... und fügen Sie die Zeile priority=10 zum Abschnitt [epel] hinzu:

[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
[...]

Machen Sie dann dasselbe für den Abschnitt [remi] in /etc/yum.repos.d/remi.repo, plus ändern Sie aktiviert auf 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 Installation von MySQL 5

Zuerst installieren wir MySQL 5 wie folgt:

yum install mysql mysql-server

Dann erstellen wir die Systemstart-Links für MySQL (damit MySQL automatisch startet, wenn das System hochfährt) und starten den MySQL-Server:

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

Überprüfen Sie nun, ob das Netzwerk aktiviert ist. Ausführen

netstat -tap | grep mysql

Es sollte etwa so aussehen:

[[email protected] ~]# netstat -tap | grep mysql
tcp        0      0 *:mysql                     *:*                         LISTEN      1799/mysqld
[[email protected] ~]#

Wenn dies nicht der Fall ist, bearbeiten Sie /etc/my.cnf und kommentieren Sie die Option skip-networking:

aus
vi /etc/my.cnf
[...]
#skip-networking
[...]

und starten Sie Ihren MySQL-Server neu:

/etc/init.d/mysqld restart

Ausführen

mysql_secure_installation

um ein Passwort für den Benutzer root festzulegen (ansonsten kann jeder auf Ihre MySQL-Datenbank zugreifen!):

[[email protected] ~]# mysql_secure_installation




HINWEIS:DAS AUSFÜHREN ALLER TEILE DIESES SKRIPTS WIRD FÜR ALLE MySQL
      SERVER IM PRODUKTIONSZWECK EMPFOHLEN ! BITTE JEDEN SCHRITT SORGFÄLTIG DURCHLESEN!


Um sich bei MySQL anzumelden, um es zu sichern, benötigen wir das aktuelle
Passwort für den Root-Benutzer. Wenn Sie gerade MySQL installiert und
das Root-Passwort noch nicht festgelegt haben, ist das Passwort leer,
also sollten Sie hier einfach die Eingabetaste drücken.

Enter Aktuelles Passwort für Root (Eingabe für keine): <-- ENTER
OK, erfolgreich verwendetes Passwort, weiter ...

Das Festlegen des Root-Passworts stellt sicher, dass sich niemand bei MySQL anmelden kann
Root-Benutzer ohne die entsprechende Berechtigung.

Root-Passwort festlegen? [Y/n] <-- ENTER
Neues Passwort: <-- yourrootsqlpassword
Neues Passwort erneut eingeben: <-- yourrootsqlpassword
Passwort erfolgreich aktualisiert!
Berechtigungstabellen werden neu geladen. .
 ... Erfolg!


Standardmäßig hat eine MySQL-Installation einen anonymen Benutzer, der ermöglicht, dass sich jeder
bei MySQL anmelden kann, ohne ein Benutzerkonto haben zu müssen für
sie erstellt. Dies ist nur zum Testen sollte und damit die Installation
etwas flüssiger läuft. Sie sollten sie entfernen, bevor Sie in eine
Produktionsumgebung wechseln.

Anonyme Benutzer entfernen? [Y/n] <-- ENTER
 ... Erfolgreich!

Normalerweise sollte root nur erlaubt werden, sich von 'localhost' aus zu verbinden. Dies
stellt sicher, dass niemand das Root-Passwort aus dem Netzwerk erraten kann.

Root-Anmeldung aus der Ferne nicht zulassen? [J/n] <-- EINGABE
 ... Erfolg!

Standardmäßig wird MySQL mit einer Datenbank namens "test" geliefert, auf die jeder
zugreifen kann. Dies ist ebenfalls nur zum Testen vorgesehen und sollte entfernt werden
bevor in eine Produktionsumgebung umgezogen wird.

Testdatenbank und Zugriff darauf entfernen? [Y/n] <-- ENTER
 - Testdatenbank wird gelöscht...
 ... Erfolg!
 - Berechtigungen für Testdatenbank entfernen...
 ... Erfolg !

Das Neuladen der Berechtigungstabellen stellt sicher, dass alle bisher vorgenommenen Änderungen
sofort wirksam werden.

Berechtigungstabellen jetzt neu laden? [Y/n] <-- EINGABE
 ... Erfolg!

Aufräumen ...



Alle fertig! Wenn Sie alle oben genannten Schritte ausgeführt haben, sollte Ihre MySQL-Installation
jetzt sicher sein.

Vielen Dank, dass Sie MySQL verwenden!


[[ E-Mail-geschützt] ~]#

4 Installieren von Nginx

Nginx ist als Paket für CentOS 6.4 (von EPEL) verfügbar, das wir wie folgt installieren können:

yum install nginx

Dann erstellen wir die Systemstartlinks für nginx und starten es:

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

Geben Sie die IP-Adresse oder den Hostnamen Ihres Webservers in einen Browser ein (z. B. http://192.168.0.100), und Sie sollten die Willkommensseite von nginx sehen:

5 Installation von PHP5

Wir können PHP5 in nginx durch PHP-FPM zum Laufen bringen (PHP-FPM (FastCGI Process Manager) ist eine alternative PHP-FastCGI-Implementierung mit einigen zusätzlichen Funktionen, die für Websites jeder Größe nützlich sind, insbesondere für stark frequentierte Websites). Wir können php-fpm zusammen mit php-cli und einigen PHP5-Modulen wie php-mysql installieren, die Sie benötigen, wenn Sie MySQL aus Ihren PHP-Skripten wie folgt verwenden möchten:

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 ist ein kostenloser und offener PHP-Opcode-Cacher zum Caching und Optimieren von PHP-Zwischencode. Es ähnelt anderen PHP-Opcode-Cachern wie eAccelerator und Xcache. Es wird dringend empfohlen, eines davon zu installieren, um Ihre PHP-Seite zu beschleunigen.

APC kann wie folgt installiert werden:

yum install php-pecl-apc

Öffnen Sie dann /etc/php.ini und setzen Sie 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
[...]

(Bitte lesen Sie http://wiki.nginx.org/Pitfalls, um herauszufinden, warum Sie dies tun sollten.)

Außerdem, um Fehler wie

zu vermeiden
[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 wenn Sie ein PHP-Skript in Ihrem Browser aufrufen, sollten Sie date.timezone in /etc/php.ini:

setzen
[...]
[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"
[...]

Sie können die richtige Zeitzone für Ihr System herausfinden, indem Sie Folgendes ausführen:

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

Erstellen Sie als Nächstes die Systemstartlinks für php-fpm und starten Sie es:

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

PHP-FPM ist ein Daemon-Prozess (mit dem Init-Skript /etc/init.d/php-fpm), der einen FastCGI-Server auf Port 9000 ausführt.

6 Konfiguration von nginx

Die nginx-Konfiguration befindet sich in /etc/nginx/nginx.conf, die wir jetzt öffnen:

vi /etc/nginx/nginx.conf

Die Konfiguration ist leicht verständlich (mehr darüber erfahren Sie hier:http://wiki.codemongers.com/NginxFullExample und hier:http://wiki.codemongers.com/NginxFullExample2)

Zuerst (dies ist optional) können Sie die Anzahl der Worker-Prozesse erhöhen und das keepalive_timeout auf einen vernünftigen Wert setzen:

[...]
worker_processes  4;
[...]
    keepalive_timeout  2;
[...]

Die virtuellen Hosts sind in Server-{}-Containern im Verzeichnis /etc/nginx/conf.d definiert. Ändern wir den Standard-vhost (in /etc/nginx/conf.d/default.conf) wie folgt:

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;
    }
}

Servername _; macht dies zu einem Standard-Catchall-Vhost (natürlich können Sie hier auch einen Hostnamen wie www.example.com angeben).

In der Position / Teil habe ich index.php zur Indexzeile hinzugefügt. root /usr/share/nginx/html; bedeutet, dass der Dokumentenstamm das Verzeichnis /usr/share/nginx/html ist.

Der wichtige Teil für PHP ist die Zeile location ~ \.php$ {}. Kommentieren Sie es aus, um es zu aktivieren. Ändern Sie die Root-Zeile in das Document Root der Website (z. B. root /usr/share/nginx/html;). Bitte beachten Sie, dass ich die Zeile try_files $uri =404; um Zero-Day-Exploits zu verhindern (siehe http://wiki.nginx.org/Pitfalls#Passing_Unkontrollierte_Requests_to_PHP und http://forum.nginx.org/read.php?2,88845,page=3). Bitte stellen Sie sicher, dass Sie die Zeile fastcgi_param in fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name ändern; weil sonst der PHP-Interpreter das PHP-Skript nicht findet, das Sie in Ihrem Browser aufrufen ($document_root bedeutet übersetzt /usr/share/nginx/html, weil wir das als unser Dokument-Root festgelegt haben).

PHP-FPM lauscht standardmäßig auf Port 9000 auf 127.0.0.1, daher weisen wir nginx an, sich mit 127.0.0.1:9000 mit der Zeile fastcgi_pass 127.0.0.1:9000; zu verbinden. Es ist auch möglich, PHP-FPM dazu zu bringen, einen Unix-Socket zu verwenden - ich werde dies in Kapitel 7 beschreiben.

Speichern Sie nun die Datei und laden Sie nginx neu:

/etc/init.d/nginx reload

Erstellen Sie nun die folgende PHP-Datei im Dokumentenstammverzeichnis /usr/share/nginx/html...

vi /usr/share/nginx/html/info.php
<?php
phpinfo();
?>

Nun nennen wir diese Datei in einem Browser (z. B. http://192.168.0.100/info.php):

Wie Sie sehen, funktioniert PHP5 und es funktioniert über FPM/FastCGI, wie in der Server-API-Zeile gezeigt. Wenn Sie weiter nach unten scrollen, sehen Sie alle Module, die bereits in PHP5 aktiviert sind, einschließlich des MySQL-Moduls:

7 PHP-FPM dazu bringen, einen Unix-Socket zu verwenden

Standardmäßig lauscht PHP-FPM auf Port 9000 auf 127.0.0.1. Es ist auch möglich, PHP-FPM dazu zu bringen, einen Unix-Socket zu verwenden, wodurch der TCP-Overhead vermieden wird. Öffnen Sie dazu /etc/php-fpm.d/www.conf...

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

... und lass die Listen-Zeile wie folgt aussehen:

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

Laden Sie dann PHP-FPM neu:

/etc/init.d/php-fpm reload

Gehen Sie als Nächstes Ihre Nginx-Konfiguration und alle Ihre vhosts durch und ändern Sie die Zeile fastcgi_pass 127.0.0.1:9000; zu fastcgi_pass unix:/tmp/php5-fpm.sock;, z.B. so:

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;
    }
[...]

Zum Schluss nginx neu laden:

/etc/init.d/nginx reload

  • nginx:http://nginx.org/
  • nginx-Wiki: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/

Über den Autor

Falko Timme ist Der Besitzer von Timme Hosting (ultraschnelles Nginx-Webhosting). Er ist der Hauptbetreuer von HowtoForge (seit 2005) und einer der Kernentwickler von ISPConfig (seit 2000). Er hat auch zum O'Reilly-Buch "Linux System Administration" beigetragen.


Cent OS
  1. So installieren Sie Laravel 5.x mit Nginx und PHP-FPM 7.1 unter CentOS 7

  2. Installieren von Nginx mit PHP5 (und PHP-FPM) und MySQL-Unterstützung (LEMP) unter Ubuntu 14.04 LTS

  3. Installation von Lighttpd mit PHP5 (PHP-FPM) und MySQL-Unterstützung auf Ubuntu 14.04LTS

  4. Installieren von Apache2 mit PHP5- und MySQL-Unterstützung auf OpenSUSE 13.1 (LAMP)

  5. Installieren von Lighttpd mit PHP5- und MySQL-Unterstützung auf Ubuntu 10.04

Lighttpd mit PHP5 (PHP-FPM) und MySQL auf Debian 8 (Jessie) installieren

Installieren von Apache2 mit PHP5- und MySQL-Unterstützung auf CentOS 6.2 (LAMP)

Installieren von Apache2 mit PHP5- und MySQL-Unterstützung auf CentOS 6.3 (LAMP)

Installieren von Apache2 mit PHP5- und MySQL-Unterstützung auf CentOS 6.4 (LAMP)

Installieren von Nginx mit PHP5 (und PHP-FPM) und MySQL-Unterstützung auf Fedora 19

Installieren von Apache2 mit PHP5- und MySQL-Unterstützung auf Fedora 20 (LAMP)