Веб-сервер випадковим чином обслуговує різні голоси


9

У нас працює nginx на Ubuntu Trusty. Він обслуговує кілька веб-сайтів через https, працює на одній ip-адресі.

Випадково, хоча це здається трохи пов'язаним з робочим навантаженням, іноді поодинокі запити з’являються на неправильному vhost. Це призводить до запитів щодо lustrum.thalia.nuїх обслуговування thalia.nuта навпаки. Потім це дає неприємні сторінки з помилками, коли користувачі раптом опиняються на іншому веб-сайті. Після натискання 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;
        }
}

Як бачите, для цих двох доменів ми використовуємо різні пули PHP5-FPM. Ці пули містяться в різних папках і працюють у різних користувачів. Наскільки я можу сказати, конфігурація PHP-FPM є досить стандартною.

Ми спробували як nginx 1.4.6-ubuntu3, так і nginx 1.8.0-1 + надійний.

Журнальна телеметрія

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. Це здається , що запит /committeesбув оброблювані thalia-lustrumPHP-футів в хвилину басейн ...

Файл зони 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
Просимо перевірити свої настройки DNS для доменів.
Діамант

1
@bangal - це записи A і CNAME, що вказують на той самий IP. Я не бачу, як це пов’язано; вони вирішуються добре, і, мабуть, навряд чи проблема DNS виявиться настільки непослідовно.
Joost

2
@ThomWiggers, чи можете ви додати до файлу журналу вміст Host:заголовка http та агента користувача? Дивіться тут для того, як: serverfault.com/questions/636790 / ... . Насправді я спробував зробити кілька запитів на ваші веб-сайти, але не відтворив вашу проблему. Якого клієнта ви використовуєте для відтворення цього?
Фреди

3
Це факт, що я щойно отримав "Вміст сторонньої сторони не встановлений", чи щось, тому що ви працюєте над ним, чи я потрапив у інший пул PHP чи щось таке (викликає ту ж помилку)? Я також отримав коротку помилку про config.phpне знайдений.
Halfgaar

2
@kasperd serverfault.com/questions/737349/… . Схоже, це впливає лише на скрипти PHP.
Том Віггерс

Відповіді:


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менеджер процесів на пул. Маючи окремі хротони та розетки, не здається, щоб вони були досить відокремленими.


Зауважте, що наразі незрозуміло, чи це проблема в нашій конфігурації або в (цій версії) php5-fpm, хоча остання не видається ймовірною з огляду на відсутність подібних звітів. Якщо ми нарешті знайдемо причину виникнення цієї проблеми, ця відповідь буде оновлена.
Joost

1

Я стикаюся з тією ж проблемою, але на Debian з Apache2.4.25 та PHP7.1-FPM. Ось спосіб розділити процеси https://ma.ttias.be/a-better-way-to-run-php-fpm/

Для таких, як я, хто може 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


Звичайно ж, без СНІ це піде не так 100% часу, а не дуже періодично. (і я також перевірив це, це напевно ввімкнено)
Том Віггерс

FWIW зауважимо, що ми не надаємо сертифікат підстановки, але використовуємо індивідуальні сертифікати для окремих субдоменів. Це включено в конфігурацію, перелічену у питанні.
Joost

..багато сертифікат lustrum.thalia.nu також дійсний для Thalia.nu
Том Віггерс

Чи можете ви спробувати додати такий параметр includeSubDomains, як цей? add_header Strict-Transport-Security "max-age = 63072000; includeSubDomains; preload";
Mugurel

@ThomWiggers Якщо сертифікат дійсний для кількох доменів, можна підтримувати декілька доменів в одному IP без необхідності використання SNI.
kasperd

-1

Здається, що сертифікат невірний: Firefox повідомляє мені, що він виданий для www.thalia.nu, а не thalia.nu.

Це ІМХО, що викликає неприємності. Спробуйте з іншим сертифікатом або спробуйте активувати HTTP-з'єднання без SSL.


Ми не можемо відтворити це. Сертифікат подається на www.thalia.nuі thalia.nuвключає обидва домени, з і без www. Яку версію Firefox ви використовуєте та на якій платформі?
Joost
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.