HowTo: nginx mit PHP und MySQL auf Fedora oder Debian installieren

clip_image001

nginx ist ein leistungsfähiger HTTP, reverse Proxy und Mail Server, der weltweit immer mehr Verbreitung findet. Einige große Projekte, wie die große russische Suchmaschine Rambler, GitHub, SourceForge und Hulu verwenden nginx. nginx zeichnet hohe Leistung und Konfigurierbarkeit aus.

Vorwort

Die zu Grunde liegenden Distributionen sind Fedora 14, sowie aptosid 2010-03 (Debian sid / unstable). Die Codeblöcke über denen Fedora oder Debian steht sind spezifisch für die jeweilige Distribution. Boxen ohne Beschriftung sind für beide Distributionen gültig. Wenn als System Debian pur verwendet wird, dann wird dazu geraten aptitude anstatt apt-get als Paketmanager zu verwenden. Damit sie nicht die Paketmanager vermischen sollten sie daher bei ihrem aktuellen Paketmanager bleiben und apt-get einfach durch aptitude ersetzen, falls sie bisher aptitude verwendet haben.

clip_image002

1. MySQL installieren

Zuerst installieren wir mit Hilfe des Paketmanagers die MySQL Pakete:

Fedora
# yum install mysql mysql-server
Debian
# apt-get install mysql-client mysql-server

Als nächstes müssen wir festlegen wann unser MySQL Dienst laufen soll. Unter Linux kann das System verschiedene Betriebszustände annehmen, diese werden Runlevel genannt. Für einzelne Dienst muss somit festgelegt werden in welchen Runleveln sie laufen bzw. gestartet werden sollen. Für den Dienst MySQL bieten sich hier die Runlevel 2, 3 und 5 an. Die Runlevel Ordner sind hierbei bei beiden Distributionen an der selben Stelle zu finden. “/etc/rcx.d”.

Beide Distributionen bietet nützliche Programme mit dessen Hilfe wir unseren Dienst spielend leicht in die jeweiligen Runlevel Ordner eintragen können. Fedora verwendet “chkconfig” und Debian “update-rc.d”. Anschließend starten wir unseren Dienst von Hand um einen Neustart zu vermeiden.

Fedora
# chkconfig --levels 235 mysqld on
# /etc/init.d/mysqld start
Debian
# update-rc.d mysql defaults  
# /etc/init.d/mysqld start

Danach überprüfen wir ob unser MySQL Dienst im Netzwerk erreichbar ist.

# netstat -tap | grep mysql

Als Bestätigung solltet ihr folgende (ähnliche) Zeile in der Ausgabe finden. Wichtig hierbei sind die Einträge “mysql” und “LISTEN”.

tcp        0      0 *:mysql          *:*          LISTEN      1610/mysqld

 

Sollte dies nicht der Fall sein, so müsst ihr mit einem Texteditor eurer Wahl (z.B. nano oder vi) die Datei “/etc/my.cnf” bzw. /etc/mysql/my.cnf editieren und die Option “skip-networking” auskommentieren

Fedora
# nano /etc/my.cnf
Debian
# nano /etc/mysql/my.cnf

[…]

#skip-networking

[…]

 

…und anschließend den MySQL Dienst neustarten.

# /etc/init.d/mysqld restart

 

Im nächsten Schritt werden wir die Konfiguration unseres MySQL Servers vornehmen. Achtet hierbei auf die rot markierten Wörter im nächsten Abschnitt.

# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL

      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

 

In order to log into MySQL to secure it, we’ll need the current

password for the root user.  If you’ve just installed MySQL, and

you haven’t set the root password yet, the password will be blank,

so you should just press enter here.

 

Enter current password for root (enter for none):Enter

OK, successfully used password, moving on…

 

Setting the root password ensures that nobody can log into the MySQL

root user without the proper authorisation.

 

You already have a root password set, so you can safely answer ’n‘.

 

Change the root password? [Y/n] Enter

New password: Das neue root Passwort

Re-enter new password: Das neue root Passwort

Password updated successfully!

Reloading privilege tables..

… Success!

 

By default, a MySQL installation has an anonymous user, allowing anyone

to log into MySQL without having to have a user account created for

them.  This is intended only for testing, and to make the installation

go a bit smoother.  You should remove them before moving into a

production environment.

 

Remove anonymous users? [Y/n] Enter

… Success!

 

Normally, root should only be allowed to connect from ‚localhost‘.  This

ensures that someone cannot guess at the root password from the network.

 

Disallow root login remotely? [Y/n] Enter

… skipping.

 

By default, MySQL comes with a database named ‚test‘ that anyone can

access.  This is also intended only for testing, and should be removed

before moving into a production environment.

 

Remove test database and access to it? [Y/n] Enter

– Dropping test database…

… Success!

– Removing privileges on test database…

… Success!

 

 

Reloading the privilege tables will ensure that all changes made so far

will take effect immediately.

 

Reload privilege tables now? [Y/n] Enter

… Success!

 

Cleaning up…

 

All done!  If you’ve completed all of the above steps, your MySQL

installation should now be secure.

 

Thanks for using MySQL!

 

 

2. nginx installieren

Widmen wir uns nun der Installation von nginx, welches in beiden Fehlen in den Repositories als Paket vorhanden ist.

Fedora
# yum install nginx
Debian
#apt-get install nginx

Anschließend muss auch nginx in die Runlevel eingetragen und von Hand gestartet werden.

Fedora
# chkconfig --levels 235 nginx on
# /etc/init.d/nginx start
Debian
# update-rc.d nginx defaults  
# /etc/init.d/nginx start

Sind bis hierhin alle Schritte erfolgreich gewesen, so sollte es nun möglich sein folgende Startseite über den Hostname oder die lokale Netzwerk Adresse (z.B. https://127.0.0.1) auf dem Server aufzurufen. Sollte nicht die Willkommensseite von nginx erscheinen prüfen sie die letzten Schritte.

clip_image003

 

 

3. PHP5 installieren

Bei der Installation von PHP5 muss der folgende Abschnitt nur unter der Verwendung von Fedora beachtet werden. Debian Nutzer können bis zum Ende des Zitates springen.

Unter Fedora benötigen wir PHP-FPM für den PHP Support in nginx. Da in den offiziellen Fedora 14 Repository das Paket nicht vorhanden ist, binden wir das Repository von Remi ein und ersparen uns damit das Paket selbst zu kompilieren.

Fedora
 # rpm -ivh http://rpms.famillecollet.com/remi-release-14.rpm

Um das Repository zu aktivieren editieren wir “/etc/yum.repos.d/remi.repo” und setzen “enabled” auf 1 und deaktivieren die gpg Keyüberprüfung, indem wir “gpgcheck auf” 0 setzen.

Fedora
# nano /etc/yum.repos.d/remi.repo

[remi]

name=Les RPM de remi pour Fedora $releasever – $basearch

#baseurl=https://rpms.famillecollet.com/fedora/$releasever/remi/$basearch/

mirrorlist=https://rpms.famillecollet.com/fedora/$releasever/remi/mirror

enabled=1

gpgcheck=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

failovermethod=priority

 

[remi-test]

name=Les RPM de remi en test pour Fedora $releasever – $basearch

#baseurl=https://rpms.famillecollet.com/fedora/$releasever/test/$basearch/

mirrorlist=https://rpms.famillecollet.com/fedora/$releasever/test/mirror

enabled=0

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

failovermethod=priority

 

Nun ist es möglich das Paket php-fpm unter Fedora mit Hilfe des Paketmanagers yum zu installieren. Des weiteren werden noch einige andere benötigten Pakete installiert, wie die MySQL Unterstützung von/für PHP5.

Fedora
# yum install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-eaccelerator php-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy
Debian
# apt-get install php5-cgi php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-json php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

Danach editieren wir die “/etc/php.ini” Konfigurationsdatei und entkommentieren die Zeile “cgi.fix_pathinfo=1”:

Fedora
# nano /etc/php.ini
Debian
# nano /etc/php5/cgi/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.

; https://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo

cgi.fix_pathinfo=1

 

Unter Debian wird für die Verwendung von php-fastcgi ein Daemon benötigt, welche nicht von Haus aus mitgeliefert wird. Daher verwenden wir an dieser Stelle das folgende fertige Script und kopieren dies in “/etc/init.d/php-fastcgi”.

Debian
# nano /etc/init.d/php-fastcgi

Klick mich (php-fastcgi Daemon Script)

 

Jetzt erstellen wir noch eine Konfigurationsdatei in /etc/defaults für FastCGI

Debian
# nano /etc/default/php-fastcgi

# Should php-fastcgi run automatically on startup? (default: no)

START=yes

# Which user runs PHP? (default: www-data)

EXEC_AS_USER=www-data

# Host and TCP port for FASTCGI-Listener (default: localhost:9000)

FCGI_HOST=localhost FCGI_PORT=9000

# Environment variables, which are processed by PHP

PHP_FCGI_CHILDREN=5

PHP_FCGI_MAX_REQUESTS=1000

 

Danach muss der Daemon gestartet bzw. in den Autostart (Runlevel) geschrieben werden. Wir unterscheiden an dieser Stelle zwischen php-fpm (Fedora) und php-fastcgi (Debian).

Fedora
# chkconfig --levels 235 php-fpm on
# /etc/init.d/php-fpm start
Debian
# update-rc.d php-fastcgi defaults
# /etc/init.d/php-fastcgi start

Hinweis: PHP-FPM ist ein Daemon der einen FastCGI server auf Port 9000 bereitstellt.

 

4. nginx konfigurieren

Zum Abschluss müssen wir nun auch nginx konfigurieren. Dazu passen wir die Konfigurationsdatei von nginx an.

Fedora
# nano /etc/nginx/nginx.conf
Debian
# nano /etc/nginx/sites-available/default

Da es meist schwer ist eine Konfigurationsdatei für die breite Masse anzubieten stellen wir euch an dieser Stelle zwei Beispiel Konfigurationsdateien zu Verfügung, welche sich im Wiki von nginx befinden. ( https://wiki.nginx.org/NginxFullExample und https://wiki.nginx.org/NginxFullExample2 ). Die Konfiguration ist recht intuitiv.

Man kann jedoch auch mit der vom Paket mitgelieferten Konfigurationsdatei gut arbeiten. Bei dieser müssen nur ein paar kleine Änderungen durchgeführt werden. Optional können wir den Pfad zum Wurzelverzeichnis der Homepage ändern, der voreingestellte Pfad ist “/usr/share/nginx/” . Unter “The default server” ist dies einstellbar:

 

#

    # The default server

    #

    server {

        listen       80;

        server_name  _;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {

            root   /usr/share/nginx/html;

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

        }

 

Für den PHP5 Support muss die Passage mit der Überschrift “pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000”  entkommentiert werden und der Pfad von “fastcgi_param” zu “fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;” angepasst werden

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

#

location ~ \.php$ {

    root           html;

    fastcgi_pass   127.0.0.1:9000;

    fastcgi_index  index.php;

    fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;

    #für Fedora

    fastcgi_param SCRIPT_FILENAME /usr/share/nginx/www$fastcgi_script_name;

    #für Debian

    include        fastcgi_params;

}

 

Nachdem die Konfiguration abgeschlossen ist muss zu guter Letzt nginx neugestartet werden um die neue Konfiguration zu laden.

# /etc/init.d/nginx restart

Wenn bis hier hin alles geklappt hat sind sie fertig. Die Funktionalität von PHP5 und MySQL können mit einer kleinen Seite überprüft würden. Dazu legen wir die Seite info.php im Wurzelverzeichnis unseres nginx Servers an. Falls der Pfad nicht verändert wurde ist dies “/usr/share/nginx/html/”  unter Fedora und “/usr/share/nginx/www” unter Debian

Fedora
# nano /usr/share/nginx/html/info.php
Debian
# nano /usr/share/nginx/www/info.php

Mit dem Inhalt:

   1:  <?php 
   2:   phpinfo();
   3:   ?>

Diese Datei rufen wir jetzt im Browser auf (z.B. 127.0.0.1/info.php ).

clip_image004

Auf dieser Seite finden sie nun die Information welche Dienste und Einstellungen laufen bzw. verwendet werden.

clip_image005

Damit läuft jetzt ein nginx Webserver mit PHP und MySQL Unterstützung auf ihrem Rechner.

Herzlichen Glückwunsch!

Eine Antwort

  1. floh becker
    Veröffentlicht am 26. Februar 2011 um 21:20 | Permalink

    3. PHP ganz unten letzter Debian Befehl

    Debian
    # update-rc.d php-fastcgi defaults
    # chmod a+x /etc/init.d/php-fastcgi
    # /etc/init.d/php-fastcgi start