ウェブサーバーは異なる仮想ホストにランダムにサービスを提供します


9

Ubuntu Trustyでnginxを実行しています。1つのIPアドレスで実行され、https経由で複数のWebサイトにサービスを提供します。

ランダムに、それは作業負荷にわずかに関連しているように見えますが、単一の要求が間違ったvhostで発生することがあります。これにより、サービスの提供が要求さlustrum.thalia.nuthalia.nu、その逆も同様です。これにより、ユーザーが突然別のWebサイトにアクセスするため、厄介なエラーページが表示されます。を押すとF5、ユーザーは元のターゲットに戻ります。

ブラウザやオペレーティングシステムに関連しているようには見えません。Firefox(Linux、Windows、Mac)、Edge(Windows)、Chrome(Linux、Windows、Android)、Safari(iOS)で発生することが確認されています。

この問題は、システムに負荷がかかるとより頻繁に発生するようであり、何らかの競合状態を示しています。

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

ご覧のとおり、これら2つのドメインに対して異なるPHP5-FPMプールを実行しています。これらのプールは異なるフォルダーにchrootされ、異なるユーザーとして実行されます。それ以外の点では、PHP-FPMの構成は、私が知る限り、かなり標準的です。

nginx 1.4.6-ubuntu3とnginx 1.8.0-1 + trustyの両方を試しました。

ログテレメトリー

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"

この行で、ページのリクエストが/committees突然にリダイレクトされることがわかりますwp-admin。これは/committeesthalia-lustrumPHP-fpmプールによってリクエストが処理されたようです...

DNSゾーンファイル

これがどのように関連する可能性があるかはわかりませんが...

;; 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
PlesseがドメインのDNS設定を確認します。
ダイヤモンド

1
@bangalそれらは同じIPを指すAおよびCNAMEレコードです。ただし、これがどのように関連しているかはわかりません。これらは問題なく解決され、DNSの問題がそれほど一貫して現れない可能性は低いと思われます。
Joost

2
@ ThomWiggers、Host:httpヘッダーとユーザーエージェントのコンテンツをログファイルに追加できますか?方法についてはこちらをご覧ください:serverfault.com/questions/636790/…。実際、私はあなたのウェブサイトにいくつかのリクエストを出してみましたが、あなたの問題を再現できませんでした。これを再現するためにどのクライアントを使用していますか?
Fredi 2015年

3
「サードパーティのコンテンツがインストールされていない」などの問題に取り組んでいるのでしょうか、それとも別のPHPプールまたは何か(同じバグを引き起こしている)になってしまったのですか?また、config.php見つかりませんという短いエラーも表示されました。
Halfgaar 2015年

2
@kasperd serverfault.com/questions/737349/...。PHPスクリプトにのみ影響するようです。
Thom Wiggers、2015年

回答:


4

この問題を何時間かデバッグした後、ようやく原因を突き止めることができました。原因は原因ではないようnginxですが、PHP-fpmです。php5-fpmバージョンを実行しています5.5.9-1ubuntu4.14。新しいワーカーをフォークすると、何かがうまくいかず、ワーカーが別のワーカーのコードの一部を実行するようです。

私たちのソリューションは/etc/php5/fpm/php5-fpm.conf、独自のpool.dフォルダーを使用して別のコピーにコピーし、次にコピー/etc/init.d/php5-fpmして新しい構成ファイルで起動すること/etc/init/でした(これもでファイルを作成します)。これは、php5-fpmプールごとにプロセスマネージャーがあることを意味します。chrootとソケットを別々にしても、物事を十分に分離しているようには見えません。


これが私たちの構成またはphp5-fpm(のこのバージョン)の問題であるかどうかは現在のところ不明であることに注意してください。後者は同様のレポートがないため、おそらくそうではないようです。この問題が発生する理由を見つけたら、この回答は更新されます。
Joost

1

私は同じ問題に直面していますが、Apache2.4.25とPHP7.1-FPMを使用するDebianです。ここにプロセスを分離する方法がありますhttps://ma.ttias.be/a-better-way-to-run-php-fpm/

小さなWebサイトにはこのソリューションが重すぎると思う私のような人のためphp_admin_value[opcache.revalidate_freq] = 0に、php-fpmプール構成ファイルの最後に追加してください。しかし、それはパフォーマンスに深刻な影響を与える可能性があります...

これは公式のバグレポートです:https : //bugs.php.net/bug.php?id=67141


0

NginxはSNIをサポートしていますか?nginx -Vを実行すると、TLS SNIサポートなどが有効になっているはずです。そうでない場合、ホスト名がハンドシェイクの後に送信され、*。thalia.nuのワイルドカード証明書があると想定しているため、それ原因である可能性あります。


もちろん、SNIがなければ、たまにではなく100%エラーが発生します。(私はこれもチェックしましたが、確実に有効になっています)
Thom Wiggers 2015年

FWIW、ワイルドカード証明書は提供していませんが、個別のサブドメインには個別の証明書を使用しています。これは、質問にリストされている構成に含まれています。
Joost

..lustrum.thalia.nu証明書はThalia.nuにも有効です
Thom Wiggers

このようにincludeSubDomainsパラメータを追加してみてください。add_header Strict-Transport-Security "max-age = 63072000; includeSubDomains; preload";
ムグレル2015年

@ThomWiggers証明書が複数のドメインで有効な場合、SNIを必要とせずに、単一のIPで複数のドメインをサポートできます。
kasperd 2015年

-1

証明書が正しくないようです。firefoxは、thalia.nuではなくwww.thalia.nuに対して発行されたものだと言っています。

これが問題の原因である私見です。別の証明書で試すか、SSLなしでHTTP接続をアクティブにしてみてください。


それを再現することはできません。両方のドメインで提供される証明書www.thalia.nuthalia.nu、両方のドメインが含まれる証明書www。使用しているFirefoxのバージョンとプラットフォームを教えてください。
Joost
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.