CẬP NHẬT: Có vẻ như vấn đề cốt lõi với hình ảnh không được tải xuất phát từ cách plugin / tiện ích mở rộng HTTPS Everywhere của EFF xử lý một số URL Tumblr. Các nhà phát triển đã được thông báo và có một bản sửa lỗi được đưa ra . Câu trả lời này về cơ bản phá vỡ công việc thám tử được thực hiện để khám phá vấn đề như được nêu trong câu hỏi ban đầu và có thể chứng minh hữu ích cho việc gỡ lỗi / chẩn đoán thêm nếu một vấn đề tương tự xuất hiện trong tương lai.
EDIT: Nội dung lớn hơn về leeching hình ảnh có vẻ không hợp lệ. Vì vậy, sẽ thêm một ý tưởng mới ở phía trên và để lại thông tin leeching hình ảnh ở phía dưới chỉ trong trường hợp nó hữu ích cho ai đó.
Ý tưởng CDN của Amazon CloudFront
Được rồi, bằng cách sử dụng các URL mà bạn đã cung cấp, cũng như một số trải nghiệm trong thế giới thực của tôi với các thiết lập CDN của Amazon CloudFront, tôi nghĩ rằng tôi đã phát hiện ra điều gì đó. Có vẻ như cấu hình CDN Amazon CloudFront của Tumblr bị nghẹt thở vì một số lý do. Đây là lý do tại sao tôi nghĩ rằng đó là trường hợp.
Hãy lấy URL ví dụ này:
http://36.media.tumblr.com/d685b02fdf2d3f167c22d9a97e27e87a/tumblr_nfpq5qPZ4v1tognpro1_1280.png
Bây giờ hãy chạy curl -I
để lấy thông tin tiêu đề trên tệp đó:
curl -I http://36.media.tumblr.com/d685b02fdf2d3f167c22d9a97e27e87a/tumblr_nfpq5qPZ4v1tognpro1_1280.png
Đầu ra cho điều đó sẽ là một cái gì đó như thế này:
HTTP/1.1 200 OK
Content-Type: image/png
Content-Length: 782141
Connection: keep-alive
Accept-Ranges: bytes
Cache-Control: max-age=1209600
Date: Thu, 05 Mar 2015 02:15:44 GMT
Server: nginx
X-Cache: Miss from cloudfront
Via: 1.1 7e54fc06cd70e4752fe050bbe5c130be.cloudfront.net (CloudFront)
X-Amz-Cf-Id: QyIUyzfaJJN3PU_xWkW0P-D2kjg_1cVenKzFAoY2PubgZQlBHWorZQ==
Bây giờ, điều cần chú ý ở đây là Date
(ngày và giờ của tệp trên điểm cuối CloudFront) và X-Cache
(trạng thái phân phối nội dung của Amazon). Hành vi điển hình trên Amazon CloudFront là quyền truy cập đầu tiên sẽ truyền tải một Miss Miss từ đám mây trên nền tảng đám mây và sau đó nếu bạn thực hiện một thao tác khác curl -I
ngay sau đó thì nên có một Hit from cloudfront
.
Nhưng đó không phải là những gì tôi thấy bây giờ. Đây là một sự cố về Date
và X-Cache
trạng thái của một loạt các truy cập tôi đã thực hiện:
Date: Thu, 05 Mar 2015 02:19:37 GMT
= = X-Cache: Miss from cloudfront
Date: Thu, 05 Mar 2015 02:19:39 GMT
= = X-Cache: Miss from cloudfront
Date: Thu, 05 Mar 2015 02:19:44 GMT
= = X-Cache: Miss from cloudfront
Date: Thu, 05 Mar 2015 02:19:50 GMT
= = X-Cache: Miss from cloudfront
Date: Thu, 05 Mar 2015 02:19:50 GMT
= = X-Cache: Hit from cloudfront
Date: Thu, 05 Mar 2015 02:19:50 GMT
= = X-Cache: Hit from cloudfront
Date: Thu, 05 Mar 2015 02:19:50 GMT
= = X-Cache: Hit from cloudfront
Lý do tại sao có nhiều mục có cùng dữ liệu chính xác Hit from cloudfront
ở gần cuối là vì đó là những gì xảy ra trên CDN: Nếu điểm cuối của CDN có tệp, thì Date
tương quan với ngày tạo / sửa đổi thực tế của tệp đó điểm cuối có.
Bạn nhận thấy bốn lần truy cập đầu tiên cách nhau vài giây, với ngày / giờ khác nhau và tất cả chúng đều Miss from cloudfront
đúng, phải không? Điều đó có nghĩa là điểm cuối CDN chỉ lặp lại rằng có một nỗ lực truy cập tệp đó vào thời điểm đó và tất cả các lần thử đều bị bỏ lỡ.
Vì vậy, đánh giá ghế bành của tôi về điều này là các hệ thống của Tumblr không theo kịp CDN của Amazon CloudFront hoặc CDN của Amazon CloudFront không theo kịp Tumblr. Nhưng theo một cách nào đó, mọi thứ đều không ổn ở phía máy chủ của họ. Và vì đây là CDN, nên ai đó truy cập vào các tệp ở một vị trí có thể không nhận thấy sự cố trong khi một người khác ở vị trí khác sẽ gặp sự cố khi xem hình ảnh.
Đó là tất cả để nói, tôi không nghĩ rằng điều này có thể dễ dàng được làm sáng tỏ về phía khách hàng.
EDIT: Vì vậy, người đăng ban đầu đã thêm một số URL mới và điều này vẫn chỉ ra vấn đề phía máy chủ, nhưng tôi chỉ muốn đăng chi tiết cho bản ghi.
Ý tưởng CDN của EdgeCast & Highwinds
Vì vậy, áp phích gốc đã thêm chi tiết cụ thể hơn, vì vậy đây là chi tiết hơn dựa trên bài đăng trên blog đang được sử dụng làm ví dụ:
http://claystorks.tumblr.com/post/112741831192/soulmister-claystorks-windspeare-explain
Và các URL hình ảnh này được cung cấp dưới dạng ví dụ về các URL trong bài đăng đó:
https://gs1.wac.edgecastcdn.net/8019B6/data.tumblr.com/76493f424ebb3b62d6de43e53643180a/tumblr_nkps82DdCh1sjn35qo1_500.png
https://gs1.wac.edgecastcdn.net/8019B6/data.tumblr.com/76493f424ebb3b62d6de43e53643180a/tumblr_nkps82DdCh1sjn35qo1_1280.png
Và hai URL hình ảnh đó thực sự thất bại. Nhưng từ phía tôi, tôi nhìn vào mã soure gốc của bài đăng trên blog từ Brooklyn, New York, Hoa Kỳ. Tôi không thấy các URL EdgeCast ( gs1.wac.edgecastcdn.net
) đó. Thay vào đó, đây là các URL tôi đang thấy:
http://41.media.tumblr.com/76493f424ebb3b62d6de43e53643180a/tumblr_nkps82DdCh1sjn35qo1_500.png
http://41.media.tumblr.com/76493f424ebb3b62d6de43e53643180a/tumblr_nkps82DdCh1sjn35qo1_1280.png
Vì vậy, suy nghĩ đầu tiên của tôi là tại sao người đăng ban đầu nhìn thấy những EdgeCast ( gs1.wac.edgecastcdn.net
) đó. Nhưng sau đó nếu tôi thực hiện theo dõi đến thì 41.media.tumblr.com
tôi thấy đó là một máy chủ được quản lý bởi Highwinds (!?!?). Ngược lại, các URL ban đầu được chuyển bởi người dùng ban đầu đang sử dụng 36.media.tumblr.com
tên máy chủ và bạn có thể thấy chúng được quản lý bởi các máy chủ CDN của Amazon CloudFront.
Đó là tất cả những gì để nói, mà tôi đã nói trước đó, tất cả những điều này dường như là vấn đề của máy chủ với Tumblr và quản lý CDN của họ. Nhưng từ phía tôi, ở Brooklyn, New York, Hoa Kỳ, tôi thấy rõ nội dung được phân phối như mong đợi từ các máy chủ CDN của Highwinds cũng như các máy chủ CDN của Amazon CloudFront. Các URL EdgeCast này đến từ đâu hoặc tại sao / tại sao chúng không thành công nằm ngoài tầm kiểm soát của bất kỳ ai ở phía máy khách. Đây chắc chắn sẽ là điều cần liên hệ với nhân viên công nghệ Tumblr vì không có cách nào người dùng cuối máy tính để bàn có thể giải quyết vấn đề này.
Ý tưởng hình ảnh Leeching
Có thể không liên quan nữa, nhưng ở đây để tham khảo.
Bạn nói điều này cho tôi một manh mối:
Sử dụng wget
trên các liên kết trực tiếp của hình ảnh hoạt động.
Nhiều trang web có các quy tắc tại vị trí thường được thiết lập thông qua Apache mà ngăn chặn việc lấy hình ảnh. Chi tiết hơn về cách thức các quy tắc này được cung cấp ở đây và được tóm tắt như sau:
Ví dụ, sử dụng .htaccess, bạn có thể không cho phép liên kết nóng trên máy chủ của mình, do đó, những người cố liên kết đến một hình ảnh hoặc tệp CSS trên trang web của bạn, chẳng hạn, bị chặn (yêu cầu không thành công, chẳng hạn như hình ảnh bị hỏng) hoặc được cung cấp một nội dung khác ( tức là: một hình ảnh của một người đàn ông tức giận).
Dựa trên mô tả của bạn, và thực tế là bạn có thể truy cập các hình ảnh qua thông wget
tin của tôi để tin rằng những hình ảnh bạn gặp sự cố không được lưu trữ trên Tumblr bởi người dùng, mà là những hình ảnh được đặt trên blog Tumblr nhưng thực sự được lưu trữ trên một trang khác Địa điểm.
Khi các quy trình xử lý hình ảnh tiêu chuẩn được đưa ra, việc xem một hình ảnh được nhúng trên một trang web được lưu trữ trên một trang web khác, đó là việc chặn leeching sẽ dẫn đến một liên kết hình ảnh bị hỏng hoặc có thể là một Stop Stop Leeching! hình ảnh được trả lại. Điều này là do các quy tắc chống đỉa cơ bản, chẳng hạn như các quy tắc trong trang ví dụ đó, giới thiệu hình ảnh kiểm tra chéo để đảm bảo trang yêu cầu hình ảnh khớp với tên miền lưu trữ hình ảnh.
Vì vậy, khi bạn đang truy cập hình ảnh thông qua wget
bạn đang truy cập hình ảnh trực tiếp. Vì vậy, các quy tắc leeching hình ảnh sẽ không khởi động. Vì vậy, bạn có thể có được hình ảnh thông qua wget
nhưng không phải khi nó được nhúng vào một trang khác.