Nginx Varnish Nginx Django?


13

Tôi có một ứng dụng django và tôi muốn thiết lập Varnish trên một máy chủ phía trước nó. Trong một chủ đề khác của serverfault, có người đề nghị đặt Nginx trước Varnish.

Tôi có nên đặt Nginx trước Varnish trên máy chủ bộ đệm không? Nếu vậy, tôi có nên sử dụng Nginx trên máy chủ ứng dụng không?

Câu trả lời:


10

Chúng ta đang nói tổng cộng 1 - 3 máy chủ lối vào, không phải là một trang trại máy chủ lớn với cân bằng tải giữa các tầng?

Đặt nginx trước Vanish cho phép bạn thực hiện nén HTTP nhanh chóng. Đó là một thực hành tốt nhất hiệu suất, nhưng nó có thể được phân phối. (Nội dung trong Varnish thường không được nén, do đó ESI Bao gồm công việc và do đó bạn không phải xử lý nhiều phiên bản được lưu trong bộ nhớ cache của cùng một đối tượng tùy thuộc vào kết hợp trình duyệt / tiêu đề của Vary.)

Về nginx trên máy chủ ứng dụng - có phải Apache với mod_wsgi không phải là cách được đề xuất và phổ biến nhất để triển khai cài đặt Django mới hiện nay? Tôi không biết lý do thuyết phục cho việc sử dụng nginx / fastcgi trên Apache / mod_wsgi cho Django; nhưng bạn nên nhận lời khuyên từ một chuyên gia Django.

Về việc Varnish có các tính năng cân bằng tải hấp dẫn mà nginx không có, tôi không thấy chúng là gì? Varnish có sự cân bằng ngẫu nhiên và vòng tròn. nginx có vòng tròn, IP khách hàng và băm nhất quán - Tôi không thấy lợi ích đáng kể cho Varnish? Đây có phải là tải lại cấu hình duyên dáng của VCL hoặc Varnish hay cái gì khác không?

Đối với một thiết lập máy chủ 1-3 nhỏ, tôi đoán tôi sẽ làm

Véc ni -> Apache / mod_wsgi / Django

hoặc có thể

Mực -> Apache / mod_wsgi / Django

và bỏ qua việc nén HTTP để đơn giản, trừ khi bandwith đắt tiền.

Cập nhật:

Graham Dumpleton đã viết một bình luận có giá trị dưới đây. Anh ta đề cập đến một thiết lập rất phổ biến, ví dụ như một blog trên VPS hoặc một trang trại nhỏ mà không cần lưu trữ:

nginx -> Apache / mod_wsgi / Django

Đây là một giải pháp rất tốt, vì một vài lý do:

  1. Thiết lập đơn giản
  2. nginx, có tốc độ cao và chi phí tối thiểu, xử lý việc phục vụ tệp tĩnh và giữ kết nối trình duyệt.
  3. Django chạy trong mod_wsgi tuyệt vời của Graham Dumpleton, nền tảng được đề xuất cho Django.

Lý do ban đầu tôi không đề cập đến điều này là vì OP dường như yêu cầu Varnish, một giải pháp bộ nhớ đệm hiệu năng rất cao. Combo nginx / Apache / mod_wsgi không thể thực hiện lưu trữ bộ đệm với mức hiệu suất và tính linh hoạt phù hợp với Varnish.


2
Bạn thậm chí có thể sử dụng 'nginx -> Apache / mod_wsgi / Django' như nhiều người làm vì nhiều lý do tốt.
Graham Dumpleton

4
Một điều khác mà nginx cung cấp trong trường hợp sử dụng mà nhiều người không nhận ra là nginx cô lập Apache khỏi các máy khách chậm. Điều này là do nội dung yêu cầu có kích thước nhất định không được truyền bởi nginx. Thay vào đó, nó sẽ đệm lên các tiêu đề và nội dung yêu cầu và chỉ yêu cầu proxy khi có tất cả. Điều này có nghĩa là nó chỉ trao nó cho Apache khi tất cả thông tin cần thiết để xử lý yêu cầu có sẵn. Do đó, Apache / mod_wsgi sẽ bận rộn ít nhất có thể và các quy trình / luồng không bị ràng buộc bởi máy khách chậm. Một biện pháp đệm cũng xảy ra theo chiều ngược lại để Apache cũng có thể hoàn thành nhanh hơn.
Graham Dumpleton

2
@Graham Dumpleton: Rất vui khi có bạn ở đây, tôi hy vọng bạn sẽ ở lại đây. :-). Về xử lý kết nối thông minh / kết nối thông minh nginx HTTP, tôi hoàn toàn đồng ý.
Jesper M

Trước hết, cảm ơn Jesper và Graham đã dành thời gian để viết một phản hồi toàn diện như vậy. Tôi đang lên kế hoạch đặt một máy chủ cân bằng tải trước hai máy chủ ứng dụng. Một máy chủ sẽ xử lý hầu hết lưu lượng với cái thứ hai được sử dụng chủ yếu cho lỗi không qua và thử nghiệm các tính năng mới.
Enrico

Varnish hấp dẫn bởi vì nó cho tôi toàn quyền kiểm soát những yêu cầu nào được gửi đến phụ trợ nào. Varnish cũng kiểm tra sức khỏe các máy chủ phụ trợ, chuyển đổi dự phòng rất đơn giản và nó xử lý các phụ trợ chậm / chết một cách duyên dáng (nếu cả hai máy chủ đều chết).
Enrico

4

Bạn có thể sử dụng nginx mà không cần véc ni để proxy và lưu trữ nội dung.


2
véc ni có một số tính năng cân bằng tải hấp dẫn mà nginx không có trong hộp
Enrico

4
những tính năng nào chẳng hạn?
im lặng

4

Tôi đã sử dụng Nginx, Varnish và Apache / mod_wsgi / Django thành công. Tôi bắt đầu với cấu hình sau:

Nginx -> Apache / mod_wsgi / Django

Khi tôi bắt đầu thấy tải đáng kể trên Apache, tôi đã thêm Varnish:

Nginx -> Véc ni -> Apache / mod_wsgi / Django

Tôi sử dụng Nginx như một loại "bộ định tuyến URL". Yêu cầu quản trị Django được gửi trực tiếp từ Nginx đến Apache. Các yêu cầu của máy khách được gửi từ Nginx đến Varnish, lưu trữ các yêu cầu từ Apache và cũng phục vụ các mục "được tô điểm" từ bộ đệm nếu máy chủ ứng dụng không khả dụng.

Máy chủ Nginx của tôi cũng phục vụ trực tiếp một số nội dung tĩnh (ví dụ: hình ảnh, CSS và tệp javascript).

Nói chung, hiệu suất đã được xuất sắc. Tôi đã nhận thấy một vài cảnh báo mà tôi nên đề cập:

  1. Trên một trang web bận rộn, việc khởi động lại Varnish có thể khiến tải tăng đột biến trên các máy chủ ứng dụng, vì vậy tốt nhất là giữ Varnish khởi động lại ở mức tối thiểu. (Varnish dường như không có "tải lại" như Nginx / Apache khi nó chỉ đọc lại các tệp VCL của nó). Ngược lại, tải lại cấu hình Nginx có tác động tối thiểu. Vì lý do này, tôi thực hiện hầu hết việc viết lại URL và "định tuyến" trong Nginx.
  2. Varnish rất dễ rơi vào giữa Nginx và Apache. Nếu bạn bắt đầu nhận thấy tải cao trên các máy chủ ứng dụng của mình, việc thêm véc ni với ngay cả cấu hình mặc định thực sự có thể tạo ra sự khác biệt.
  3. Nếu bạn sử dụng Varnish, bạn chắc chắn cần phải suy nghĩ về cách bạn sẽ xử lý việc vô hiệu hóa bộ đệm.
  4. Kinh nghiệm của tôi là Varnish xử lý các phụ trợ thất bại một cách duyên dáng hơn một chút so với Nginx (như bạn đã chỉ ra trước đó).

Tôi chưa bao giờ thấy véc ni đằng sau một cái gì đó khác. Varnish thường là bộ cân bằng tải thực hiện bộ định tuyến url. Vậy bạn đã có 2 máy chủ web và 1 proxy hoặc 2 proxy và 1 máy chủ web? Q
ioanb7

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.