Wir haben Nginx unter Ubuntu Trusty. Es bedient mehrere Websites über https, die unter einer IP-Adresse ausgeführt werden.
Zufällig werden einzelne Anforderungen auf dem falschen vhost angezeigt, obwohl dies in geringem Zusammenhang mit der Arbeitslast zu stehen scheint. Dies führt zu Anfragen nach lustrum.thalia.nu
Zustellung durch thalia.nu
und umgekehrt. Dies führt dann zu bösen Fehlerseiten, da Benutzer plötzlich auf einer anderen Website landen. Wenn Sie drücken F5, landen die Benutzer wieder auf dem ursprünglichen Ziel.
Es scheint nicht mit dem Browser oder dem Betriebssystem zu tun zu haben. Es wurde bestätigt, dass dies unter Firefox (Linux, Windows, Mac), Edge (Windows) und Chrome (Linux, Windows, Android) und Safari (iOS) geschieht.
Das Problem scheint häufiger aufzutreten, wenn das System unter Last gesetzt wird, was auf eine Art Rennbedingung hindeutet.
lustrum.thalia.nu
server {
server_name lustrum.thalia.nu;
listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/certs/lustrum.thalia.nu.crt;
ssl_certificate_key /etc/nginx/certs/lustrum.thalia.nu.key;
add_header Strict-Transport-Security "max-age=63072000; preload";
root /var/www/thalia-lustrum/public_html;
location / {
index index.php;
try_files $uri $uri/ /index.php?$args;
}
# Add trailing slash to */wp-admin requests.
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
# Pass all .php files onto a php-fpm/php-fcgi server.
location ~ [^/]\.php(/|$) {
include /etc/nginx/fastcgi_params;
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
fastcgi_pass unix:/var/run/php5-fpm-thalia-lustrum.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /public_html$fastcgi_script_name;
}
}
thalia.nu
server {
server_name thalia.nu;
listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/certs/www.thalia.nu.crt;
ssl_certificate_key /etc/nginx/certs/www.thalia.nu.key;
add_header Strict-Transport-Security "max-age=63072000; preload";
root /var/www/thalia/public_html;
location / {
try_files $uri $uri/ /index.php/$request_uri;
index index.php index.html index.htm;
}
location ~ \.php($|/) {
include /etc/nginx/fastcgi_params;
set $script $uri;
set $path_info "";
if ($uri ~ "^(.+\.php)(/.+)") {
set $script $1;
set $path_info $2;
}
fastcgi_read_timeout 120;
fastcgi_pass unix:/var/run/php5-fpm-thalia-www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /public_html$fastcgi_script_name;
}
}
Wie Sie sehen können, führen wir für diese beiden Domänen unterschiedliche PHP5-FPM-Pools aus. Diese Pools werden in verschiedenen Ordnern gespeichert und als verschiedene Benutzer ausgeführt. Die Konfiguration von PHP-FPM ist ansonsten, soweit ich das beurteilen kann, ziemlich Standard.
Wir haben sowohl nginx 1.4.6-ubuntu3 als auch nginx 1.8.0-1 + vertrauenswürdig ausprobiert.
Protokolltelemetrie
266.266.266.266 - - [25/Nov/2015:09:24:40 +0100] "GET /committees/175 HTTP/1.1" 302 5 "https://thalia.nu/committees" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:42.0) Gecko/20100101 Firefox/42.0" Host: "thalia.nu" Location: "https://thalia.nu/index.php//committees/wp-admin/setup-config.php"
In dieser Zeile sehen Sie, dass die Anforderung für die Seite /committees
plötzlich umgeleitet wird wp-admin
. Dies scheint, dass die Anfrage für /committees
vom thalia-lustrum
PHP-fpm-Pool bearbeitet wurde ...
DNS-Zonendatei
Wir sehen nicht, wie dies möglicherweise relevant sein kann, aber ...
;; MX Records
thalia.nu. 300 IN MX 20 relay.transip.nl.
thalia.nu. 300 IN MX 10 ivo.thalia.nu.
;; TXT Records
thalia.nu. 300 IN TXT "v=spf1 a mx a:mulgore.hexon-is.nl a:moonray.hexon-is.nl a:fred.thalia.nu a:ivo.thalia.nu ~all"
;; SPF Records (Sender Policy Framework)
thalia.nu. 300 IN SPF "v=spf1 a mx a:mulgore.hexon-is.nl a:moonray.hexon-is.nl a:fred.thalia.nu a:ivo.thalia.nu ~all"
;; CNAME Records
lustrum.thalia.nu. 300 IN CNAME thalia.nu.
;; A Records (IPv4 addresses)
thalia.nu. 300 IN A 131.174.31.8
www.thalia.nu. 300 IN A 131.174.31.8
ivo.thalia.nu. 300 IN A 131.174.31.8
Host:
http-Headers und des Benutzeragenten hinzufügen ? Hier erfahren Sie, wie: serverfault.com/questions/636790/… . Eigentlich habe ich versucht, einige Anfragen an Ihre Websites zu stellen, aber Ihr Problem konnte nicht reproduziert werden. Welchen Client verwenden Sie, um dies zu reproduzieren?config.php
nicht gefunden bekommen.Antworten:
Nach stundenlangem Debuggen dieses Problems konnten wir es endlich auf die Ursache zurückführen. Es scheint, dass die Ursache nicht ist
nginx
, aber PHP-fpm. Wir führen diephp5-fpm
Version aus5.5.9-1ubuntu4.14
. Es scheint, dass beim Gabeln neuer Arbeiter manchmal etwas schief geht und die Arbeiter (Teil?) Den Kodex verschiedener Arbeiter ausführen.Unsere Lösung bestand darin
/etc/php5/fpm/php5-fpm.conf
, mit ihren eigenenpool.d
Ordnern in verschiedene Kopien zu kopieren und dann zu kopieren/etc/init.d/php5-fpm
, um mit der neuen Konfigurationsdatei zu starten (auch Dateien in zu erstellen/etc/init/
). Das heißt, wir haben jetzt einenphp5-fpm
Prozessmanager pro Pool. Separate Chroots und Sockets zu haben, scheint die Dinge nicht getrennt genug zu halten.quelle
Ich stehe vor dem gleichen Problem, aber unter Debian mit Apache2.4.25 und PHP7.1-FPM. Hier ist eine Möglichkeit, Prozesse zu trennen: https://ma.ttias.be/a-better-way-to-run-php-fpm/
Für diejenigen wie mich, die diese Lösung für kleine Websites möglicherweise zu schwer finden, fügen Sie sie
php_admin_value[opcache.revalidate_freq] = 0
am Ende der Konfigurationsdatei des php-fpm-Pools hinzu. Dies kann jedoch schwerwiegende Auswirkungen auf die Leistung haben ...Hier ist der offizielle Fehlerbericht: https://bugs.php.net/bug.php?id=67141
quelle
Unterstützt Nginx SNI? Sie können nginx -V ausführen und sollten die TLS-SNI-Unterstützung aktiviert sehen. Wenn Sie dies nicht tun, kann dies der Grund sein, weil der Hostname nach dem Handshake gesendet wird und ich davon ausgehe, dass Sie ein Platzhalterzertifikat für * .thalia.nu haben
quelle
Es scheint, dass das Zertifikat nicht richtig ist: Firefox sagt mir, dass es für www.thalia.nu ausgestellt wurde, nicht für thalia.nu.
Dies ist meiner Meinung nach das, was Ärger verursacht. Versuchen Sie es mit einem anderen Zertifikat oder aktivieren Sie HTTP-Verbindungen ohne SSL.
quelle
www.thalia.nu
undthalia.nu
umfassen sowohl Domains mit und ohnewww
. Welche Firefox-Version verwenden Sie und auf welcher Plattform?