Apache HTTP (Linux): Unterschied zwischen den Versionen
(→PHP) |
|||
| Zeile 18: | Zeile 18: | ||
<pre> | <pre> | ||
sudo apt-get -y install php php-mbstring libapache2-mod-php php7.3 php7.3-mysql | sudo apt-get -y install php php-mbstring php-xml libapache2-mod-php php7.3 php7.3-mysql | ||
</pre> | </pre> | ||
Version vom 3. März 2020, 23:09 Uhr
Installation
sudo apt-get -y install apache2 apache2-doc
Optional Benutzer zur, von Apache genutzten, Gruppe www-data hinzufügen:
sudo usermod -aG www-data <user name>
Module
PHP
Bei libapache2-mod-php auf die richtige Version kontrollieren
Raspbian Buster 10
sudo apt-get -y install php php-mbstring php-xml libapache2-mod-php php7.3 php7.3-mysql
Ubuntu-Server 18.04
sudo apt-get -y install php php-mbstring libapache2-mod-php php7.2 php7.2-mysql
Ubuntu-Server 16.04
sudo apt-get -y install php php-mbstring libapache2-mod-php7.0 php7.0 php7.0-mysql
Ubuntu-Server 14.04
sudo apt-get -y install php5 libapache2-mod-php5
Probleme
php wird nach Update auf 7.2 nicht ausgeführt
sudo a2dismod mpm_event && sudo a2enmod mpm_prefork && sudo a2enmod php7.2
Siehe https://www.techrepublic.com/article/how-to-fix-apache-2-not-executing-php-files/
SSL
sudo a2enmod ssl sudo service apache2 restart
Konfiguration
Um die Warnung bezüglich Domainname zu unterdrücken, in der Datei /etc/apache2/apache2.conf am Ende folgende Zeile hinzufügen:
ServerName <domain name>
conf-available
Eine *.conf-Datei anlegen:
sudo touch /etc/apache2/conf-available/<conf name>.conf
Beispiel-Datei anhand der Seite phpMyAdmin:
Alias /phpmyadmin "/var/www/phpmyadmin/"
<Directory "/var/www/phpmyadmin">
Options +FollowSymLinks
AllowOverride All
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME /var/www/phpmyadmin
SetEnv HTTP_HOME /var/www/phpmyadmin
</Directory>
Konfiguration aktivieren:
cd /etc/apache2/conf-available/ sudo a2enconf <conf name>.conf sudo service apache2 reload
sites-available
Port 80 auf Port 443 weiterleiten
<VirtualHost *:80>
ServerName <subdomain>.<domain>
ServerAlias <subdomain>.<domain>
Redirect / https://<subdomain>.<domain>
</VirtualHost>
Beispielkonfiguration für eine verschlüsselte Seite
<VirtualHost *:443>
ServerName <subdomain>.<domain>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/<subdomain>-apache.crt
SSLCertificateKeyFile /etc/ssl/private/apache.key
# Pfad zu den Webinhalten
DocumentRoot /var/www/<subdomain>
ErrorLog ${APACHE_LOG_DIR}/<subdomain>.<domain>-error.log
CustomLog ${APACHE_LOG_DIR}/<subdomain>.<domain>-access.log combined
</VirtualHost>
Weiterleitung an einen anderen Server
Manchmal ist es erforderlich, Http(s)-Anfragen von außen an einen Server, der nur lokal erreichbar ist, weiter zu leiten.
In dem her beschriebenen Beispiel, ist die Webseite test.<domain> sowohl lokal, als auch von außen, unter dem selben DNS-Namen erreichbar.
Im folgenden Beispiel habe ich das durch eine Subdomain lokal.<domain> gelöst. Der von außen erreichbare Server nimmt dazu die Anfragen für test.<domain> entgegen und leitet sie an test.lokal.<domain> weiter.
Für das Erstellen einer Subdomain siehe auch Subdomain in Bind.
Weiterleitender Server
Der DNS-Name test.<domain> muss auf den weiterleitenden Server aufgelöst werden und test.lokal.<domain> auf den lokalen Server. In dem folgenden Beispiel ist die weitergeleitete Verbindung zum lokalen Server auch verschlüsselt.
Zuerst müssen die erforderlichen Module aktiviert werden:
sudo a2enmod proxy sudo a2enmod proxy_html sudo a2enmod proxy_http
Danach eine Konfiguration nach folgenden Muster anlegen:
<VirtualHost *:443>
ServerName test.<domain>
SSLProxyEngine On
ProxyPass / https://test.local.<domain>
ProxyPassReverse / https://test.local.<domain>
SSLProxyCheckPeerName off
SSLProxyCheckPeerCN off
SSLEngine on
SSLCertificateFile /etc/ssl/certs/test.crt
SSLCertificateKeyFile /etc/ssl/private/apache.key
</VirtualHost>
Da das SSL-Zertifikat am Zielserver eigentlich für test.<domain> ausgestellt wurde, muss noch die Validierung des Namen deaktiviert werden. Dazu dienen folgende Zeilen in obigen Beispiel:
SSLProxyCheckPeerName off SSLProxyCheckPeerCN off
Zielserver
Der Zielserver muss in der .conf den Namen test.lokal.<domain> als Aliasnamen angegeben haben.
<VirtualHost *:443>
ServerName test.<domain>
ServerAlias test.local.<domain>
...
</VirtualHost>
Konfiguration aktivieren
cd /etc/apache2/sites-available/ sudo a2ensite <conf name>.conf sudo service apache2 reload
Passwortschutz von URLs
Datenbank
Die Option -c ist nur erforderlich, falls es die Datenbank noch nicht gibt:
sudo htpasswd [-c] /etc/apache2/.htpasswd <name>
Virtual-Host
<VirtualHost *:80>
...
<Directory "/var/www/html">
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
...
</VirtualHost>
Links
Binden an ein Netzwerk
<Directory "/var/www/example">
Require ip 10.0.0.0/24
Options +FollowSymLinks
...
</Directory>
Nicht Listen:
https://httpd.apache.org/docs/2.4/de/bind.html
https://httpd.apache.org/docs/2.4/de/mod/core.html#virtualhost
Links
https://httpd.apache.org/docs/2.4/mod/mod_authz_host.html
Fehlermeldungen
You don't have permission to access <url> on this server.
Das kann daran liegen, dass sich die Folder-Konfiguration von Apache 2.2 auf Apache 2.4 geändert hat.
Konfiguration in Apache 2.2:
<Directory> ... Order allow,deny Allow from all ... </Directory>
Konfiguration in Apache 2.4:
</Directory> ... Require all granted ... </Directory>
[ssl:warn] [pid 604] AH01906: <fqdn>:443:0 server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
Zurück zu Ubuntu