
Versuch, eine Apache VirtualHosting-Umgebung mit PHP in einem neu erstellten CentOS-Knoten unter einem DigitalOcean-Cloud-Server einzurichten.
Das Problem ist, obwohlVirtuelles Hosting funktioniert an sich, PHP nicht.
Server-Setup:
- Webserver: CentOS 6.5 mit Apache/2.2.15
- PHP-Version: 5.3.3 (Zur Verwendung als Apache-Modul)
Schritte gemacht:
Anmelden alsWurzelBenutzer,
- Installieren von Apache und PHP:
yum -y install httpd php
- Erstellen Sie eine neue Konfigurationsdatei für den virtuellen Host wie unten:
Datei:/etc/httpd/conf.d/vhosts.conf
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.org
ServerAlias www.example.org
DocumentRoot /srv/www/example.org/public_html/
ErrorLog /srv/www/example.org/logs/error.log
CustomLog /srv/www/example.org/logs/access.log combined
</VirtualHost>
- Erstellen neuer Verzeichnisse für die virtuelle Hostsite
Wie unten,
mkdir -p /srv/www/example.org/public_html
mkdir -p /srv/www/example.org/logs
- Platzieren Sie eine
.php
und.html
testen Sie Dateien wie unten:
Dateien unter /srv/www/example.org/public_html/
(DocumentRoot)
echo "<HTML>It work's</HTML>" > /srv/www/example.org/public_html/index.html
echo "<?php echo ("It works"); ?>" > /srv/www/example.org/public_html/index.php
Wenn ich dann meinen Browser auf richte index.html
, funktioniert es. Aber wenn ichWenn ich meinen Browser darauf weise, index.php
wird eine leere Seite angezeigt.
Fehlerbehebung
(Dinge, die ich bereits ohne Erfolg getan/überprüft habe)
- Sichergestellt, dass Apache ausgeführt wird und
DocumentRoot
zugänglich ist - Alle Verzeichnisse
755
und Dateien644
- Apache-Zugriffsprotokoll geprüft. Die HTML-Seitenanforderungen sind mit dem Statuscode 200 vorhanden, aber
.php
im Zugriffsprotokoll ist keine Seitenanforderung vorhanden. - Kein Fehler im Apache- oder PHP-Fehlerprotokoll, kein Fehler in
/var/log/messages
- Habe versucht,
php_admin_flag engine on
die vhost-Konfigurationsdatei hinzuzufügen
Siehe auch unten den Inhalt von/etc/httpd/conf.d/php.conf
<IfModule prefork.c>
LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
LoadModule php5_module modules/libphp5-zts.so
</IfModule>
AddHandler php5-script .php
AddType text/html .php
DirectoryIndex index.php
Antwort1
Meiner Erfahrung nach rendert PHP eine leere Seite, wenn es auf einen schwerwiegenden zugrunde liegenden Fehler stößt. Normalerweise lässt sich dieser leicht beheben, aber leider wird in den Apache-Protokollen, PHP-Protokollen oder im Syslog normalerweise nichts protokolliert, was die Fehlerbehebung erschwert.
Suchen Sie Ihre php.ini-Konfigurationsdatei mit:
php -i | grep "php.ini"
Das Ergebnis sollte ungefähr wie folgt aussehen:
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini
Bearbeiten Sie diese Konfigurationsdatei (in diesem Fall /etc/php.ini) mit Ihrem bevorzugten Texteditor und stellen Sie sicher, dass die Anzeige von Fehlern und Startfehlern aktiviert ist. Die Einträge sollten folgendermaßen aussehen:
display_errors = On
display_startup_errors = On
Starten Sie Apache abschließend neu, damit es die neue PHP-Konfiguration liest und über Curl oder einen Browser auf Ihre Seite zugreift. Dies sollte eine Fehlermeldung erzeugen, die bei der Fehlerbehebung hilft.
Antwort2
Als Erstes sollten Sie die Apache-Fehlerprotokolle überprüfen, die Sie in Ihrer Apache-Konfiguration festgelegt haben; unten kopiert:
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.org
ServerAlias www.example.org
DocumentRoot /srv/www/example.org/public_html/
ErrorLog /srv/www/example.org/logs/error.log
CustomLog /srv/www/example.org/logs/access.log combined
</VirtualHost>
PHP läuft unter Apache, daher werden alle auftretenden Fehler in den Serverprotokollen angezeigt. Ich empfehle, sich beim Server anzumelden und tail
Folgendes zu verwenden:
tail -f -n 200 /srv/www/example.org/logs/error.log
Aber ist das für Sie das allgemeine Apache-Protokoll? Oder ist das die Konfiguration von DigitalOcean? Denn dieser Pfad /srv/www/example.org/logs/
scheint ziemlich seltsam. Unter Standard-Linux wäre es an einem Ort wie diesem:
tail -f -n 200 /var/log/apache2/error.log
Unabhängig davon, wohin die Protokolle tatsächlich gesendet werden, ist dies der Schlüssel zu dem, was mit PHP und Apache auf Ihrem Server passiert – oder nicht passiert.