So richten Sie einen Redis-Server als Session-Handler für PHP unter Ubuntu 14.04 ein

Einführung

Redis ist ein Open-Source-Schlüsselwert-Cache- und Speichersystem, das aufgrund seiner erweiterten Unterstützung für verschiedene Datentypen, wie z. B. Hashes, Listen, Mengen und Bitmaps, auch als Datenstrukturserver bezeichnet wird. Es unterstützt auch Clustering, wodurch es häufig für hochverfügbare und skalierbare Umgebungen verwendet wird.

In diesem Tutorial erfahren Sie, wie Sie einen externen Redis-Server installieren und konfigurieren, der als Sitzungshandler für eine PHP-Anwendung unter Ubuntu 14.04 verwendet wird.

Der Session-Handler ist für das Speichern und Abrufen von in Sessions gespeicherten Daten verantwortlich. Standardmäßig verwendet PHP hierfür * files *. Ein externer Session-Handler kann verwendet werden, um scalable PHP surroundings hinter einer https://www.digitalocean.com/community/ zu erstellen. Tutorials / Einführung in die Konzepte von Haproxy und Load Balancing [Load Balancer], in denen alle Anwendungsknoten eine Verbindung zu einem zentralen Server herstellen, um Sitzungsinformationen auszutauschen.

Voraussetzungen

In diesem Tutorial werden wir mit zwei unterschiedlichen Servern arbeiten. Aus Sicherheits- und Leistungsgründen ist es wichtig, dass sich beide Droplets im selben Datencenter befinden (https://www.digitalocean.com/community/tutorials/how-to-set-up-and-use-digitalocean-private-networking). [ private networking] aktiviert. Folgendes benötigen Sie:

  • Ein PHP-Webserver mit LAMP oder https: //www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04[LEMP] unter Ubuntu 14.04 - wir verweisen auf diesen Server als * web *

  • Ein zweiter, sauberer Ubuntu 14.04-Server, auf dem Redis installiert wird - wir bezeichnen diesen Server als * redis *

Sie benötigen als regulärer Benutzer mit sudo permission einen ordnungsgemäßen SSH-Zugriff auf beide Server.

Schritt 1 - Installieren Sie den Redis Server

Als erstes müssen wir den Redis-Server auf unserem * redis * Droplet zum Laufen bringen.

Wir werden den regulären Ubuntu-Paketmanager mit einem vertrauenswürdigen PPA-Repository verwenden, das von Chris Lea bereitgestellt wird. Dies ist notwendig, um sicherzustellen, dass wir die neueste stabile Version von Redis erhalten.

Fügen Sie zunächst das PPA-Repository hinzu, indem Sie Folgendes ausführen:

sudo add-apt-repository ppa:chris-lea/redis-server

Drücken Sie + ENTER zur Bestätigung.

Jetzt müssen Sie den Paketmanager-Cache aktualisieren:

sudo apt-get update

Zum Schluss installieren wir Redis, indem wir Folgendes ausführen:

sudo apt-get install redis-server

Redis sollte jetzt auf Ihrem Server installiert sein. Führen Sie den folgenden Befehl aus, um die Installation zu testen:

redis-cli ping

Dadurch wird eine Verbindung zu einer Redis-Instanz hergestellt, die auf * localhost * an Port * 6379 * ausgeführt wird. Sie sollten ein * PONG * als Antwort erhalten.

Schritt 2 - Konfigurieren Sie Redis so, dass externe Verbindungen akzeptiert werden

Standardmäßig erlaubt Redis nur Verbindungen zu + localhost +, was im Grunde bedeutet, dass Sie nur auf den Server zugreifen können, auf dem Redis installiert ist. Diese Konfiguration muss geändert werden, damit Verbindungen von anderen Servern im selben privaten Netzwerk wie der * redis * -Server zugelassen werden.

Als erstes müssen wir die IP-Adresse des privaten Netzwerks des Redis-Rechners herausfinden. Die folgenden Schritte sollten auf dem * redis * -Server ausgeführt werden.

Führen Sie "+ ifconfig +" aus, um Informationen zu Ihren Netzwerkschnittstellen zu erhalten:

sudo ifconfig

Sie sollten eine Ausgabe ähnlich der folgenden erhalten:

Output    eth0      Link encap:Ethernet  HWaddr 04:01:63:7e:a4:01
             inet addr:188.166.77.33  Bcast:188.166.127.255  Mask:255.255.192.0
             inet6 addr: fe80::601:63ff:fe7e:a401/64 Scope:Link
             UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
             RX packets:3497 errors:0 dropped:0 overruns:0 frame:0
             TX packets:3554 errors:0 dropped:0 overruns:0 carrier:0
             collisions:0 txqueuelen:1000
             RX bytes:4895060 (4.8 MB)  TX bytes:619070 (619.0 KB)

   eth1      Link encap:Ethernet  HWaddr 04:01:63:7e:a4:02
             inet addr:  Bcast:10.133.255.255  Mask:255.255.0.0
             inet6 addr: fe80::601:63ff:fe7e:a402/64 Scope:Link
             UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
             RX packets:8 errors:0 dropped:0 overruns:0 frame:0
             TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
             collisions:0 txqueuelen:1000
             RX bytes:648 (648.0 B)  TX bytes:578 (578.0 B)

Suchen Sie nach dem der * eth1 * -Schnittstelle zugewiesenen + inet_addr +. In diesem Fall ist es "+ 10.133.14.9 +" - dies ist die IP-Adresse, die wir später verwenden werden, um vom * Web * -Server eine Verbindung zum * Redis * -Server herzustellen.

Öffnen Sie mit Ihrem bevorzugten Befehlszeileneditor die Datei "+ / etc / redis / redis.conf " und suchen Sie nach der Zeile, die die " bind +" - Definition enthält. Sie sollten Ihre * private Netzwerk-IP-Adresse * wie folgt in die Zeile einfügen:

sudo vim /etc/redis/redis.conf

/etc/redis/redis.conf

bind localhost

Wenn Sie "+ 127.0.0.1 " anstelle von " localhost +" sehen, ist das in Ordnung. Fügen Sie einfach Ihre private IP-Adresse hinzu, nachdem diese bereits vorhanden ist.

Jetzt müssen Sie nur noch den Redis-Dienst neu starten, um die Änderungen zu übernehmen:

sudo service redis-server restart

Mit dieser Änderung kann jeder Server innerhalb desselben privaten Netzwerks auch eine Verbindung zu dieser Redis-Instanz herstellen.

Schritt 3 - Legen Sie ein Passwort für den Redis Server fest

Um Ihrer Redis-Installation eine zusätzliche Sicherheitsebene hinzuzufügen, sollten Sie ein Kennwort für den Zugriff auf die Serverdaten festlegen. Wir werden die gleiche Konfigurationsdatei aus dem vorherigen Schritt bearbeiten, + / etc / redis / redis.conf +:

sudo vim /etc/redis/redis.conf

Kommentieren Sie nun die Zeile aus, die "+ requirepass +" enthält, und legen Sie ein sicheres Kennwort fest:

/etc/redis/redis.conf

requirepass

Starten Sie den Redis-Dienst neu, damit die Änderungen wirksam werden:

sudo service redis-server restart

Schritt 4 - Testen Sie die Verbindung und Authentifizierung von Redis

Um zu testen, ob alle Ihre Änderungen wie erwartet funktioniert haben, stellen Sie auf dem * redis * -Maschine eine Verbindung zum Redis-Dienst her:

redis-cli -h
Output10.133.14.9:6379>

Wenn Sie ein Passwort definiert haben und nun versuchen, auf die Daten zuzugreifen, sollten Sie einen AUTH-Fehler erhalten:

keys *
Output(error) NOAUTH Authentication required.

Um sich zu authentifizieren, müssen Sie nur den Befehl "+ AUTH " ausführen und das gleiche Passwort eingeben, das Sie in der Datei " / etc / redis / redis.conf +" definiert haben:

AUTH yourverycomplexpasswordhere

Sie sollten ein * OK * als Antwort erhalten. Wenn Sie jetzt laufen:

keys *

Die Ausgabe sollte ungefähr so ​​aussehen:

Output(empty list or set)

Diese Ausgabe bedeutet lediglich, dass Ihr Redis-Server leer ist. Dies ist genau das, was wir erwartet haben, da der * web * -Server noch nicht so konfiguriert ist, dass er diesen Redis-Server als Sitzungshandler verwendet.

Lassen Sie diese SSH-Sitzung geöffnet und mit "+ redis-cli " verbunden, während wir die nächsten Schritte ausführen. Wir kehren zur Eingabeaufforderung " redis-cli +" zurück, um zu überprüfen, ob die Sitzungsdaten ordnungsgemäß gespeichert wurden, nachdem wir die Änderungen vorgenommen haben notwendige Änderungen am * web * server.

Schritt 5 - Installieren Sie die Redis-Erweiterung auf dem Webserver

Die nächsten Schritte sollten auf dem * Web * -Server ausgeführt werden. Wir müssen die PHP-Redis-Erweiterung installieren, sonst kann PHP keine Verbindung zum Redis-Server herstellen.

Aktualisieren Sie zunächst Ihren Paketmanager-Cache, indem Sie Folgendes ausführen:

sudo apt-get update

Dann installiere das + php5-redis + Paket:

sudo apt-get install php5-redis

Ihr Webserver sollte nun eine Verbindung zu Redis herstellen können.

Schritt 6 - Legen Sie Redis als Standard-Sitzungshandler auf dem Webserver fest

Jetzt müssen wir die Datei "+ php.ini" auf dem * web * -Server bearbeiten, um den Standard-Session-Handler für PHP zu ändern. Der Speicherort dieser Datei hängt von Ihrem aktuellen Stapel ab. Für einen * LAMP * -Stack unter Ubuntu 14.04 ist dies normalerweise + / etc / php5 / apache2 / php.ini. Für einen * LEMP * -Stack unter Ubuntu 14.04 lautet der Pfad normalerweise + / etc / php5 / fpm / php.ini +.

Wenn Sie sich nicht sicher sind, wo sich Ihre Hauptdatei "+ php.ini" befindet, können Sie dies mit der Funktion "+ phpinfo () " herausfinden. Fügen Sie einfach den folgenden Code in eine Datei mit dem Namen " info.php +" in Ihrem Web-Stammverzeichnis ein:

<?php
phpinfo();

Wenn Sie über Ihren Browser auf das Skript zugreifen, suchen Sie die Zeile mit der geladenen Konfigurationsdatei. Dort sollten Sie den genauen Speicherort der geladenen Hauptdatei + php.ini + finden.

Öffnen Sie Ihre "+ php.ini" -Datei und suchen Sie nach der Zeile, die "+ session.save_handler" enthält. Der Standardwert ist "+ files ". Sie sollten es in " redis +" ändern.

In * LAMP * -Umgebungen:

sudo vim /etc/php5/apache2/php.ini

In * LEMP * -Umgebungen:

sudo vim /etc/php5/fpm/php.ini

/etc/php5/fpm/php.ini

session.save_handler = redis

Jetzt sollten Sie die Zeile finden, die "+ session.save_path " enthält. Kommentieren Sie es aus und ändern Sie den Wert so, dass er die Redis-Verbindungszeichenfolge enthält. Der Inhalt sollte diesem Format in einer Zeile folgen: ` tcp: // IPADDRESS: PORT? Auth = REDISPASSWORD +`

/etc/php5/fpm/php.ini

session.save_path = "tcp://?auth="

Speichern Sie die Datei und starten Sie den * php * -Dienst neu.

In * LAMP * -Umgebungen:

sudo service apache2 restart

In * LEMP * -Umgebungen:

sudo service php5-fpm restart

Schritt 7 - Redis Session Handling testen

Um sicherzustellen, dass Ihre Sitzungen jetzt von Redis verarbeitet werden, benötigen Sie ein PHP-Skript oder eine PHP-Anwendung, die Informationen zu Sitzungen speichert. Wir werden ein einfaches Skript verwenden, das einen Zähler implementiert - jedes Mal, wenn Sie die Seite neu laden, wird die gedruckte Nummer erhöht.

Erstellen Sie eine Datei mit dem Namen "+ test.php +" auf dem * web * -Server und platzieren Sie sie in Ihrem Dokumentenstammordner:

sudo vim test.php

/usr/share/nginx/html/test.php

<?php
//simple counter to test sessions. should increment on each page reload.
session_start();
$count = isset($_SESSION['count']) ? $_SESSION['count'] : 1;

echo $count;

$_SESSION['count'] = ++$count;

Zeigen Sie mit Ihrem Browser auf "+ http: /// test.php +", um auf das Skript zuzugreifen. Es sollte die Zahl jedes Mal erhöhen, wenn Sie die Seite neu laden.

Jetzt sollten Sie Sitzungsinformationen auf dem Redis-Server gespeichert haben. Um dies zu überprüfen, kehren Sie zu Ihrer SSH-Sitzung auf dem * redis * -Computer zurück, auf dem wir zuvor mit + redis-cli + eine Verbindung zum Redis-Service hergestellt haben. Rufen Sie den Inhalt erneut mit + Tasten * + ab:

keys *

Und Sie sollten eine Ausgabe ähnlich der folgenden erhalten:

Output1) "PHPREDIS_SESSION:j9rsgtde6st2rqb6lu5u6f4h83"

Dies zeigt, dass die Sitzungsinformationen auf dem Redis-Server gespeichert werden. Auf ähnliche Weise können Sie weitere Webserver mit dem Redis-Server verbinden.

Fazit

Redis ist ein leistungsstarker und schneller Schlüsselwertspeicherdienst, der auch als Sitzungshandler für PHP verwendet werden kann und skalierbare PHP-Umgebungen ermöglicht, indem ein verteiltes System für die Sitzungsspeicherung bereitgestellt wird. Weitere Informationen zum Skalieren von PHP-Anwendungen finden Sie in diesem Artikel: Horizontally Scaling PHP Applications.