Apache HTTP (Linux): Unterschied zwischen den Versionen

Aus Tutorials
Zur Navigation springen Zur Suche springen
 
(20 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 95: Zeile 95:
     SetEnv HTTP_HOME /var/www/phpmyadmin
     SetEnv HTTP_HOME /var/www/phpmyadmin
</Directory>
</Directory>
</pre>
bzw. bei Einschränkung auf bestimmte Netzwerke:
<pre>
Alias /phpmyadmin "/var/www/phpmyadmin/"
<Directory "/var/www/phpmyadmin">
    Require ip 10.0.0.0/24 10.3.0.0/24 10.8.5.0/24
    Options +FollowSymLinks
    ...
</pre>
</pre>


Konfiguration aktivieren:
Konfiguration aktivieren:
<pre style="white-space: pre-wrap;  
<pre style="white-space: pre-wrap;  
white-space: -moz-pre-wrap;  
white-space: -moz-pre-wrap;
white-space: -pre-wrap;  
white-space: -pre-wrap;  
white-space: -o-pre-wrap;  
white-space: -o-pre-wrap;  
Zeile 205: Zeile 216:
sudo service apache2 reload
sudo service apache2 reload
</pre>
</pre>
=== Weiterleitungen mit htaccess ===
==== Links ====
[https://www.df.eu/blog/301-redirects-weiterleitungen-mit-htaccess/ https://www.df.eu/blog/301-redirects-weiterleitungen-mit-htaccess/]


== Passwortschutz von URLs ==
== Passwortschutz von URLs ==
Zeile 276: Zeile 293:
sudo a2enmod mpm_event
sudo a2enmod mpm_event
sudo a2enmod http2
sudo a2enmod http2
</pre>
Um HTTP2 global zu aktivieren, in der Datei
<pre>
sudo vi /etc/apache2/apache2.conf
</pre>
folgende Zeile hinzufügen:
<pre>
# enable http2
Protocols h2 h2c http/1.1
</pre>
Dadurch werden die Protokolle in dieser Reihenfolge (HTTP2 over SSL, HTTP2 over TCP und HTTP1) in Abhängigkeit der Browser-Unterstützung verwendet.
Im Anschluss deb Server neustarten:
<pre>
sudo systemctl restart apache2.service
</pre>
=== Testen ===
{{note|Hinweis: Von Browsern wird HTTP2 aktuell (Juni 2020) nur über SSL unterstützt}}
==== Browser ====
Im Chrome-Browser die ''DevTools'' öffnen und unter ''Network'' die Spalte ''Protokoll'' aktivieren => dort sollte dann ''h2'' als Protokoll stehen.
==== Curl ====
<pre>
curl -v --http2 http://10.0.0.176/phpmyadmin/
</pre>
</pre>


Zeile 281: Zeile 334:


[https://www.howtoforge.com/how-to-enable-http-2-in-apache/ https://www.howtoforge.com/how-to-enable-http-2-in-apache/]
[https://www.howtoforge.com/how-to-enable-http-2-in-apache/ https://www.howtoforge.com/how-to-enable-http-2-in-apache/]
[https://httpd.apache.org/docs/2.4/howto/http2.html https://httpd.apache.org/docs/2.4/howto/http2.html]
== Neuinstallieren ==
[[Apache HTTP Neuinstallation (Linux)|Apache HTTP Neuinstallation]]
== Server im Problemfall neustarten ==
{{note|Noch in Bearbeitung}}
<pre>
sudo vi /usr/local/bin/check_apache.sh
</pre>
<pre>
#!/bin/bash
TEMP_FOLDER=/tmp/.check_apache
FILE=index.html
mkdir $TEMP_FOLDER > /dev/null 2>&1
cd $TEMP_FOLDER
rm -f $FILE
wget -t 3 -O $FILE https://tutorials.kirner.or.at
if [ ! -s $FILE ]
then
  sudo /bin/systemctl reload apache2.service
  /usr/bin/mail -s "Apache2 web1 restartet" martin@kirner.or.at <<< 'Apache2 of server "web1" has been restart'
fi
</pre>
<pre>
sudo chmod a+x /usr/local/bin/check_apache.sh
</pre>


== Fehlermeldungen ==
== Fehlermeldungen ==
Zeile 313: Zeile 403:


[https://stackoverflow.com/questions/36138517/apache-warns-that-my-self-signed-certificate-is-a-ca-certificate https://stackoverflow.com/questions/36138517/apache-warns-that-my-self-signed-certificate-is-a-ca-certificate]
[https://stackoverflow.com/questions/36138517/apache-warns-that-my-self-signed-certificate-is-a-ca-certificate https://stackoverflow.com/questions/36138517/apache-warns-that-my-self-signed-certificate-is-a-ca-certificate]
=== [so:warn] [pid 11611] AH01574: module dav_module is already loaded, skipping ===
Die Konfigurationsdatei
<pre>
sudo vi /etc/apache2/mods-available/dav.load
</pre>
bearbeiten und <code><IfModule !mod_dav.c></code> hinzufügen:
<pre>
<IfModule !mod_dav.c>
    LoadModule dav_module /usr/lib/apache2/modules/mod_dav.so
</IfModule>
</pre>
=== The mpm module (prefork.c) is not supported by mod_http2 ===
{{note|01.11.2020 - Testweise HTTP2 deaktiviert}}
<pre>
???
</pre>
=== Leere Antworten bei PHP-Anfragen ===
<pre>
sudo vi /etc/apache2/envvars
</pre>
<pre>
export USE_ZEND_ALLOC=0
</pre>
[https://serverfault.com/questions/66662/apache-gives-empty-reply https://serverfault.com/questions/66662/apache-gives-empty-reply]
[https://www.php.net/manual/de/internals2.memory.management.php https://www.php.net/manual/de/internals2.memory.management.php]




Zurück zu [[Ubuntu#A (Server)|Ubuntu]]
Zurück zu [[Ubuntu#A (Server)|Ubuntu]]

Aktuelle Version vom 16. Juli 2023, 14:29 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 php-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>

bzw. bei Einschränkung auf bestimmte Netzwerke:

Alias /phpmyadmin "/var/www/phpmyadmin/"
<Directory "/var/www/phpmyadmin">
    Require ip 10.0.0.0/24 10.3.0.0/24 10.8.5.0/24

    Options +FollowSymLinks
    ...

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

Weiterleitungen mit htaccess

Links

https://www.df.eu/blog/301-redirects-weiterleitungen-mit-htaccess/

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

https://www.digitalocean.com/community/tutorials/how-to-set-up-password-authentication-with-apache-on-ubuntu-14-04

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

HTTP2 einrichten

Installation

sudo apt-get install -y php-fpm

Konfiguration

sudo a2dismod php7.3
sudo a2enconf php7.3-fpm
sudo a2enmod proxy_fcgi
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo a2enmod http2

Um HTTP2 global zu aktivieren, in der Datei

sudo vi /etc/apache2/apache2.conf

folgende Zeile hinzufügen:

# enable http2
Protocols h2 h2c http/1.1

Dadurch werden die Protokolle in dieser Reihenfolge (HTTP2 over SSL, HTTP2 over TCP und HTTP1) in Abhängigkeit der Browser-Unterstützung verwendet.


Im Anschluss deb Server neustarten:

sudo systemctl restart apache2.service

Testen

Hinweis: Von Browsern wird HTTP2 aktuell (Juni 2020) nur über SSL unterstützt

Browser

Im Chrome-Browser die DevTools öffnen und unter Network die Spalte Protokoll aktivieren => dort sollte dann h2 als Protokoll stehen.

Curl

curl -v --http2 http://10.0.0.176/phpmyadmin/

Links

https://www.howtoforge.com/how-to-enable-http-2-in-apache/

https://httpd.apache.org/docs/2.4/howto/http2.html

Neuinstallieren

Apache HTTP Neuinstallation

Server im Problemfall neustarten

Noch in Bearbeitung

sudo vi /usr/local/bin/check_apache.sh
#!/bin/bash

TEMP_FOLDER=/tmp/.check_apache
FILE=index.html

mkdir $TEMP_FOLDER > /dev/null 2>&1
cd $TEMP_FOLDER

rm -f $FILE
wget -t 3 -O $FILE https://tutorials.kirner.or.at

if [ ! -s $FILE ]
then
  sudo /bin/systemctl reload apache2.service
  /usr/bin/mail -s "Apache2 web1 restartet" martin@kirner.or.at <<< 'Apache2 of server "web1" has been restart'
fi
sudo chmod a+x /usr/local/bin/check_apache.sh

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 !?)

https://sysadmin.compxtreme.ro/how-to-deal-with-rsa-server-certificate-is-a-ca-certificate-basicconstraints-ca-true-problem/

https://stackoverflow.com/questions/36138517/apache-warns-that-my-self-signed-certificate-is-a-ca-certificate


[so:warn] [pid 11611] AH01574: module dav_module is already loaded, skipping

Die Konfigurationsdatei

sudo vi /etc/apache2/mods-available/dav.load

bearbeiten und <IfModule !mod_dav.c> hinzufügen:

<IfModule !mod_dav.c>
    LoadModule dav_module /usr/lib/apache2/modules/mod_dav.so
</IfModule>

The mpm module (prefork.c) is not supported by mod_http2

01.11.2020 - Testweise HTTP2 deaktiviert

???

Leere Antworten bei PHP-Anfragen

sudo vi /etc/apache2/envvars
export USE_ZEND_ALLOC=0

https://serverfault.com/questions/66662/apache-gives-empty-reply

https://www.php.net/manual/de/internals2.memory.management.php


Zurück zu Ubuntu