Nginx php Rocky: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 96: Zeile 96:
 
* dnf install policycoreutils-python-utils
 
* dnf install policycoreutils-python-utils
 
* semanage fcontext -a -t cert_t "/etc/ssl/own\.(crt|key)"
 
* semanage fcontext -a -t cert_t "/etc/ssl/own\.(crt|key)"
* restorecon -Rv /etc/ssl/
+
* restorecon -Rv /etc/ssl/
  
 
=== Konfigurieren ===
 
=== Konfigurieren ===

Version vom 29. Mai 2026, 09:26 Uhr

NGINX Rocky Linux mit PHP-FPM betreiben

Diese Anleitung zeigt, wie man eine einfache PHP-Webanwendung mit NGINX und PHP-FPM unter Rocky Linux betreibt.

Voraussetzungen

  • Rocky Linux mit root-Rechten
  • Paketverwaltung via dnf
  • Standardwebverzeichnis: /var/www/html
  • PHP 8.2 als Beispiel

Installation

  • dnf install nginx php-fpm

PHP-FPM prüfen

  • systemctl status php-fpm

Die Socket-Datei für FastCGI-Kommunikation liegt standardmäßig hier:

/run/php-fpm/www.sock

NGINX-Konfiguration anpassen

Unter Rocky Linux gibt es kein sites-available/sites-enabled-System. Eigene Konfigurationen kommen nach:

/etc/nginx/conf.d/

Datei: /etc/nginx/conf.d/default.conf

server {
    listen 80;
    server_name localhost;
    root /var/www/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
  • nginx -t

Testseite anlegen

  • echo "<?php phpinfo(); ?>" > /var/www/html/info.php

Dienste aktivieren und starten

  • systemctl enable --now php-fpm
  • systemctl enable --now nginx

SELinux

Rocky Linux läuft standardmäßig mit SELinux im Enforcing-Modus. Ohne Anpassungen blockiert SELinux den Zugriff von NGINX auf die PHP-FPM-Socket-Datei sowie auf das Webverzeichnis.

  • setsebool -P httpd_can_network_connect 1
  • restorecon -Rv /var/www/html
  • ls -Z /var/www/html/info.php

Erwarteter Kontext:

  • system_u:object_r:httpd_sys_content_t:s0

Kontext manuell setzen falls abweichend:

  • chcon -t httpd_sys_content_t /var/www/html/info.php

Firewalld

  • firewall-cmd --permanent --add-service=http
  • firewall-cmd --reload
  • firewall-cmd --list-all

Funktion prüfen

Fehlersuche

Dateien und Berechtigungen im Webverzeichnis prüfen:

  • ls -la /var/www/html/

SELinux-Kontext der Dateien prüfen:

  • ls -Z /var/www/html/

NGINX-Fehlerlog live verfolgen:

  • tail -f /var/log/nginx/error.log

SELinux-Denials der letzten Minuten anzeigen:

  • ausearch -m avc -ts recent

TLS konfigurieren

Die Zertifikatsdateien liegen unter:

  • /etc/ssl/own.crt
  • /etc/ssl/own.key

SELinux für TLS-Zertifikate

Kontext der Zertifikatsdateien prüfen:

  • ls -Z /etc/ssl/own.crt /etc/ssl/own.key

Kontext dauerhaft setzen:

  • dnf install policycoreutils-python-utils
  • semanage fcontext -a -t cert_t "/etc/ssl/own\.(crt|key)"
  • restorecon -Rv /etc/ssl/

Konfigurieren

Datei: /etc/nginx/conf.d/default.conf

server {
    listen 80;
    server_name localhost;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name localhost;
    root /var/www/html;
    index index.php index.html;

    ssl_certificate /etc/ssl/own.crt;
    ssl_certificate_key /etc/ssl/own.key;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
  • nginx -t
  • systemctl reload nginx

Firewalld für HTTPS erweitern

  • firewall-cmd --permanent --add-service=https
  • firewall-cmd --reload
  • firewall-cmd --list-all

Funktion prüfen

Firewalld für HTTPS erweitern

  • firewall-cmd --permanent --add-service=https
  • firewall-cmd --reload
  • firewall-cmd --list-all

Funktion prüfen


Hinweise

  • .htaccess-Dateien werden von NGINX nicht unterstützt – Rewrite-Regeln müssen direkt in der NGINX-Konfiguration erfolgen.
  • Unter Rocky Linux heißt der PHP-FPM-Dienst schlicht php-fpm, nicht php8.2-fpm.
  • Der Socket-Pfad ist /run/php-fpm/www.sock statt /var/run/php/php8.2-fpm.sock.
  • Bei TCP statt Socket lautet der fastcgi_pass: fastcgi_pass 127.0.0.1:9000; – dann muss das SELinux-Boolean httpd_can_network_connect gesetzt sein.