Máy chủ web phục vụ ngẫu nhiên các vhost khác nhau


9

Chúng tôi đã có nginx chạy trên Ubuntu Trusty. Nó phục vụ một số trang web qua https, chạy trên một địa chỉ IP.

Ngẫu nhiên, mặc dù có vẻ hơi liên quan đến tải công việc, đôi khi các yêu cầu đơn lẻ xuất hiện trên vhost sai. Điều này dẫn đến các yêu cầu lustrum.thalia.nuđược phục vụ bởi thalia.nuvà ngược lại. Điều này sau đó cung cấp cho các trang lỗi khó chịu khi người dùng đột nhiên kết thúc trên một trang web khác. Khi bạn nhấn F5, người dùng sẽ kết thúc mục tiêu ban đầu một lần nữa.

Dường như trình duyệt hoặc hệ điều hành không liên quan. Điều đó đã được xác nhận là xảy ra trên Firefox (Linux, Windows, Mac), Edge (Windows) và Chrome (Linux, Windows, Android) và Safari (iOS).

Vấn đề dường như xảy ra thường xuyên hơn khi hệ thống được đặt dưới tải, gợi ý một số điều kiện cuộc đua.

ham muốn.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;
        }
}

Như bạn có thể thấy, chúng tôi đang chạy các nhóm PHP5-FPM khác nhau cho hai miền này. Các nhóm này được phân bổ vào các thư mục khác nhau và chạy như những người dùng khác nhau. Cấu hình của PHP-FPM khá chuẩn theo như tôi có thể nói.

Chúng tôi đã thử cả nginx 1.4.6-ubfox3 và nginx 1.8.0-1 + đáng tin cậy.

Đăng nhập từ xa

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"

Trong dòng này, bạn có thể thấy rằng yêu cầu cho trang /committeesđột nhiên được chuyển hướng đến wp-admin. Có vẻ như yêu cầu /committeesđã được xử lý bởi nhóm thalia-lustrumPHP-fpm ...

Tệp vùng DNS

Chúng tôi không thấy làm thế nào điều này có thể có liên quan, nhưng ...

;; 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
Vui lòng kiểm tra cài đặt DNS của bạn cho các miền.
Kim cương

1
@bangal chúng là bản ghi A và CNAME, trỏ đến cùng một IP. Tôi không thấy làm thế nào điều này có liên quan, mặc dù; những điều này giải quyết tốt và dường như không có vấn đề gì về DNS sẽ biểu hiện không nhất quán như vậy.
Joost

2
@ThomWiggers, bạn có thể thêm vào tệp nhật ký của mình nội dung của Host:tiêu đề http và tác nhân người dùng không? Xem tại đây để biết cách: serverfault.com/questions/636790/ . Trên thực tế tôi đã cố gắng thực hiện một số yêu cầu cho trang web của bạn nhưng không thể tái tạo vấn đề của bạn. Khách hàng nào bạn đang sử dụng để tái tạo điều này?
Fredi

3
Có phải thực tế là tôi vừa nhận được "Nội dung của bên thứ ba chưa được cài đặt" hoặc một cái gì đó bởi vì bạn đang làm việc với nó, hoặc tôi đã kết thúc tại một nhóm PHP khác hoặc một cái gì đó (gây ra lỗi tương tự)? Tôi cũng có một lỗi ngắn về config.phpkhông tìm thấy.
Halfgaar

2
@kasperd serverfault.com/questions/737349/ . Nó dường như chỉ ảnh hưởng đến các tập lệnh PHP.
Thom Wiggers

Câu trả lời:


4

Sau nhiều giờ gỡ lỗi, cuối cùng chúng tôi cũng có thể tìm ra nguyên nhân. Nó xuất hiện nguyên nhân không phải nginx, nhưng PHP-fpm. Chúng tôi đang chạy php5-fpmphiên bản 5.5.9-1ubuntu4.14. Có vẻ như khi từ bỏ công nhân mới, đôi khi có điều gì đó không ổn và công nhân chạy (một phần?) Mã của các công nhân khác nhau.

Giải pháp của chúng tôi là sao chép /etc/php5/fpm/php5-fpm.confvào các bản sao khác nhau bằng các pool.dthư mục của riêng họ , sau đó sao chép /etc/init.d/php5-fpmđể khởi chạy với tệp cấu hình mới (cũng tạo tệp trong /etc/init/). Điều này có nghĩa là chúng tôi hiện có một php5-fpmtrình quản lý quy trình cho mỗi nhóm. Có ngăn cách và ổ cắm không xuất hiện để giữ mọi thứ tách biệt.


Lưu ý rằng hiện tại vẫn chưa rõ liệu đây có phải là sự cố trong cấu hình của chúng tôi hay trong (phiên bản này) php5-fpm, mặc dù sau này dường như không có khả năng thiếu các báo cáo tương tự. Nếu chúng ta kết thúc việc tìm ra lý do tại sao vấn đề này xảy ra, câu trả lời này sẽ được cập nhật.
Joost

1

Tôi đang đối mặt với cùng một vấn đề nhưng trên Debian với Apache2.4.25 và PHP7.1-FPM. Đây là một cách để phân tách các quy trình https://ma.ttias.be/a-better-way-to-run-php-fpm/

Đối với những người như tôi, những người có thể thấy giải pháp này quá nặng đối với các trang web nhỏ, hãy thêm php_admin_value[opcache.revalidate_freq] = 0vào cuối tệp cấu hình nhóm php-fpm. Tuy nhiên, điều đó có thể ảnh hưởng nghiêm trọng đến màn trình diễn ...

Đây là báo cáo lỗi chính thức: https://bugs.php.net/orms.php?id=67141


0

Nginx có hỗ trợ SNI không? Bạn có thể chạy nginx -V và sẽ thấy một cái gì đó như hỗ trợ TLS SNI được bật. Nếu bạn không, đó có thể là lý do vì tên máy chủ được gửi sau khi bắt tay và tôi cho rằng bạn có chứng chỉ ký tự đại diện cho * .thalia.nu


Tất nhiên là có, nếu không có SNI thì điều này sẽ sai 100% thời gian thay vì rất thỉnh thoảng. (và tôi cũng đã kiểm tra cái này, nó chắc chắn đã được bật)
Thom Wiggers

FWIW, lưu ý rằng chúng tôi không cung cấp chứng chỉ ký tự đại diện, nhưng sử dụng các chứng chỉ riêng cho các tên miền phụ riêng biệt. Điều này được bao gồm trong cấu hình được liệt kê trong câu hỏi.
Joost

.. mặc dù giấy chứng nhận lustrum.thalia.nu cũng có giá trị đối với Thalia.nu
Thom Wiggers

Bạn có thể thử thêm tham số includeSubDomains như thế này không? add_header Strict-Transport-Security "max-age = 63072000; includeSubDomains; preload";
Mugurel

@ThomWiggers Nếu chứng chỉ hợp lệ cho nhiều tên miền, có thể hỗ trợ nhiều tên miền trên một IP mà không cần SNI.
kasperd

-1

Có vẻ như chứng chỉ không đúng: firefox đang nói với tôi rằng nó được cấp cho www.thalia.nu chứ không phải thalia.nu.

Đây là IMHO những gì gây rắc rối. Thử với chứng chỉ khác hoặc thử kích hoạt kết nối HTTP mà không cần SSL.


Chúng ta không thể tái tạo điều đó. Chứng chỉ được phục vụ tại www.thalia.nuthalia.nubao gồm cả hai miền, có và không có www. Phiên bản Firefox nào bạn đang sử dụng và trên nền tảng nào?
Joost
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.