เว็บเซิร์ฟเวอร์สุ่มให้บริการโฮสต์ที่แตกต่างกัน


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 ที่แตกต่างกันสำหรับสองโดเมนนี้ กลุ่มเหล่านี้ถูก chrooted ไปยังโฟลเดอร์ต่าง ๆ และเรียกใช้ในฐานะผู้ใช้ที่แตกต่างกัน การกำหนดค่าของ PHP-FPM นั้นค่อนข้างมาตรฐานเท่าที่ฉันสามารถบอกได้

เราได้ลองทั้ง nginx 1.4.6-ubuntu3 และ nginx 1.8.0-1 + เชื่อถือได้แล้ว

บันทึก telemetry

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-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
โปรดตรวจสอบการตั้งค่า DNS ของคุณสำหรับโดเมนต่างๆ
ไดมอนด์

1
@bangal เป็นระเบียน A และ CNAME โดยชี้ไปที่ IP เดียวกัน ฉันไม่เห็นว่าสิ่งนี้เกี่ยวข้องอย่างไร การแก้ปัญหาเหล่านี้ใช้ได้ดีและไม่น่าเป็นไปได้ที่ปัญหา DNS จะปรากฏอย่างไม่สอดคล้องกัน
Joost

2
@ThomWiggers คุณสามารถเพิ่มเนื้อหาของHost:ส่วนหัว http และตัวแทนผู้ใช้ในไฟล์บันทึกได้หรือไม่ ดูที่นี่สำหรับวิธีการ: serverfault.com/questions/636790/... ที่จริงฉันพยายามส่งคำขอไปยังเว็บไซต์ของคุณ แต่ไม่ได้ทำซ้ำปัญหาของคุณ คุณใช้ไคลเอนต์ใดในการทำซ้ำสิ่งนี้
Fredi

3
ความจริงที่ว่าฉันเพิ่งได้รับ "เนื้อหาของบุคคลที่สามไม่ได้ติดตั้ง" หรือบางสิ่งบางอย่างเพราะคุณกำลังทำงานอยู่หรือฉันจบลงที่สระ PHP หรือสิ่งอื่น (เรียกจุดบกพร่องเดียวกัน) หรือไม่ ฉันconfig.phpพบข้อผิดพลาดสั้น ๆ เกี่ยวกับไม่พบ
Halfgaar

2
@kasperd serverfault.com/questions/737349/… . ดูเหมือนจะมีผลกับสคริปต์ PHP เท่านั้น
Thom Wiggers

คำตอบ:


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ผู้จัดการกระบวนการต่อพูล มี chroots แยกและซ็อกเก็ตไม่ปรากฏเพื่อแยกสิ่งต่าง ๆ พอ


โปรดทราบว่าในปัจจุบันยังไม่ชัดเจนว่านี่เป็นปัญหาในการกำหนดค่าของเราหรือใน (รุ่นนี้) 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 pool ท้ายไฟล์การกำหนดค่า อย่างไรก็ตามนั่นอาจมีผลกระทบอย่างรุนแรงต่อการแสดง ...

นี่คือรายงานข้อผิดพลาดอย่างเป็นทางการ: https://bugs.php.net/bug.php?id=67141


0

Nginx รองรับ SNI หรือไม่ คุณสามารถเรียกใช้ nginx -V และควรเห็นการเปิดใช้งานการสนับสนุน TLS SNI ถ้าคุณไม่มีนั่นอาจเป็นเพราะชื่อโฮสต์ถูกส่งหลังจากการจับมือกันและฉันสมมติว่าคุณมีใบรับรองไวด์การ์ดสำหรับ * .thalia.nu


แน่นอนว่าถ้าไม่มี SNI สิ่งนี้จะผิดพลาดได้ 100% แทนที่จะเป็นครั้งคราว (และฉันได้ตรวจสอบสิ่งนี้แล้วยังเปิดใช้งานได้อย่างแน่นอน)
Thom Wiggers

FWIW โปรดทราบว่าเราไม่ให้บริการใบรับรองไวด์การ์ด แต่ใช้ใบรับรองเดี่ยวสำหรับโดเมนย่อยแยกต่างหาก สิ่งนี้รวมอยู่ในการกำหนดค่าที่แสดงในคำถาม
Joost

.. เพียงแค่ใบรับรอง lustrum.thalia.nu ก็ใช้ได้กับ Thalia.nu
Thom Wiggers

คุณลองเพิ่มพารามิเตอร์ includeSubDomains แบบนี้ได้ไหม add_header Strict-Transport-Security "max-age = 63072000; includeSubDomains; preload";
Mugurel

@ThomWiggers หากใบรับรองถูกต้องสำหรับหลายโดเมนเป็นไปได้ที่จะสนับสนุนหลายโดเมนใน IP เดียวโดยไม่จำเป็นต้องใช้ SNI
kasperd

-1

ดูเหมือนว่าใบรับรองไม่ถูกต้อง: firefox กำลังบอกฉันว่ามีการออกให้สำหรับ www.thalia.nu ไม่ใช่ thalia.nu

นี่คือ IMHO สิ่งที่ก่อให้เกิดปัญหา ลองใช้ใบรับรองอื่นหรือลองเปิดใช้งานการเชื่อมต่อ HTTP โดยไม่ใช้ SSL


เราไม่สามารถทำซ้ำได้ ใบรับรองบริการที่www.thalia.nuและรวมทั้งโดเมนที่มีและไม่มีthalia.nu wwwคุณใช้ Firefox เวอร์ชันใดและอยู่บนแพลตฟอร์มใด
Joost
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.