Wie konfiguriere ich Apache mit php richtig?

cabriofahrer

Well-Known Member
Ich möchte Apache mit php haben, um php-Skripte zu erstellen und im Browser schnell testen zu können. Unter Windows hat man es da ganz einfach, man braucht nur Xampp zu installieren und schon kann man quasi loslegen.

Die Anleitungen hier im WIKI sind total veraltet, ich habe im Internet noch folgende Anleitungen gefunden, jedoch bin ich mir bei einigen Dingen nicht ganz sicher:

https://www.iceflatline.com/2011/11/how-to-install-apache-mysql-php-and-phpmyadmin-on-freebsd/

https://www.tecmint.com/install-apache-mariadb-and-php-famp-stack-on-freebsd/

Also Apache24 habe ich erfolgreich installiert, es funktioniert auch (http://localhost -> "It works!"), ebenso php71, php71-extensions und mod_php71.

Also ich nehme an, ich muss jetzt in /usr/local/etc/apache24/httpd.conf noch "DirectoryIndex index.html index.php" eintragen. Soweit, so gut.

Doch muss ich jetzt

cp /usr/local/etc/php.ini-development /usr/local/etc/php.ini (sagt die eine Anleitung)

oder

/usr/local/etc/apache24/Includes/php.conf erstellen mit dem Inhalt

Code:
<IfModule dir_module>
    DirectoryIndex index.php index.html
    <FilesMatch "\.php$">
        SetHandler application/x-httpd-php
    </FilesMatch>
    <FilesMatch "\.phps$">
        SetHandler application/x-httpd-php-source
    </FilesMatch>
</IfModule>


oder beides?

Andererseits meldet mod_php71 bei der Installation

Code:
Message from mod_php71-7.1.22:

***************************************************************

Make sure index.php is part of your DirectoryIndex.

You should add the following to your Apache configuration file:

<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
</FilesMatch>

*********************************************************************

If you are building PHP-based ports in poudriere(8) with ZTS enabled,
add WITH_MPM=event to /etc/make.conf to prevent build failures.

Demnach soll dieser Inhalt also in die httpd.conf?

Also was nun genau?
 
Ich möchte Apache mit php haben, um php-Skripte zu erstellen und im Browser schnell testen zu können.
Apache einrichten und PHP ist eigentlich keine große Sache als das man da jetzt großartig auf irgendwelche Tutorials oder Howtos angewiesen ist.

Also ich nehme an, ich muss jetzt in /usr/local/etc/apache24/httpd.conf noch "DirectoryIndex index.html index.php" eintragen.
Nur wenn die index.php als Indexfile fungieren soll. Ich hab so das Gefühl, Du tippst blind was ein ohne eigentlich zu wissen, was Du da genau machst.
 
Ich hatte ja oben bereits erwähnt, wozu ich das brauche:

Ich möchte Apache mit php haben, um php-Skripte zu erstellen und im Browser schnell testen zu können. Unter Windows hat man es da ganz einfach, man braucht nur Xampp zu installieren und schon kann man quasi loslegen.

Deshalb wusste ich am Anfang leider tatsächlich nicht, was ich genau machen musste. Welche Indexfile angezeigt werden soll, ist mir eigentlich egal. index.php ist jedefalls informativer als ein "It works!".

Was ich gerne noch gewusst hätte, ist ob für meine Zwecke

cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini

nun nötig war oder nicht und warum.
 
cp /usr/local/etc/php.ini-development /usr/local/etc/php.ini (sagt die eine Anleitung)

oder

/usr/local/etc/apache24/Includes/php.conf erstellen mit dem Inhalt
Das eine hat mit dem anderen nichts zu tun.
Die php.ini steuert wie sich PHP verhält, das andere ist die Einbindung von PHP in Apache.
Man kann zwar in der Config vom Apache, Parameter für PHP setzten empfehlenswert ist das jedoch nicht.

Da du den Server fürs testen benutzten willst würde ich nicht die "php.ini-production" benutzten, sondern die "php.ini-development", damit ist PHP im Fehlerfall gesprächiger, ABER das solltest du wirklich nur machen wenn der Server nicht öffentlich ist/produktiv eingesetzt wird!
 
Und ganz ohne php.ini landet man auf den sehr konservativen Standardeinstellungen, in denen viele PHP-Anwendungen schon am Speicherlimit scheitern. Außer sie überschreiben es selbst.
 
Vielen Dank, ich erfreue mich immerwieder in Ehrfurcht über die hoch qualifizierten Antworten, die man hier bekommt!
Und was stellt XAMPP unter Windows dann eigentlich genau zur Verfügung? Ist es denkbar, das es Personen oder gar Unternehmen gibt, die mit Windows, XAMPP und zwei Mausklicks einen Apache Server betreiben?

Und wo kann man sich besser zum Thema Sicherheit unter Apache einlesen?
 
Xampp stellt ein vorkonfigurierten Apache mit PHP und Perl, sowie einer Datenbank (MariaDB) zur Verfügung. Das Angebot richtet sich primär an Entwickler + soll bei dem Einstieg helfen (da eben alles vorkonfiguriert ist und einfach läuft).
Theoretisch könnte man das Zeug auch produktiv einsetzten, immerhin ist es nur ein Apache, PHP, Perl und Datenbank, jedoch müsste man die Konfiguration ändern, da die eben aufs entwickeln ausgelegt ist und das System im Fehlerfall sehr gesprächig ist (zumindest habe ich es so in Erinnerung).

Generell gilt (meiner Meinung nach): Man sollte nichts einfach ins öffentliche Netz hängen, ohne die Settings vorher verstanden zu haben. Gerade default Settings können gefährlich werden, wenn man zb. ein Update macht und der/die Entwickler auf die Idee kamen die Defaults so zu ändern das das Stück Software mehr von sich preisgibt als nötig oder andere tolle Sachen.

Am besten geeignet sind wohl die Docs der jeweiligen Software und dann sollte man überlegen "brauch ich das wirklich?". Apache zb. hat sehr viele Module die geladen werden, aber die meisten brauch man gar nicht wenn man nur einen einfachen Webserver betreiben will.
 
OK, nächster Schritt in diesem Zusammenhang: Während man bei XAMMP nun freudig drauf loslegen kann, html und php Skripte zu erstellen und im Browser zu testen, haben wir hier bei UNIX natürlich ein Rechteproblem...^^.

Wie kann ich also am besten erreichen, dass ich als User meines Homeverzeichnisses bequem Skripte erstellen und testen kann?

Ausganspunkt ist natürlich

/usr/local/www/apache24/data

hier sollten die Unterordner für verschiedene Webseiten angelegt werden.
Angenommen, ich will einen mit dem Namen "Uebungen" anlegen. Mit welchen Rechten, so dass alle Dateinen in diesem Ordner (z.B. uebung1.html, uebung1.php, uebung2.html, uebung2.php, usw.) einfach in meinem Browser in als normaler User mit

http://localhost/uebungen/uebung1.html

aufgerufen werden können bzw. dass ich diese Dateien auch als normaler User überhaupt in diesem Verzeichnis anlegen kann?
 
Entweder du schaust dir mal mod_userdir an oder setzt als Owner deinen User und als Group die, unter dem der apache läuft. In der Regel reicht es wenn der Webserver User lese rechte hat, außer du willst Dateien hochladen o.ä. dann brauchst du auf das jeweilige Verzeichnis/Datei schreib rechte.
 
haben wir hier bei UNIX natürlich ein Rechteproblem...^^.
Das hast Du in jedem System, das Dateirechte kennt. Inkl. Windows/NTFS.
XAMP macht es Dir nur einfach, indem es mit einfach mit Userrechten läuft (kannst Du auch mit einem von Hand installieren Apache machen; alles nur Konfiguration).

Wie kann ich also am besten erreichen, dass ich als User meines Homeverzeichnisses bequem Skripte erstellen und testen kann?

Ausganspunkt ist natürlich

/usr/local/www/apache24/data
Na prinzipiell gibt es zwei Möglichkeiten.
Entweder Du legst den DocumentRoot in Dein Homeverzeichnis oder gibst /usr/local/www/apache24/data die entsprechenden Zugriffsrechte.
ganz platt könntest Du natürlich via chmod o+rwx /usr/local/www/apache24/data
Oder Du übernimmst zumindest die Gruppeneigentümerschaft:
chgrp dein-primärer-gruppenname /usr/local/www/apache24/data
nebst:
chmod g+rwx /usr/local/www/apache24/data
 
Also ich nehme an, ich muss jetzt in /usr/local/etc/apache24/httpd.conf noch "DirectoryIndex index.html index.php" eintragen. Soweit, so gut.

Doch muss ich jetzt

cp /usr/local/etc/php.ini-development /usr/local/etc/php.ini (sagt die eine Anleitung)

oder

/usr/local/etc/apache24/Includes/php.conf erstellen mit dem Inhalt

Ich geh da speziell nochmal drauf ein, weil ich da auch grade am rumpopeln bin und teile meine Erfahrungen. Da lernen wir mit Sicherheit beide noch was :)

Ich installiere erstmal 'pkg install apache24 mod_php72'
php72 ist schon als package da, spricht meiner Meinung nach nix dagegen 7.2 zu nehmen und die restlichen Abhängigkeiten werden dadurch mitgezogen. :)

Code:
cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
Das legt php erstmal nur die config hin. Genau wie yamagi es sagt:
Und ganz ohne php.ini landet man auf den sehr konservativen Standardeinstellungen, in denen viele PHP-Anwendungen schon am Speicherlimit scheitern. Außer sie überschreiben es selbst.

Ob man die development oder production nimmt, ist Geschmackssache, zumal das ja eh einfach wieder änder- und umkopierbar ist.
Ich hab nie php geschrieben, daher muss das bei nicht geschwätzig sein und ich hab immer die production genommen. Auch u.a., weil ich mir denke, dass die Sicherheitseinstellungen mit devel eher gering sind und ich so ein vergessliches Schussel bin.
Rumschrauben musste ich eh nur an den paar Einstellungen:

Code:
max_execution_time =

max_input_time =

memory_limit =

post_max_size =

upload_max_filesize =

Das wars zur ini.

Jetzt hierzu:

/usr/local/etc/apache24/Includes/php.conf erstellen mit dem Inhalt

Code:
<IfModule dir_module>
DirectoryIndex index.php index.html
<FilesMatch "\.php$">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php-source
</FilesMatch>
</IfModule>

Kann man so machen. Diese /usr/local/etc/apache24/Includes/php.conf wird durch den Eintrag 'Include etc/apache24/Includes/*.conf' in httpd.conf geladen. Rot markiertes hat schon definiert, dass standardmäßig index.php oder index.html aufgerufen werden, dass muss dann nicht extra nochmal in die httpd.conf.

Ich editiere aber gerne so wenige Dateien wie möglich, damit ich mir weniger merken muss und ne bessere Übersicht habe. Ich nutze die httpd.conf nur um module und configs zu aktivieren. Mir gefällt die Möglichkeit der vhosts sehr gut. (Include etc/apache24/extra/httpd-vhosts.conf) ;)

Hier ein Beispiel von /usr/local/etc/apache24/extras/httpd-vhosts.conf, der alias phpmyadmin ist optional und die php-geschichte ist damit komplett abgeschmatzt, ohne die httpd.conf 'zuzumüllen':

Code:
<VirtualHost lokaleip:80>

        ServerName www.meinedomain.de
        ServerAlias meinedomain.de
        ServerAdmin ich@meinedomain.de
        DocumentRoot /usr/local/www/meineseiten/wordpress
          <Directory /usr/local/www/meineseiten/wordpress>
            Require all granted
          </Directory>
        ErrorLog "/var/log/apache24/meinedomain.de-error.log"
        CustomLog "/var/log/apache24/meinedomain.de-access.log" combined                          

                        Alias /phpmyadmin "/usr/local/www/phpMyAdmin/"
                        <Directory "/usr/local/www/phpMyAdmin/">
                        Require all granted
                        </Directory>

        <IfModule dir_module>
            DirectoryIndex index.php index.html
            <FilesMatch "\.php$">
                SetHandler application/x-httpd-php
            </FilesMatch>
            <FilesMatch "\.phps$">
                SetHandler application/x-httpd-php-source
            </FilesMatch>
        </IfModule>

</VirtualHost>


Und was stellt XAMPP unter Windows dann eigentlich genau zur Verfügung?
Ein fertiges klickibuntipaket. :)

Ist es denkbar, das es Personen oder gar Unternehmen gibt, die mit Windows, XAMPP und zwei Mausklicks einen Apache Server betreiben?
Die gibt es genau wie Leute, die bei ebay-Kleinanzeigen $upermarkt-Treuepunkte anbieten/tauschen. :ugly:
Heute unvorstellbar, aber es gab mal eine Ära, in der konnte man mit ner deutschen IP ganze IP-Ranges nach Exploits abscannen, ohne dass die Kripo morgens deinen Kaffee wollte. Der Legende nach gab es viele *hust* Admins, die ihre SQL-Server ohne Passwort nach außen ließen. Und man stelle sich vor, was man da alles per SQL-Injection hätte für Schabernack treiben können. Die Wissenden unter uns werden jetzt grinsen. ;)

Daher nur das Aktivieren, was auch gebraucht wird, 3x überprüfen, was an die öffentliche IP darf und wenn du irgendwo ein PW vergeben kannst, mach es! Nimm möglichst kryptische und lange oder lass dir eins generieren und trag es gleich in einen PW-Manager ein. Wenn dich jemand hacken will, muss Text wühlen oder gesalzenes zurückrechnen, dann besteht die zumindest die geringe Chance, dass '4f391d66fa468a7ad972f5a6aaba65d216f81808292b85b0bdf81107c2ec0765' übersehen wird. 'MegaPassWortRult3754' fällt eben auf. ;)
 
oder setzt als Owner deinen User und als Group die, unter dem der apache läuft.

Unter welcher Gruppe läuft den der Apache? Wie finde ich das heraus? Unter root oder wheel ist nich gemeint, oder?

Code:
# pwd
/usr/local/www/apache24/data
# ls -l
total 8
-rw-r--r--  1 root  wheel  45 Oct  7 17:53 index.html
-rw-r--r--  1 root  wheel  20 Oct  8 16:58 info.php
#

Entweder du schaust dir mal mod_userdir an

Sieht interessant aus, verstehe ich aber auf Anhieb nicht so ganz. Muss dieses Modul noch nachinstalliert werden und wovon ist hier überhaupt die Rede in dem Dokument? Von der httpd.conf?

Na prinzipiell gibt es zwei Möglichkeiten.
Entweder Du legst den DocumentRoot in Dein Homeverzeichnis oder gibst /usr/local/www/apache24/data die entsprechenden Zugriffsrechte.
ganz platt könntest Du natürlich via chmod o+rwx /usr/local/www/apache24/data
Oder Du übernimmst zumindest die Gruppeneigentümerschaft:
chgrp dein-primärer-gruppenname /usr/local/www/apache24/data
nebst:
chmod g+rwx /usr/local/www/apache24/data

Ist das eine gute Praxis, die Rechte von

/usr/local/www/apache24/data

zu verändern? Ginge nicht auch, innerhalb von "data" zuerst als root ein neues Verzeichnis zu erstellen, z.B. "testseite" und dann nur die Rechte von "testseite" zu ändern? Also mein User und die Gruppe, unter der apache läuft (nochmal gefragt, welche Gruppe ist das?)?
 
Sieht interessant aus, verstehe ich aber auf Anhieb nicht so ganz. Muss dieses Modul noch nachinstalliert werden und wovon ist hier überhaupt die Rede in dem Dokument? Von der httpd.conf?
Es geht darum, dass Du da innerhalb Deines eigenen Home-Directories ein spezielles Verzeichnis für den Webserver anlegen kannst.

Dafür brauchst Du das Modul mod_userdir
Das musst Du in der Apache-Konfiguration einbinden (vorher noch nachinstalliert, falls nicht schon vorhanden)
und konfigurieren:
<IfModule mod_userdir.c> UserDir /home/*/public_html # für User root aber vorsichtshalber deaktivieren UserDir disabled root </IfModule>

Aber eigentlich sind solche Sachen alle gut und ausführlich dokumentiert.

zu verändern? Ginge nicht auch, innerhalb von "data" zuerst als root ein neues Verzeichnis zu erstellen, z.B. "testseite" und dann nur die Rechte von "testseite" zu ändern?
Das kannst du halten wie Du magst/es Dir am besten passt.

Also mein User und die Gruppe, unter der apache läuft (nochmal gefragt, welche Gruppe ist das?)?
Meine Güte. Mit ps kannst Du Dir die laufenden Prozesse angucken. Und da schaust Du einfach nach, mit welchem User Apache läuft.
Oder Du guckst in die Apache-Config. Siehe dazu auch:
https://httpd.apache.org/docs/2.4/mod/mod_unixd.html

Oder ums ganz einfach zu sagen: Halte nach den Konfigurationseinträgen User und Group Ausschau
 
Zurück
Oben