Varnish -> Nginx -> Apache một ý tưởng tốt?


10

Tôi đang suy nghĩ về kiến ​​trúc cho một Máy chủ web mới. Có phải Varnish là một bộ đệm trước Nginx như một proxy ngược và phục vụ các tệp tĩnh trước apache cho tất cả các công việc nặng nhọc là một ý tưởng tốt?

Tôi sẽ chạy php và ruby ​​trên các ứng dụng rails.

Sẽ có quá nhiều chi phí chuyển qua yêu cầu php để apache thông qua hai quá trình khác?

Cảm ơn rất nhiều!

Câu trả lời:


8

Vâng, nó hợp lệ. Cách tiếp cận cá nhân của tôi sẽ là sử dụng Varnish lên phía trước và sử dụng VCL để phân chia lưu lượng giữa các yêu cầu NGINX tĩnh và nâng vật nặng của bạn (cho dù đó là Apache hay Hành khách hay ... không thành vấn đề). Điều này đặc biệt đúng nếu nó nằm trên cùng một máy vì bạn không cần thêm chi phí. Nó không nhất thiết phải mua cho bạn bất cứ thứ gì.


vâng, đây là một ý tưởng khá hay, vì vecni sẽ khá nhanh cho việc này
Zoran Zaric

6

Varnish không (chưa) hỗ trợ nén gzip, vì vậy có thể nên đổi nó xung quanh với nginx ở phía trước để nén những gì vecni gửi lại. Vì véc ni và nginx không đấu tranh cho cùng một tài nguyên (nginx sử dụng CPU để nén gzip, trong khi véc ni sử dụng bộ nhớ) nên chúng sẽ chạy trơn tru trên cùng một máy.

Varnish hiện hỗ trợ nén gzip , vì vậy trừ khi bạn cần chấm dứt SSL (như được đề xuất trong các bình luận), tôi sẽ đề nghị đưa vecni tiếp xúc trực tiếp với Internet.

Dành cho http:

(internet) -> (véc ni, gzip, bộ nhớ đệm, esi) -> (ứng dụng)

Dành cho https:

(internet) -> (nginx, ssl) -> (véc ni, gzip, bộ nhớ đệm, esi) -> (ứng dụng)

Nếu bạn cũng muốn có apache (đối với hỗ trợ mod_foobar phổ biến), tôi sẽ đặt nó giữa vecni và ứng dụng

Cập nhật: Đã cập nhật để bao gồm hỗ trợ gzip trong véc ni 3.0. Đã thêm ssl / esi theo đề xuất trong bình luận


Nếu bất cứ điều gì đang phục vụ nội dung cho vecni mã hóa nó trong gzip, thì vecni sẽ chuyển nó trên gzipped mà không phàn nàn: var Vec-cache.org/wiki/FAQ/Compression Điều duy nhất vecni không làm là lấy nội dung không được nén từ phần chưa được nén ứng dụng và dự trữ nó nén. Đây có phải là sự hiểu biết của bạn là tốt?
ewalk

Lần duy nhất bạn chạy nginx trước vecni là khi bạn đang sử dụng ESI. Vì bạn không thể thực hiện lắp ráp ESI từ các trang nén và Varnish sẽ không nén một trang đã lắp ráp, Nginx được đặt trước Varnish để cung cấp nén đó. Nếu nguồn gốc phục vụ nội dung được nén, Varnish sẽ truyền dữ liệu đó cho máy khách ở dạng nén.
dùng6738237482

Vâng, ESI là một trong những lý do tại sao tôi khuyên dùng cấu hình này, nhưng tôi đoán rằng nếu phần phụ trợ của bạn nén và bạn không sử dụng ESI, bạn có thể phân phối với nginx, vì tôi tin rằng vecni có thể xử lý khá nhiều lưu lượng mà không cần đổ mồ hôi.
mogsie

@ user6738237482, nginx suport chấm dứt SSL, Varnish thì không. Trên thực tế, đứng trước một thứ gì đó như véc ni hoặc Apache chính xác là thứ mà nginx ban đầu được thiết kế cho, như một máy chủ proxy nhanh, nhẹ.
rmalayter

4

Số lượng chi phí không đáng kể. Tôi giả sử một phần lý do bạn muốn có hai tầng này là vì khả năng mở rộng; trong trường hợp mà bạn rất có thể sẽ thấy, liên quan đến apache, vecni và nginx đó không hoạt động rất chăm chỉ.

Nếu bạn cả ba tầng trên một máy, sẽ có ít tác động hiệu suất hơn trước khi bạn đạt được công suất của chính máy chủ đó.

Thay thế, tại sao không véc ni + nginx với hành khách? Tôi đã sử dụng thiết lập này trong quá khứ và nginx sử dụng hành khách tương đối nhẹ và chạy khá tốt. Có thể đáng suy nghĩ về việc nếu bạn không kết hôn với apache chạy đường ray của bạn.


vâng tôi có thể chuyển từ apache sang nginx cho rails, nhưng cung cấp cho khách hàng khả năng sử dụng các tập tin .htaccess là + cho apache, ít nhất là cho php.
Zoran Zaric

2

Tôi là quản trị viên hệ thống cho một nền tảng thương mại điện tử khởi nghiệp. Chúng tôi sử dụng véc ni + nginx trước ngăn xếp PHP / apache của chúng tôi và nó đã làm việc kỳ diệu.

Chúng tôi có một ứng dụng sử dụng bộ nhớ cao và ứng dụng đã sử dụng khoảng 15-20gigs RAM cho mỗi webnode và một khi chúng tôi đặt véc ni ở phía trước thì bây giờ là khoảng 8gig RAM cho mỗi nút. Họ chưa bao giờ tăng vọt.

Vì vậy, tôi đánh giá cao nó.


3
Bạn biết véc ni không nói chuyện ssl phải không?
Mike

1

Tôi đang chạy Drupal, với mô-đun boost trên máy chủ Apache + PHP + MySQL, nhưng trước mặt họ tôi đang sử dụng Nginx với tính năng gzip-static và sử dụng kết quả tăng cường để phục vụ người dùng.

Và trên hết, tôi đang sử dụng vecni, tất cả trên cùng một PC, tôi đang có kết quả tốt.

Tôi cũng đang sử dụng Nginx để điều chỉnh các tiêu đề mà Drupal không làm tốt cho bộ đệm.


0

Đó không phải là một ý tưởng tốt trừ khi bạn cần một cái gì đó như ESI. Nginx có hệ thống bộ nhớ đệm riêng hoạt động tốt hơn .


Tôi biết đây là một câu trả lời cũ, nhưng tiếc là liên kết đó không còn nữa, vì vậy tôi không thể xác minh khiếu nại của bạn. Theo kinh nghiệm của tôi, Varnish khó có thể đánh bại tốc độ và tính linh hoạt của nó như một proxy ngược.
Martijn Heemels


-1

Apache có thể được sử dụng để chấm dứt SSL (giải mã), kiểm tra http://noosfero.org/Development/Varnish#SSL


1
Vui lòng tránh đăng liên kết dưới dạng câu trả lời, vì câu trả lời của bạn có khả năng mất hết ý nghĩa khi bị ảnh hưởng bởi linkrot . Vui lòng xem xét chỉnh sửa câu trả lời của bạn và bao gồm các phần có liên quan từ liên kết bạn đã cung cấp trong câu trả lời của mình. Bằng mọi cách hãy để liên kết tại chỗ làm tài liệu tham khảo.
Bryan
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.