Die Nginx-Version im eigenen Repository von AlmaLinux ist stabil, jedoch nicht die aktuellste: Zum Zeitpunkt des Tests war auf AlmaLinux 10 die Version 1.26.3 enthalten. Die Nginx-Entwickler (nginx.org) unterhalten ein eigenes Repository für Red-Hat-basierte Systeme mit zwei Zweigen:
- stable: der stabile Zweig, der ausschließlich Fehlerbehebungen erhält (zum Zeitpunkt des Tests 1.30.6);
- Mainline: Der Entwicklungszweig, in den neue Funktionen und Fehlerbehebungen zuerst aufgenommen werden (zum Zeitpunkt des Tests 1.31.8).
Die Entwickler von Nginx selbst empfehlen den Mainline-Zweig für den allgemeinen Gebrauch: Er wird regelmäßig in kleinen Schritten aktualisiert, und Fehlerbehebungen werden dort früher veröffentlicht. Der Stable-Zweig ist dann eine gute Wahl, wenn Sie möglichst selten Änderungen vornehmen möchten.
Wir haben die Schritte im Oktober 2026 unter AlmaLinux 10.2 getestet; unter AlmaLinux 9 funktionieren sie auf dieselbe Weise. Führen Sie die Befehle als Root-Benutzer oder mit „sudo“ aus.
1. Einrichtung des Speichers
Erstellen Sie die Datei „/etc/yum.repos.d/nginx.repo“ (z. B. mit dem Befehl „sudo nano /etc/yum.repos.d/nginx.repo“) mit folgendem Inhalt:
[nginx-stable]
name=nginx stable repo
baseurl=https://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=https://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
Das „centos“ in der URL ist kein Fehler: nginx.org stellt unter diesem Namen die Pakete für Red-Hat-kompatible Systeme bereit, und „$releasever“ gibt unter AlmaLinux die Hauptversion (9 oder 10) an. Die Beschreibung auf nginx.org gibt die Adresse http:// an; im Test funktionierte auch https://, wir empfehlen daher Letzteres. Aufgrund der Einstellung „gpgcheck=1“ überprüft „dnf“ die Pakete in beiden Fällen anhand der Signatur. Die Einstellung „module_hotfixes=true“ ist unter AlmaLinux 9 von Bedeutung: Wenn dort das nginx-Modul des Systems (dnf module list nginx) aktiviert ist, würde dieses Modul andernfalls die Pakete aus dem Repository überschreiben.
2. Aktivierung des Mainline-Zweigs
sudo dnf config-manager --set-enabled nginx-mainline
Damit sind beide Zweige aktiviert, und „dnf“ wählt die höhere Version, also die Mainline. Wenn Sie den Stable-Zweig bevorzugen, lassen Sie diesen Schritt aus.
Verfügbare Versionen:
dnf list --showduplicates nginx
3. Installation
sudo dnf install nginx
Bei der Erstinstallation fordert „dnf“ den Import der Signaturschlüssel von nginx.org an. Im Test wurden drei Schlüssel von der Adresse https://nginx.org/keys/nginx_signing.key mit folgenden Fingerabdrücken heruntergeladen:
8540 A6F1 8833 A80E 9C16 53A4 2FD2 1310 B49F 6B46
573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62
9E9B E90E ACBC DE69 FE9B 204C BCDC D8A3 8D88 A2B3
Vergleichen Sie diese mit den auf der Seite „Linux-Pakete“ von nginx.org angegebenen Fingerabdrücken, und wenn sie übereinstimmen, bestätigen Sie dies (y).
4. Inbetriebnahme und Überprüfung
sudo systemctl enable --now nginx
nginx -v
curl -sI http://localhost | head -2
nginx version: nginx/1.31.8
HTTP/1.1 200 OK
Server: nginx/1.31.8
Wenn auf dem Server „firewalld“ läuft, öffnen Sie bitte die Web-Ports (sudo firewall-cmd --permanent --add-service=http --add-service=https, anschließend sudo firewall-cmd --reload); siehe: Wie richte ich eine Firewall auf meinem VPS ein?
Das Paket von nginx.org wird mit Unterstützung für HTTP/2 und HTTP/3 (QUIC) bereitgestellt; die Kompilierungseinstellungen werden mit dem Befehl „nginx -V“ aufgelistet (--with-http_v2_module, --with-http_v3_module).
Falls Nginx unter AlmaLinux bereits installiert ist
Wenn auf dem Server Nginx läuft, das aus dem AppStream-Repository installiert wurde, führt der Befehl „dnf upgrade nginx“ auch nach der Einrichtung des Repositorys keine Aktualisierung durch, sondern bricht mit einer Fehlermeldung ab:
Error: Transaction test error:
file /etc/nginx/nginx.conf from install of nginx-2:1.31.8-1.el10.ngx.aarch64 conflicts with file from package nginx-core-2:1.26.3-6.el10_2.7.aarch64
Die beiden Pakete sind unterschiedlich aufgebaut (Nginx unter AlmaLinux ist in die Pakete „nginx“ und „nginx-core“ unterteilt), daher muss das alte Paket entfernt werden. Die Reihenfolge lautet:
sudo cp -a /etc/nginx /root/nginx-mentes
sudo dnf remove nginx nginx-core
sudo dnf install nginx
sudo systemctl enable --now nginx
Die erste Zeile speichert die gesamte Konfiguration: Bei der Deinstallation werden die unveränderten Konfigurationsdateien (beispielsweise die Standarddatei „nginx.conf“) gelöscht, und das Paket von nginx.org ersetzt diese durch seine eigenen Dateien. Die eigenen .conf-Dateien im Verzeichnis „conf.d“ blieben im Test an ihrem Platz, doch vergleichen Sie diese vor der Überprüfung bitte mit der Sicherungskopie. Das Paket „nginx-filesystem“ verbleibt auf dem Rechner, da das PHP-FPM-Paket davon abhängig ist.
Unterschiede im Vergleich zu Nginx unter AlmaLinux
- Der Speicherort der virtuellen Hosts ist derselbe: die
*.conf-Dateien im Verzeichnis/etc/nginx/conf.d/. Im Speicherbereich ist eine Datei „default.conf“ enthalten, die die Standardseite mit dem Namen „localhost“ bereitstellt. - Der Dienst läuft mit einem
nginx-Benutzer, die Anzahl der Workworker_processes auto;, d. h. einer pro Prozessorkern. - Das Verzeichnis „
/etc/nginx/default.d/“ wird nicht eingelesen. Das AlmaLinux-Paket „php-fpm“ legt die PHP-Konfiguration (php.conf) in diesem Verzeichnis ab, doch die „nginx.conf“-Datei von nginx.org liest dieses Verzeichnis nicht ein. Daher müssen Sie PHP in jedemserver-Block selbst einbinden (siehe unten). - Es funktioniert problemlos mit SELinux zusammen: Die Dateien unter
/var/wwwwurden ohne Probleme bereitgestellt, und der Dienst startete auch nach einem Neustart des Servers automatisch (die Bezeichnung der Datei/run/nginx.pidlautetehttpd_var_run_t, eine SELinux-Blockierung wurde nicht im Protokoll vermerkt). In einigen Anleitungen wird hierfür eine spezielletmpfiles.d-Konfiguration empfohlen; unter AlmaLinux 10.2 war dies jedoch nicht erforderlich. Zu anderen Verzeichnissen siehe: SELinux: Warum erhalte ich die Fehlermeldung „Permission denied“?
Einrichtung von PHP-FPM
Die Installation von PHP-FPM wird im Artikel „PHP-Installation unter AlmaLinux 9 und 10“ beschrieben. Die Konfiguration einer Domain erfolgt beispielsweise in der Datei „/etc/nginx/conf.d/pelda.hu.conf“:
server {
listen 80;
server_name pelda.hu www.pelda.hu;
root /var/www/pelda.hu/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Die Zeile „try_files $uri $uri/ /index.php?$args;“ ist für die „schönen URLs“ von WordPress und den meisten PHP-Frameworks erforderlich. Die Standardkonfiguration von PHP-FPM (listen.acl_users = apache,nginx) erlaubt es dem nginx-Benutzer, eine Verbindung zum Socket herzustellen, sodass keine Anpassungen an den Berechtigungen erforderlich sind.
Überprüfung und Neuladen:
sudo nginx -t
sudo systemctl reload nginx
curl -s -H "Host: pelda.hu" http://localhost/
Der Test gab die PHP-Version von curl sowie den Ausführungsmodus „fpm-fcgi“ zurück. Für HTTPS beantragen Sie bitte ein Let’s Encrypt-Zertifikat: Beantragung eines Let’s Encrypt-Zertifikats mit Certbot. Das Nginx-Plugin für Certbot ist im EPEL-Repository enthalten (python3-certbot-nginx).
Aktualisierung
Nginx von nginx.org wird zusammen mit den übrigen Paketen des Systems aktualisiert:
sudo dnf upgrade nginx
Das Paket versucht bei der Aktualisierung, den laufenden Server im laufenden Betrieb auf die neue Binärdatei umzustellen, doch im Test ist dies nicht geschehen: Nach dem Paketwechsel zeigte „nginx -v“ zwar bereits die neue Version an, der Header des laufenden Servers (curl -sI http://localhost) jedoch noch die alte. Überprüfen Sie daher nach der Aktualisierung die Einstellungen und starten Sie den Dienst neu:
sudo nginx -t && sudo systemctl restart nginx
Zurück zum stabilen Zweig
sudo dnf config-manager --set-disabled nginx-mainline
sudo dnf distro-sync nginx
Im Test hat distro-sync die Mainline-Version 1.31.8 durch die stabile Version 1.30.6 ersetzt (Downgrading); starten Sie anschließend auch hier den Dienst neu. Wenn Sie zu AlmaLinux’ eigenem Nginx zurückkehren möchten, löschen Sie die Datei „nginx.repo“ und installieren Sie das nginx-Paket erneut (sichern Sie zuvor auch hier das Verzeichnis „/etc/nginx“).
Wenn Port 80 belegt ist
Wenn Nginx nicht startet und im Protokoll der Eintrag „bind() to 0.0.0.0:80 failed (98: Address already in use)“ erscheint, wird der Port von einem anderen Programm belegt, in der Regel von Apache. Überprüfen Sie, welches Programm dies ist:
sudo ss -tlnp | grep ':80 '
Wenn in der Spalte „users“ der Eintrag „httpd“ steht, stoppen und deaktivieren Sie Apache (sudo systemctl disable --now httpd) oder verlegen Sie einen der Webserver auf einen anderen Port.
Entfernung
sudo systemctl disable --now nginx
sudo dnf remove nginx
sudo rm /etc/yum.repos.d/nginx.repo
Im Verzeichnis „/etc/nginx“ können die geänderten Einstellungen und Ihre eigenen virtuellen Hosts erhalten bleiben; sollten Sie diese nicht mehr benötigen, löschen Sie sie bitte nach dem Speichern.
Auf welchen Server?
Mit einem eigenen Nginx-Server können Sie einen KVM-VPS oder einen dedizierten Server betreiben; auf diesen können Sie mit Root-Zugriff jeden beliebigen Webserver installieren. Wenn Sie statt Nginx lieber Apache verwenden möchten, finden Sie eine Anleitung dazu im Artikel „Installation von Apache und PHP-FPM“.
