wiesi200
Goto Top

Nginx mit PHP und MySQL unter CENTOS 6

Willkommen bei meiner ersten Anleitung

Da ich mal einen neuen Webserver aufsetzen musste dachte ich mir mal muss es denn immer ein Apache sein.
Nach kurzer Suche bin ich auf Nginx gestoßen. Leider habe ich aber hierzu keine wirklich vollständige und funktionierende Anleitung gefunden.
Und da ich hier schon immer eine schreiben wollte dachte ich mir wass soll's, wobei man eigentlich schnell merkt das es sehr einfach ist.

back-to-topBasisinstallation

So besorgt euch als erstes mal eine CD von CENTOS und macht eine Minimalinstallation auf einem Server.
Da hier alles Menügeführt ist werde ich mich zu diesem Thema nicht stark auslassen.

Soweit so gut. Ihr sollte jetzt eine Linux Konsole vor euch haben.

Optional:
Ich hab mir als erstes gleich openssh installiert und remote weiter gemacht da ich das die Config Files nicht abtippen wollte.
yum install openssh
chkconfig --level 35 sshd on
service sshd start

back-to-topInstallation Nging

Nun geben wir dem Installer eine zusätzliche Paketquelle.
rpm -Uvh http://download.fedora.redhat.com/pub/epel/6/i386/epel-release-6-5.noarch.rpm
Hier Achtung der Pfad wird sich im Laufe der Zeit ändern.

Jetzt installieren wir gleich mal nginx
yum install nginx

und so sorgen wir dafür dass der Webserver beim Booten des Server automatisch starten, zusätzlich starten wir ihn auch gleich noch.
chkconfig --add nginx
chkconfig --level 35 nginx on
service nginx start

Der Webserver würde jetzt theoretisch laufen nur lässt die Firewall externe zugriffe noch nicht zu, dazu ändern wir iptables
vi /etc/sysconfig/iptables

folgender Eintrag reicht um den Port 80 der für HTML verwendet wird frei zu geben. Falls die Webseite auf einen anderen Port oder HTTPS verwendet werden soll muss der entsprechende Port freigegeben werden.
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

Nun die Firewall neu starten, damit die Änderung wirksam ist
service iptables restart

Wenn wir nun mit einem anderem Rechner im Netz mit einen Webbrowser die IP-Adresse des Servers aufrufen sollten wir eine Willkommensmeldung bekommen.

back-to-topInstallation PHP

Nun geht's an PHP. Erst mal wieder die Packete installieren.
yum install php-pear-Net-Socket php-pear php-common php-gd php-devel php php-mbstring php-pear-Mail php-cli php-imap php-snmp php-pdo php-xml php-pear-Auth-SASL php-ldap php-pear-Net-SMTP php-mysql spawn-fcgi

Jetzt brauchen wir ein Startscript für den den FastCGI Server.
Deshalb erzeugen wir einen Datei
vi /etc/init.d/phpfcgi

mit folgendem Inhalt (zu finden auf den nginx Webseite):
#!/bin/bash
#
# Startup script for the PHP FastCGI server.
#
# chkconfig: 345 85 15
# description: PHP is an HTML-embedded scripting language
# processname: php
# config: /etc/php.ini
 
# Source function library.
. /etc/rc.d/init.d/functions
 
PHPFCGI="/usr/bin/php-cgi"  
FCGIPORT="9000"  
FCGIADDR="127.0.0.1"  
FCGI_WEB_SERVER_ADDRS="127.0.0.1"  
PHP_FCGI_CHILDREN=5
PHP_FCGI_MAX_REQUESTS=1000
ALLOWED_ENV="PATH USER"  
PHPUSER=php
PIDFILE=/var/run/phpfcgi.pid
 
if [ -z "$PHP_FCGI_CHILDREN" ]; then  
  PHP_FCGI_CHILDREN=5
fi
 
ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS FCGI_WEB_SERVER_ADDRS"  
 
case "$1" in  
  start)
        PHPFCGI_START=$"Starting ${NAME} service: "  
        echo -n $PHPFCGI_START
 
        # check for $PHPUSER, create if non-existent
        if [ -z "`id -u $PHPUSER 2> /dev/null`" ]; then  
            useradd -s /sbin/nologin $PHPUSER
        fi
 
        # clean environment
        E=
        for i in $ALLOWED_ENV; do E="$E $i=${!i}"; done  
        daemon --user $PHPUSER --pidfile $PIDFILE "env - $E $PHPFCGI -q -b $FCGIADDR:$FCGIPORT &> /dev/null &"  
 
        pid=`pidof php-cgi`
        if [ -n "$pid" ]; then  
            echo $pid > $PIDFILE
            success $PHPFCGI_START
        else
            failure $PHPFCGI_START
        fi
        echo
        ;;
  stop)
        echo -n "Stopping php-fcgi: "  
        killproc -p $PIDFILE phpfcgi
        echo
        ;;
  status)
        status phpfcgi
        ;;
  restart)
        $0 stop
        $0 start
        ;;
  *)
        echo "Usage: $0 {start|stop|status|restart}"  
        exit 1
esac
 
exit 0

So, jetzt starten wir das ganze gleich noch und schauen wieder das alles bei Booten gleich läuft.
chmod +x /etc/init.d/phpfcgi
chkconfig --add phpfcgi
chkconfig --level 35 phpfcgi on
service phpfcgi start

back-to-topVirtual Host Configurieren

Da wir auf dem Server mehrere Webseiten betreiben wollen konfigurieren wir mal den ersten Virtual Host.
Dazu erstellen wieder eine Datei. Weitere Möglchkeiten sind gut mit Beispielen auf Nginx Seite dokumentiert.

Bitte erstetzt jeweils "domain" und "com" durch die für euch zutreffenden Namen.
vi /etc/nginx/conf.d/domain_com.conf

server {
    server_name  domain.com www.domain.com;

     location / {
        root   html/domain;
        index  index.php index.html index.htm;
    }

    location ~ \.php$ {
            root           html/domain;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
}

Jetzt brauchen wir noch eine Webseite
Dazu erstellen wir im Rootverzeichniss von nginx ein Unterverzeichniss und erstellen wieder eine Datei
mkdir /usr/share/nginx/html/domain
vi /usr/share/nginx/html/domain/index.php

Der Inhalt sollte für's erste reichen
<?php
    phpinfo();
?> 

Dann noch nginx neu starten damit Änderungen an der Config wirksam sind.

service nginx restart

Wenn wir jetzt an einem 2ten Rechner im Netz, im Falle eines Windows Rechners die hosts Datei bearbeiten und einen Eintrag für "www.domain.com" auf die IP des Servers setzten und diese dann in einem Browser www.domain.com aufrufen sollten wir was sehen.

back-to-topMySQL Installieren

Das ist jetzt eigentlich am einfachsten.
Wieder erst die benötigten Pakete installieren.
yum install mysql mysql-server

starten MySQL
chkconfig --level 35 mysqld on
service mysqld start

und setzen ein root Passwort
mysqladmin --user=root password 'password'  

back-to-topSchlusswort

Ich hoffe Ihr kommt mit dieser Schritt für Schrittanleitung klar.
In dieser Anleitung bin ich nicht, da es meiner Meinung nach zu umfangreich ist, auf Absicherung und Optimierung eingegangen. Wenn man also diesen Webserver in's Internet stellen will sollte man sich zu diesem Zweck sollte man sich noch in nginx, PHP und MySQL einlesen.

Ich bin gerne für Anregungen und Änderungen bereit und hoffe das mir keiner den Kopf abreißt da Linux nicht grad mein Steckenpferd ist und ich hier zum ersten Mal bewusst auf eine GUI verzichtet habe.

Content-Key: 178215

Url: https://administrator.de/contentid/178215

Printed on: April 18, 2024 at 09:04 o'clock