Zum Inhalt springen

[Tutorial] Nginx – WordPress installieren und optimieren

Quelle:

http://www.forum-raspberrypi.de/Thread-tutorial-slider-steuerung-fuer-digitalkamera

Da des öfteren die Frage auftaucht, wie man WordPress auf dem Nginx-Server installiert und ich dazu auch einige Fragen hatte, die geklärt werden konnten, dachte ich, stelle ich mal ein Mini-Tutorial zusammen.

Ausgangssituation:
– Nginx ist bereits installiert!
– das www-Verzeichnis lautet /var/www/.

Wenn noch nicht erledigt, dann bitte php-apc und mysql installieren.
php-apc ist quasi ein “einfaches” Caching-Modul für php5.

$ sudo apt-get install php5-apc php5-mysql mysql-server

Am Ende der Installation erstellen wir eine Datenbank für WordPress:

$ mysql -u <MYSQL-Benutzername> -p <MYSQL-Passwort>

 

$ mysql> CREATE DATABASE wordpress_db;
$ exit

Nun bearbeiten wir die php.ini-Datei:

$ sudo nano /etc/php5/fpm/php.ini

Wir fügen ganz am Ende der Datei hinzu:

; Enable caching
extension = apc.so
apc.enabled = 1
apc-cache_by_default=1
apc.include_once_override = 0
apc.shm_size=32M

; TTL
apc.ttl=7200
apc.user_ttl=7200
apc.gc_ttl=3600

; 0 = APC will not check for changes automatically
; best performance, but requires manual cache clean after
; changing your php files
;
; 1 = APC checks for changes automatically
; less performance, but highly recommended
apc.stat=1

; wait 2 seconds before caching freshly edited files
apc.file_update_protection=2

; dont cache files >2mb
apc.max_file_size=2M

Nun weiter in der php.ini:
1) HTTP-Header anpassen. Potentielle Angreifer können anhand des HTTP-Headers die installierte PHP-Version ablesen und entsprechende Schwachstellen ausnutzen.
In PuTTY kann man die PHP-Version so anzeigen lassen:

$ curl -I http://meinedomain.de/irgendeine-php-datei.php

In der php.ini-Datei suchen wir nach “expose_php =” und ändern “On” zu “Off”, falls nicht schon geschehen.

expose_php = Off;

Anschließend starten wir PHP-fpm neu:

$ sudo service php5-fpm restart

2) Remote-Code-Auführungen verhindern. Standardmäßig kann man mit include(), file_get_contents() etc. externe Dateien aufrufen.
Das verhindern wir indem wir nach “allow_url_fopen =” suchen und “On” zu “Off” ändern.
Wir machen dasselbe mit “allow_url_include”:

allow_url_fopen = Off
allow_url_include = Off

3) Script-Timeout setzen. In der php.ini-Datei stellen wir nun ein, wie ange ein Script ausgeführt und geparst werden darf. Außerdem stellen wir ein, wieviel Arbeitsspeicher ein Script verwenden darf:
Wir suchen nach folgenden drei Zeichenketten: “max_execution_time”, “max_input_time” und “memory_limit”

max_execution_time =  30
max_input_time = 30
memory_limit = 40M

4) Potentiell gefährliche PHP-Funktionen deaktivieren. PHP hat einige Funktionen, einige können von Angreifern aber auch leicht ausgenutzt werden.
Wer seinen Raspberry Pi nur als einfachen Webserver nutzt und z.B. keine externen Shell-Scripte aus PHP-Dateien heraus aufruft, sucht nach “disable_functions =”
Folge Zeile könnt ihr komplett übernehmen. WordPress und ownCloud haben keine Probleme damit:

disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
; added: exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

Nun installieren wir Wordress.
Wenn noch nicht erledigt, installieren wir “unzip”:

$ sudo apt-get install unzip

Nun laden wir WordPress herunter und entpacken es:

$ cd
$ wget https://de.wordpress.org/latest-de_DE.zip
$ unzip latest-de_DE.zip

Wir nehmen an, WordPress soll in das Unterverzeichnis /blog installiert werden:

$ sudo mkdir /var/www/blog/
$ sudo mv /wordpress/* /var/www/blog/

Nun rufen wir unsere Domain oder IP des Webservers auf und navigieren zu /blog.
Wir befolgen die Installationsanweisungen von WordPress und tippen bei “Datenbankname” den Namen der oben erstellten Datenbank ein.

Nginx-Konfiguration bearbeiten:
Damit wir auch “schöne URLs” ala “mod_rewrite” nutzen können, öffnen wir

$ sudo nano /etc/nginx/sites-available/default

Im Server-Block (http, Port 80) fügen wir unter “root /var/www/” hinzu:

# wordpress rewrite rules for nginx
location /blog {
try_files $uri $uri/ /blog/index.php?$args;
}

Anschließend starten wir Nginx neu:

$ sudo service nginx restart

wp-config.php bearbeiten:
Wir öffnen nun die Datei “wp-config.php” (zu finden im WordPress-Installationverzeichnis ) und fügen am Ende ein:

// Disable the post-revisioning feature
define('WP_POST_REVISIONS', false);

// Block External Requests
define('WP_HTTP_BLOCK_EXTERNAL', true);

// Disable automatic updates
define('WP_AUTO_UPDATE_CORE', false );

Damit unser Blog nicht überflutet und der Pi somit belastet wird, stellen wir im Administrations-Menu von WordPress unter “Einstellungen › Diskussion” Pingbacks aus indem wir den Haken bei “Erlaube Link-Benachrichtigungen von anderen Weblogs (Pingbacks und Trackbacks)” entfernen.
Das hat keinerlei Nachteile auf unseren Blog oder auf die SEO.

Das war’s erst mal. Nun könnte man noch einige Plug-Ins installieren, um WordPress zu verschönern und um die Performance zu verbessern. Aber das bleibt euch überlassen. Hier eine Liste meiner Plug-ins:
– FancyBox for WordPress >> bei Klick auf ein Bild, das Bild per Ajax laden und in Bildschirmmitte ausgeben
– Google XML Sitemaps >> sollte selbsterklärend sein
– jQuery lazy load plugin >> Nur Bilder in Artikeln laden und anzeigen, die sichtbar sind
– Scroll Back to Top >> ein kleiner Button am Ende einer Seite der bei Klick die Seite nach oben scrollt
– Statify >> eine anonymisierte Statistik (wir brauchen Google Analytics nicht!)
– Sticky Menu (or Anything!) on Scroll >> wenn das Hauptmenu oben aus dem Bildschirm raus fährt und eigentlich nicht mehr sichtbar sein sollte, so wird es oben sichtbar “festgeklebt” (position: fixed)
– W3 Total Cache >> Caching Plug-In, sollte jeder installieren
– WordPress Importer >> wenn man mal gesicherte XML-Dateien importieren möchte
– WP-Optimize >> löscht u.a. obsolete Daten aus der Datenbank
– WP fail2ban >> schützt WordPress gegen DoS-Attacken

Die Performance meiner WordPress-Installationen (ich habe zwei Installationen), ist, auch mit den vielen Plug-Ins, 1A!