Detaillierte Erklärung des gesamten Prozesses zum Erstellen eines persönlichen Blogs mit nginx+WordPress

Detaillierte Erklärung des gesamten Prozesses zum Erstellen eines persönlichen Blogs mit nginx+WordPress

0x00 Einführung

WordPress ist das beliebteste CMS-System der Welt. Es basiert auf dem PHP- und MySQL-Technologie-Stack und verfügt über zahlreiche Plug-Ins, wodurch es sehr erweiterbar ist. Ich hatte vor kurzem zufällig ein ECS übrig und habe zum Spaß eines gebaut. Dieses Tutorial basiert auf dem LEMP-Technologie-Stack. Die Versionen sind wie folgt:

  1. Die L-Version ist CentOS7.6.
  2. E-Version ist nginx1.12.2
  3. M-Version ist Distrib 5.5.60-MariaDB
  4. Die P-Version ist php7.2

Darüber hinaus ist vollständiges https jetzt ein Trend, und natürlich können wir nicht zurückfallen, also werden wir auch Let's Encrypt verwenden, um kostenlose SSL-Zertifikate für die Konfiguration zu generieren

0x01 Voraussetzungen

  • Es gibt einen Domänennamen, mein eigener Domänenname ist nomansky.xyz
  • Ein VPS oder Cloud-Server, wenn es sich um eine inländische IP handelt, muss registriert werden
  • Ein Benutzer mit Sudo- oder Root-Rechten. Hier erstelle ich einen neuen WordPress-Benutzer, um das Programm auszuführen, und stelle ihn mit dem folgenden Befehl auf nologin ein
    • ein. sudo useradd -s /sbin/nologin wordpress
  • Installierte die Epel-Quelle mit sudo yum install -y epel-release
  • Schalten Sie Firewall aus. Ich bevorzuge die Verwendung von iptables zur Verstärkung der Sicherheit.
    • a. sudo systemctl stop firewalld
    • b. sudo systemctl deaktivieren Sie Firewall

0x02 Installieren Sie nginx

  • Führen Sie „sudo yum install nginx“ aus, um nginx zu installieren.
  • Starten Sie den Nginx-Daemon und stellen Sie ihn so ein, dass er beim Booten automatisch startet.
    • a. sudo systemctl start nginx
    • b. sudo systemctl enable nginx
  • Fügen Sie den WordPress-Benutzer zur Nginx-Gruppe usermod -a -G nginx wordpress hinzu und legen Sie die Verzeichnisberechtigungen chmod 770 -R /var/lib/nginx/ fest.
  • Besuchen Sie jetzt http://nomansky.xyz und Sie sehen die folgende Seite. Dies bedeutet, dass nginx erfolgreich installiert wurde.

0x03Mariadb installieren

Mariadb ist als Open-Source-Zweig von MySQL zur Standarddatenbank geworden, die von CentOS als Ersatz für MySQL verwendet wird. Daher verwende ich hier auch Mariadb als Datenbank.

  • Führen Sie sudo yum install mariadb-server -y aus, um MariaDB zu installieren.
  • Starten Sie Mariadb und stellen Sie es so ein, dass es beim Booten automatisch startet
    • a. sudo systemctl starte mariadb
    • b. sudo systemctl aktiviere MariaDB
  • Führen Sie sudo mysql_secure_installation aus, um Mariadb zu sichern. Sie werden Anforderungen zum Festlegen des Datenbank-Root-Passworts, zum Entfernen anonymer Benutzer, zum Beschränken der Datenbank-Root-Benutzer auf localhost und zum Entfernen der Testdatenbank sehen. Es wird empfohlen, für alle diese Punkte Y (JA) auszuwählen, wie in der folgenden Abbildung gezeigt. Das Standard-Datenbank-Root-Passwort ist leer

Darüber hinaus muss die Adresse, auf der MariaDB lauscht, 127.0.0.1:3306 geändert werden.

a. vim /etc/my.cnf.d/server.cnf , um die Mariadb-Konfigurationsdatei zu öffnen

b. Fügen Sie bind=127.0.0.1 unter [mysqld] hinzu, wie unten gezeigt


c. Führen Sie systemctl restart mariadb aus, um die Datenbank neu zu starten

d. Führen Sie netstat -lntp aus und Sie können sehen, dass es auf die lokale Loopback-Adresse lauscht.

0x04 Erstellen einer Datenbank

Nachdem wir die MariaDB-Datenbank installiert und gehärtet haben, müssen wir natürlich eine neue Datenbank zum Speichern von Daten erstellen. Hier verwenden wir zunächst das zuvor festgelegte Root-Kontokennwort, um uns bei der Datenbank mysql -uroot -p anzumelden und die folgenden Anweisungen auszuführen

DATENBANK ERSTELLEN wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; # Datenbank erstellen GRANT ALL ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY 'Ihr Passwort'; # Benutzer erstellen FLUSH PRIVILEGES; # Datenbankberechtigungen aktualisieren EXIT;

0x05 PHP installieren

Die Standard-PHP-Version von CentOS ist 5.4, aber die empfohlene Version von WordPress ist 7.2, daher installieren wir hier die PHP-Version 7.2. Führen Sie den folgenden Befehl aus, um PHP und alle erforderlichen PHP-Erweiterungen zu installieren

sudo yum installiere yum-utils
sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum-config-manager --enable remi-php72
sudo yum installiere php-cli php-fpm php-mysql php-json php-opcache php-mbstring php-xml php-gd php-curl

Wir installieren PHP FPM, weil wir Nginx als unseren Webserver verwenden und Nginx nicht mit dieser Komponente geliefert wird. Darüber hinaus läuft PHP FPM standardmäßig als Apache-Benutzer auf Port 9000. Wir ändern diesen Benutzer in WordPress und ändern ihn von TCP-Socket in Unix-Socket. Einzelheiten zur Änderung finden Sie in den folgenden Schritten.

Öffnen Sie /etc/php-fpm.d/www.conf und ändern Sie die folgenden Stellen

...
Benutzer = WordPress
...
Gruppe = WordPress
...
listen = /run/php-fpm/www.sock
...
listen.owner = WordPress
listen.group = WordPress

Verwenden Sie den Befehl sudo chown -R root:wordpress /var/lib/php um sicherzustellen, dass alle Gruppenberechtigungen des Verzeichnisses wordpress sind

PHP FPM neu starten und automatisch starten

a. sudo systemctl restart php-fpm
b. sudo systemctl enable php-fpm

0x06 Kostenloses Zertifikat beantragen

Als Technikfreak würde ich auf jeden Fall ein kostenloses Zertifikat nutzen, wenn eines verfügbar ist. Daher können wir ein kostenloses Let’s Encrypt-Zertifikat beantragen, das nicht nur kostenlos, sondern auch sehr einfach zu verwenden ist. Obwohl es jeweils nur 90 Tage gültig ist, kann es regelmäßig über die Skriptkonfiguration crontab aktualisiert werden.

a. Das Verzeichnis mkdir -p /etc/nginx/ssl speichert das Zertifikat

b. openssl genrsa 4096 > account.key Gehen Sie in dieses Verzeichnis und erstellen Sie einen privaten RSA-Schlüssel für Let’s Encrypt, um Sie zu identifizieren

c. openssl genrsa 4096 > domain.key zum Erstellen eines privaten RSA-Schlüssels für den Domänennamen

d. openssl req -new -sha256 -key domain.key -out domain.csr der privaten Schlüsseldatei können Sie die CSR-Datei generieren. Beim Generieren eines CSR werden Sie aufgefordert, einige Informationen einzugeben. Der allgemeine Name ist hier Ihr Domänenname.

Wir wissen, dass eine Zertifizierungsstelle bei der Ausstellung eines DV-Zertifikats (Domain Validation) den Besitz des Domänennamens überprüfen muss. Die herkömmliche CA-Verifizierungsmethode besteht im Allgemeinen darin, eine Bestätigungs-E-Mail an [email protected] zu senden, während Let’s Encrypt eine zufällige Verifizierungsdatei auf Ihrem Server generiert und dann über den beim Erstellen des CSR angegebenen Domänennamen darauf zugreift. Wenn darauf zugegriffen werden kann, bedeutet dies, dass Sie die Kontrolle über den Domänennamen haben. Erstellen Sie daher zunächst ein Verzeichnis zum Speichern der Überprüfungsdateien, zum Beispiel:
mkdir /home/wordpress/challenges

Konfigurieren Sie dann einen HTTP-Dienst am Beispiel von Nginx:

Server {
  Servername www.nomansky.xyz nomansky.xyz;

  Standort ^~ /.well-known/acme-challenge/ {
    Alias ​​/home/wordpress/challenges/;
    versuche_dateien $uri =404;
  }

  Standort / {
    umschreiben ^/(.*)$ https://nomansky.xyz/$1 permanent;
  }
}

Die obige Konfiguration bedeutet, dass im Verzeichnis /home/wordpress/challenges/ nach Dateien gesucht wird und, falls diese nicht gefunden werden, eine Weiterleitung zur HTTPS-Adresse erfolgt. Dieser Prüfdienst wird bei zukünftigen Aktualisierungen des Zertifikats erneut verwendet und muss daher stets aufbewahrt werden.

Als nächstes speichern Sie acme-tiny im SSL-Verzeichnis wget https://raw.githubusercontent.com/diafygi/acme-tiny/master/acme_tiny.py

Geben Sie dann den privaten Schlüssel des Kontos, die CSR und das Bestätigungsverzeichnis an und führen Sie das Skript python acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir /home/wordpress/challenges/ > ./signed.crt aus. Das folgende Bild zeigt, dass die Generierung erfolgreich war.

Zum Schluss müssen Sie noch das Zwischenzertifikat von Let’s Encrypt herunterladen. Achten Sie beim Konfigurieren des HTTPS-Zertifikats darauf, das Zwischenzertifikat nicht wegzulassen und das Stammzertifikat nicht mit einzuschließen. In der Nginx-Konfiguration müssen Sie das Zwischenzertifikat und das Website-Zertifikat kombinieren:

wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem
Katze signiert.crt Zwischenprodukt.pem > verkettet.pem

Um OCSP Stapling später reibungslos zu ermöglichen, werden wir das Stammzertifikat und das Zwischenzertifikat zusammenführen (dieser Schritt kann auch weggelassen werden)

wget -O - https://letsencrypt.org/certs/isrgrootx1.pem > root.pem
Katze intermediate.pem root.pem > full_chained.pem

Das von Let’s Encrypt ausgestellte Zertifikat ist nur 90 Tage gültig. Es wird empfohlen, es mithilfe von Skripten regelmäßig zu erneuern. Erstellen Sie eine renew_cert.sh und erteilen Sie ihr über chmod a+x renew_cert.sh die Ausführungsberechtigung. Der Dateiinhalt ist wie folgt:

#!/bin/bash

cd /etc/nginx/ssl/
python acme_tiny.py --account-key account.key --csr domain.csr --acme-dir /home/wordpress/challenges/ > signiert.crt || beenden
wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem
Katze signiert.crt Zwischenprodukt.pem > verkettet.pem
systemctl startet nginx neu

Konfigurieren Sie die geplante Aufgabe in Crontabl 0 0 1 * * /etc/nginx/ssl/renew_cert.sh >/dev/null 2>&1

0x07 WordPress herunterladen und Nginx konfigurieren

Laden Sie WordPress in /home/wordpress/ wget https://wordpress.org/latest.tar.gz

tar zxvf latest.tar.gz zum Extrahieren der WordPress-Dateien

chown -R wordpress:wordpress wordpress ändert den Besitzer des WordPress-Verzeichnisses zum WordPress-Benutzer

Öffnen Sie als nächstes vim /etc/nginx/nginx.conf und ändern Sie die laufende Rolle von nginx in WordPress

···
Benutzer WordPress;
Arbeiterprozesse automatisch;
···

Dann kommentiere ich hier den Serverkonfigurationsblock in der Hauptkonfigurationsdatei nginx.conf zwecks Entkopplung aus.

Erstellen Sie ein neues Verzeichnis sudo mkdir /etc/nginx/snippets und fügen Sie vim letsencrypt.conf die folgende Konfiguration darin ein

Standort ^~ /.well-known/acme-challenge/ {
   Alias ​​/home/wordpress/challenges/;
   versuche_dateien $uri =404;
}

Erstellen Sie als Nächstes eine neue vim /etc/nginx/conf.d/wordpress.conf und ändern Sie sie in die folgende Konfiguration

 # Umleitung HTTP -> HTTPS
  Server {
    hören Sie 80;
    Servername www.nomansky.xyz nomansky.xyz;

    snippets/letsencrypt.conf einschließen;
    Rückgabewert 301 https://nomansky.xyz$request_uri;
  }

  # Umleitung WWW -> NICHT WWW
  Server {
    hören Sie 443 SSL http2;
    Servername www.nomansky.xyz;

    SSL-Zertifikat /etc/nginx/ssl/chained.pem;
    SSL-Zertifikatsschlüssel /etc/nginx/ssl/domain.key;

    gibt 301 https://nomansky.com$request_uri zurück;
  }

  Server {
    hören Sie 443 SSL http2;
    Servername nomansky.com;

    Stammverzeichnis /home/wordpress/wordpress;
    Indexierung index.php;

    # SSL-Parameter
    SSL-Zertifikat /etc/nginx/ssl/chained.pem;
    SSL-Zertifikatsschlüssel /etc/nginx/ssl/domain.key;

    # Protokolldateien
    Zugriffsprotokoll /home/wordpress/log/nomansky.xyz.access.log;
    Fehlerprotokoll /home/wordpress/log/nomansky.xyz.error.log;

    Standort = /favicon.ico {
      log_not_found aus;
      Zugriff_Abmeldung;
    }
    
          Standort = /robots.txt {
      alles erlauben;
      log_not_found aus;
      Zugriff_Abmeldung;
    }

    Standort / {
      versuche_dateien $uri $uri/ /index.php?$args;
    }

    Standort ~ \.php$ {
      versuche_dateien $uri =404;
      fastcgi_pass unix:/run/php-fpm/www.sock;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $Dokumentstammsatz$fastcgi_script_name;
      fastcgi_params einschließen;
    }

    Standort ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
      läuft maximal ab;
      log_not_found aus;
    }

Erstellen Sie ein Protokollverzeichnis mkdir -p /home/wordpress/log und legen Sie die Berechtigungen chown -R wordpress:wordpress /home/wordpress/log

nginx -t prüft, ob die Syntaxprüfung normal ist. Wenn dies der Fall ist, laden Sie nginx nginx -s reload neu.

Als Nächstes sehen Sie, dass die WordPress-Seite erfolgreich geöffnet wurde und Sie fertig sind.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • In sechs Schritten lernen Sie, von Grund auf ein persönliches Blog auf WordPress-Basis zu erstellen.
  • Detaillierte Schritte zum Einrichten des Hosts Nginx + Docker WordPress Mysql
  • Detaillierte Erläuterung der WordPress-Multisite-Konfiguration in der Nginx-Umgebung
  • Beispiel zum Festlegen der pseudostatischen WordPress-Eigenschaft in Nginx
  • So konfigurieren Sie WordPress mit Nginx
  • Detailliertes grafisches Tutorial zur Lösung des Problems des langsamen Zugriffs auf die WordPress-Website

<<:  MySQL implementiert Protokollverwaltung, Sicherung und Wiederherstellung auf Unternehmensebene – praktisches Tutorial

>>:  Javascript Frontend Optimierungscode

Artikel empfehlen

So ändern Sie die Längenbeschränkung von group_concat in MySQL

In MySQL gibt es eine Funktion namens „group_conc...

JavaScript ermittelt, ob der Browser IE ist

Als Frontend-Entwickler komme ich an den Tücken d...

Tutorial zur Installation von MySQL 5.6 mit RPM in CentOS

Alle vorherigen Projekte wurden in der Windows-Sy...

Detaillierte grafische Erklärung der SQLMap-Injektion

Inhaltsverzeichnis 1. Wir haben festgestellt, das...

MySQL-Einfügungsproblem bei JSON

MySQL 5.7.8 und höher unterstützt nun einen nativ...

JS tiefe und flache Kopierdetails

Inhaltsverzeichnis 1. Was bedeutet „Shallow Copy“...

Unterschied und Prinzipanalyse des Nginx-Forward- und Reverse-Proxy

1. Der Unterschied zwischen Forward-Proxy und Rev...

Schreiben Sie ein React-ähnliches Framework von Grund auf

Kürzlich habe ich im Internet den Artikel „Build ...

Erste Zusammenfassung des Website-Erstellungs-Tutorials für Anfänger

Nachdem ich diese sechs Artikel geschrieben hatte,...

Beispiel zum Aktivieren des Brotli-Komprimierungsalgorithmus für Nginx

Brotli ist ein neues Datenformat, das eine um 20 ...