Web sunucusu rastgele farklı vhost'lar sunar


9

Ubuntu Trusty üzerinde nginx çalışıyor. Tek bir ip adresinde çalışan, https üzerinden birkaç web sitesi sunar.

Rastgele, iş yüküyle biraz ilgili görünse de, bazen tek istekler yanlış hayalete dönüşür. Bu lustrum.thalia.nu, servis talepleri thalia.nuveya tam tersi taleplere yol açar . Bu, kullanıcılar aniden farklı bir web sitesine girdiği için kötü hata sayfaları verir. Tuşuna bastığınızda F5, kullanıcılar tekrar orijinal hedefe ulaşır.

Tarayıcı veya işletim sistemi ile ilgili görünmüyor. Firefox (Linux, Windows, Mac), Edge (Windows) ve Chrome (Linux, Windows, Android) ve Safari'de (iOS) gerçekleştiği onaylandı.

Sorun, sistem yük altına alındığında daha sık ortaya çıkıyor ve bu da bir çeşit yarış durumu olduğunu gösteriyor.

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;
        }
}

Gördüğünüz gibi, bu iki alan için farklı PHP5-FPM havuzları çalıştırıyoruz. Bu havuzlar farklı klasörlere kopyalanır ve farklı kullanıcılar olarak çalıştırılır. PHP-FPM'nin yapılandırması, anlayabildiğim kadarıyla oldukça standart.

Hem nginx 1.4.6-ubuntu3 hem de nginx 1.8.0-1 + güvenilirlerini denedik.

Log telemetri

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"

Bu satırda sayfa isteğinin /committeesbirdenbire yönlendirildiğini görebilirsiniz wp-admin. Görünüşe /committeesgöre thalia-lustrumPHP-fpm havuzu tarafından yapılan istek ...

DNS bölge dosyası

Bunun nasıl alakalı olabileceğini görmüyoruz, ama ...

;; 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

1
Etki alanları için DNS ayarlarınızı kontrol edin.
Diamond

1
@bangal, aynı IP'yi gösteren bir A ve CNAME kaydıdır. Yine de bunun nasıl ilişkili olduğunu görmüyorum; bunlar iyi bir şekilde çözülür ve bir DNS sorununun bu kadar tutarsız bir şekilde ortaya çıkması olası görünmemektedir.
Joost

2
@ThomWiggers, günlük dosyanıza Host:http üstbilgisi ve kullanıcı aracısının içeriğini ekleyebilir misiniz ? Nasıl yapacağınız için buraya bakın: serverfault.com/questions/636790/… . Aslında web sitelerinize bazı istekler yapmaya çalıştım ama sorununuzu yeniden üretemedim. Bunu üretmek için hangi müşteriyi kullanıyorsunuz?
Fredi

3
Sadece "Üçüncü taraf içeriği yüklü değil" ya da üzerinde çalıştığınız için bir şey var mı, yoksa başka bir PHP havuzuna ya da başka bir şeye (aynı hatayı tetikleyerek) mı geldim? Ayrıca config.phpbulunamadı hakkında kısa bir hata var .
Halfgaar

2
@kasperd serverfault.com/questions/737349/… . Yalnızca PHP komut dosyalarını etkiliyor gibi görünüyor.
Thom Wiggers

Yanıtlar:


4

Bu sorunu saatlerce ayıkladıktan sonra nihayet nedenini takip edebildik. Nedeni değil nginx, PHP-fpm gibi görünüyor. php5-fpmSürüm çalıştırıyoruz 5.5.9-1ubuntu4.14. Yeni işçiler sorulduğunda, bazen bir şeyler ters gidiyor ve işçiler farklı işçilerin kodunu (parçası?) İşletiyorlar.

Çözümümüz /etc/php5/fpm/php5-fpm.confkendi pool.dklasörleriyle farklı kopyalara kopyalamak , ardından /etc/init.d/php5-fpmyeni yapılandırma dosyasıyla başlatmak için kopyalamak (ayrıca dosyalar oluşturmak /etc/init/) idi. Yani artık php5-fpmhavuz başına bir süreç yöneticimiz var . Ayrı kroketlere ve soketlere sahip olmak, işleri yeterince ayrı tutamaz.


Şu anda bu konfigürasyonumuzda veya php5-fpm'de (bu sürümü) bir sorun olup olmadığının belirsiz olduğunu unutmayın, ancak ikincisi benzer raporların eksikliği göz önüne alındığında görünmüyor. Bu sorunun nedenini bulursak, bu cevap güncellenir.
Joost

1

Aynı sorunla karşı karşıyayım ama Debian'da Apache2.4.25 ve PHP7.1-FPM ile. İşlemleri ayırmanın bir yolu https://ma.ttias.be/a-better-way-to-run-php-fpm/

Benim gibi bu çözümü küçük web siteleri için çok ağır bulanlar için php_admin_value[opcache.revalidate_freq] = 0, php-fpm havuz yapılandırma dosyasının sonuna ekleyin . Ancak, bunun performanslar üzerinde ciddi bir etkisi olabilir ...

İşte resmi hata raporu: https://bugs.php.net/bug.php?id=67141


0

Nginx SNI'yi destekliyor mu? Nginx -V'yi çalıştırabilirsiniz ve TLS SNI desteği etkin gibi bir şey görmelisiniz. Eğer yoksa, o olabilir hostname el sıkışma sonra gönderilir ve ben tahmin ediyorum çünkü * .thalia.nu için bir joker sertifikası neden olmak


Tabii ki, SNI olmadan bu çok zaman yerine% 100 yanlış gidiyor. (ve bunu da kontrol ettim, kesinlikle etkindir)
Thom Wiggers

FWIW, bir joker karakter sertifikası sunmadığımızı, ancak ayrı alt alanlar için ayrı sertifikalar kullandığımızı unutmayın. Bu, soruda listelenen yapılandırmaya dahil edilmiştir.
Joost

lustrum.thalia.nu sertifikası Thalia.nu için de geçerli olsa da
Thom Wiggers

İncludeSubDomains parametresini böyle eklemeyi deneyebilir misiniz? add_header Katı-Taşıma-Güvenlik "max-age = 63072000; includeSubDomains; önyükleme";
Mugurel

@ThomWiggers Sertifika birden çok etki alanı için geçerliyse, SNI'ye gerek kalmadan tek bir IP'de birden çok etki alanını desteklemek mümkündür.
kasperd

-1

Sertifika doğru değil gibi görünüyor: firefox bana thalia.nu için değil www.thalia.nu için verildiğini söylüyor.

Sorun yaratan şey IMHO. Başka bir sertifika ile deneyin veya SSL olmadan HTTP bağlantılarını etkinleştirmeyi deneyin.


Bunu yeniden üretemeyiz. Sertifika , her iki alan adını da içeriyordu www.thalia.nuve thalia.nuiçeriyordu www. Hangi Firefox sürümünü ve hangi platformda kullanıyorsunuz?
Joost
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.