Apache

Weiterleitung von HTTP auf HTTPS

caticonslite_bm_alt

Im Chromium Blog wurde angekündigt, dass mit Veröffentlichung von Chrome 68 im Juli 2018 alle via HTTP abgerufenen Seiten als „Nicht sicher“ in der Adressleiste gekennzeichnet werden. Dank Diensten wie Let’s Encrypt oder Cloudflare ist die Aktivierung eines SSL- bzw. TLS-Zertifikats heutzutage einfach und kostenlos möglich. Um die Weiterleitung von HTTP auf HTTPS für die Webseite zu aktivieren ist folgende Apache-Konfiguration (z.B in der .htaccess-Datei) erforderlich:

RewriteEngine On
RewriteCond %{HTTP_HOST} =blog.webentwickler.at
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

Jede RewriteCond muss für die nachfolgende RewriteRule zutreffen, damit diese angewandt wird. In diesem Fall muss der Hostname „blog.webentwickler.at“ lauten und die Environment-VariableHTTPS“ darf nicht „on“ sein und „HTTP:X-Forwarded-Proto“ darf nicht „https“ sein, damit die Weiterleitung auf die HTTPS-Adresse erfolgt. Die Überprüfung von „HTTPS“ ist für direkt auf Apache aufgeschaltete Domains erforderlich, „HTTP:X-Forwarded-Proto“ kommt im Falle eines Reverse-Proxy (z.B. NGINX oder Varnish) oder Cloudflare zum Tragen.

TYPO3 mit Komprimierung auf Plesk-Host mit Reverse Proxy nginx

caticonslite_bm_alt

Wird in TYPO3 die Frontend-Komprimierung mit „$GLOBALS[‚TYPO3_CONF_VARS‘][‚FE‘][‚compressionLevel‚] = 9″ und in den TypoScript-Setup-Einstellungen „config.compressJs“ bzw. „config.compressCss“ aktiviert, werden statische „pre-rendered“ JavaScript- und CSS-Dateien im gzip-Format im Ordner „typo3temp/compressor“ abgelegt. Für die korrekte Auslieferung ist für Apache (z.B. in der Datei .htaccess) die folgende Konfiguration erforderlich:

<FilesMatch "\.js\.gzip$">
	AddType "text/javascript" .gzip
</FilesMatch>
<FilesMatch "\.css\.gzip$">
	AddType "text/css" .gzip
</FilesMatch>
AddEncoding gzip .gzip

Seit Plesk 12 wird nginx als Reverse Proxy eingesetzt und statische Dateien werden nicht mehr von Apache, sondern direkt von nginx ausgeliefert. Das führt dazu, dass nginx die Dateien zwar mit dem korrekten „Content-Type“, aber ohne erforderliches „Content-Encoding: gzip“ im HTTP-Header ausliefert und infolgedessen die Dateien vom Browser falsch (so als wären sie nicht komprimiert) interpretiert werden. Analog zur o.g. Konfiguration für Apache ist auch eine Konfiguration für nginx erforderlich: In Plesk kann unter „Einstellungen für Apache & nginx“ der Domain entweder die Option „Intelligente Bearbeitung statischer Dateien“ deaktiviert werden (nicht empfohlen), oder folgende Konfiguration unter „Zusätzliche nginx-Anweisungen“ hinterlegt werden:

location ~ "\.js\.gzip$" {
	add_header Content-Encoding gzip;
	gzip off;
	types { text/javascript gzip; }
}
location ~ "\.css\.gzip$" {
	add_header Content-Encoding gzip;
	gzip off;
	types { text/css gzip; }
}

Diese Konfiguration bringt nginx dazu die komprimierten JS- und CSS-Dateien analog zu Apache zu behandeln und das erforderliche „Content-Encoding: gzip“ im HTTP-Header zu setzen.

Verwendung des ApplicationContext in TYPO3

caticonslite_bm_alt

TYPO3 bietet die Möglichkeit die Applikation in unterschiedlichen Kontexten (z.B. Development, Staging und Production) laufen zu lassen. Hierfür wird mittels Webserver-Konfiguration die Environment-Variable „TYPO3_CONTEXT“ gesetzt. Ein mögliche Variante zum Setzen des Kontexts befindet sich in der .htaccess-Beispieldatei aus dem typo3_src-Ordner, in angepasster und optimierter Form sieht dies wie folgt aus:

RewriteRule .? - [E=TYPO3_CONTEXT:Production]
RewriteCond %{HTTP_HOST} =staging.webentwickler.at
RewriteRule .? - [E=TYPO3_CONTEXT:Production/Staging]
RewriteCond %{HTTP_HOST} =dev.webentwickler.at
RewriteRule .? - [E=TYPO3_CONTEXT:Development]

Im o.g. Beispiel wird standardmäßig der TYPO3_CONTEXT bzw. in weiterer Folge der ApplicationContext auf „Production“ gesetzt. Für den Hostnamen „staging.webentwickler.at“ wird der Kontext „Production/Staging“ und für „dev.webentwickler.at“ der Kontext „Development“ gesetzt.

Der somit gesetzt Kontext kann nun in TypoScript bzw. direkt im Programmcode verwendet werden. Grundsätzlich wäre es  möglich den Kontext via Environment-Variable abzufragen, darauf sollte aber verzichtet werden und stattdessen die vom TYPO3-Core bereitgestellten Wrapper-Methoden verwendet werden, da es z.B. bei der Verwendung von php_fpm zu veränderten Environment-Variablen (REDIRECT_-Präfix, z.B.: REDIRECT_TYPO3_CONTEXT) kommen kann. In TypoScript verwendet man:

[applicationContext = Development]
	plugin.tx_webentwickler.settings.email = test@dev.webentwickler.at
[global]

Im PHP-Code (hier: „AdditionalConfiguration.php“):

if (\TYPO3\CMS\Core\Utility\GeneralUtility::getApplicationContext() == 'Development') {
	$GLOBALS['TYPO3_CONF_VARS']['SYS']['displayErrors'] = 1;
}

In einer sauber programmierten Anwendung sollte es grundsätzlich so sein, dass sämtliche Konfigurationen in TypoScript vorgenommen werden und somit die Verwendung der Methode getApplicationContext() im Programmcode nicht erforderlich sein, sondern ausschließlich auf die Konfigurationsdatei beschränken sollte.

Weitere Informationen zur Verwendung findet man in der TypoScript Reference unter Condition reference/applicationContext.

Piwik-Problem „Please check your server configuration. You may want to whitelist „*.html“ files from the „plugins“ directory.“ beheben

Nach der Aktualisierung von Piwik von 2.2.x auf 2.3.0 erhält man für das Plugin „ZenMode“ den Fehler „Please check your server configuration. You may want to whitelist „*.html“ files from the „plugins“ directory.“. Das Problem ist, dass sämtliche Ordner des Plugins für den Webserver nicht lesbar sind und somit ein „Access denied“ die Folge davon ist. Eine Anpassung der Ordner-Rechte schafft Abhilfe – am einfachsten erledigt man dies via SSH ausgehend vom Root-Ordner von Piwik:

find plugins/ZenMode/ -type d -exec chmod 0755 {} \;

Alternativ ist natürlich auch eine Anpassung mittels FTP-Programm möglich, in diesem Fall muss man u.u. die Ordner-Struktur des Plugins händisch durchgehen.

AllowOverride MultiViews

caticonslite_bm_alt

Apache stellt mit dem Modul „mod_negotiation“ und der Option „MultiViews“ eine automatische Fehlerbehandlung zur Verfügung. Sollte der angeforderte URL nicht existieren, so wird nach Dateien mit dem selben Wortstamm gesucht. Das kann sich bei der Verwendung von „mod_rewrite“ negativ auswirken und zu einer falschen Auflösung von URLs führen. Um Probleme bei der Auflösung von URLs zu verhindern setzen CMS wie Drupal 7 oder TYPO3 NEOS die Option „Options -MultiViews“ in der .htaccess-Datei.

Ist „AllowOverride“ nicht korrekt gesetzt und erlaubt das Überschreiben der Option nicht, so resultiert dies in einem „Internal Server Error“ im Browser bzw. einem „[…]/.htaccess: Option MultiViews not allowed here“ in den Apache-Logs. In den seltensten Fällen möchte man das Überschreiben aller Optionen mit „AllowOverride All“ erlauben, sondern nur gezielt Freigaben hierfür erteilen. Dies kann man beispielsweise mit „AllowOverride AuthConfig FileInfo Indexes Limit Options=All,MultiViews“ erreichen.

1 2  nach oben