Лак -> Nginx -> Apache хорошая идея?

10

Я думаю об архитектуре нового веб-сервера. Будет ли хорошей идеей иметь Varnish в качестве кэша перед Nginx в качестве обратного прокси-сервера и предоставлять статические файлы перед Apache для всех тяжелых задач?

Я собираюсь запустить php и ruby ​​в приложениях rails.

Будет ли слишком много накладных расходов на передачу php-запросов в apache через два других процесса?

Большое спасибо!

Зоран Зарик
источник

Ответы:

8

Да, это действительно. Мой личный подход заключается в том, чтобы использовать Varnish заранее и использовать VCL для разделения трафика между статическими запросами NGINX и вашими тяжелыми нагрузками (будь то Apache или Passenger или ... это не имеет значения). Это особенно верно, если он находится на той же машине, где вам не нужны дополнительные издержки. Это не обязательно купить вам что-нибудь.

McJeff
источник
да, это довольно хорошая идея, так как лак должен быть достаточно быстрым для этого
Зоран Зарик
6

Varnish (пока) не поддерживает сжатие gzip, так что, возможно, стоит поменять его местами с nginx, чтобы сжать то, что лак отправляет обратно. Поскольку лак и nginx не борются за одни и те же ресурсы (nginx использует ЦП для сжатия gzip, а лак использует память), они должны работать без перебоев на одной машине.

Varnish теперь поддерживает сжатие gzip , поэтому, если вам не требуется SSL-завершение (как это предлагается в комментариях), я бы посоветовал помещать лак непосредственно в контакт с Интернетом.

Для http:

(интернет) -> (лак, gzip, кеширование, esi) -> (приложение)

Для https:

(интернет) -> (nginx, ssl) -> (лак, gzip, кеширование, esi) -> (приложение)

Если вы хотите, чтобы там тоже был apache (для повсеместной поддержки mod_foobar), я бы поставил его между лаком и приложением

Обновление: Обновлено, чтобы включить поддержку gzip в лаке 3.0. Добавлен ssl / esi как предложено в комментариях

mogsie
источник
Если что-либо, обслуживающее контент для лака, кодирует его в gzip, то лак передает его в gzip без жалоб: varnish-cache.org/wiki/FAQ/Compression Единственное, что не делает лак, это берет несжатый контент из некэшированного приложение и зарезервировать его сжатым. Это ваше понимание?
ewalk
Единственный раз, когда вы запускаете nginx перед лаком, это когда вы используете ESI. Поскольку вы не можете выполнить сборку ESI из сжатых страниц, и Varnish не будет сжимать собранную страницу, Nginx располагается перед Varnish, чтобы обеспечить это сжатие. Если источник обслуживает сжатый контент, Varnish передает эти данные клиенту в сжатом виде.
user6738237482
Да, ESI - одна из причин, по которой я бы порекомендовал эту конфигурацию, но я думаю, что если ваш бэкэнд сжимается и вы не используете ESI, вы можете обойтись без nginx, так как я считаю, что лак может обрабатывать довольно много трафика без разбить пот.
mogsie
@ user6738237482, nginx suport SSL Termination, Varnish - нет. На самом деле, перед чем-то вроде лака или Apache это именно то, для чего изначально был разработан nginx, как быстрый и легкий прокси-сервер.
rmalayter
4

Сумма накладных расходов не должна быть значительной. Я предполагаю, что одна из причин, по которой вы хотите использовать эти два уровня, - это масштабируемость; в этом случае вы, скорее всего, увидите, по сравнению с apache, что лак и nginx работают не очень усердно.

Если вы используете все три уровня на одном компьютере, это не должно повлиять на производительность, прежде чем вы достигнете емкости самого сервера.

Как альтернатива, почему бы не лак + nginx с пассажиром? Я использовал эту настройку в прошлом, а использование nginx для пассажиров относительно легкое и работало довольно хорошо. Возможно, стоит подумать, если вы не состоите в браке с Apache, управляющим вашим стеком рельсов.

Тони
источник
да, я могу переключиться с apache на nginx для рельсов, но предоставление клиентам возможности использовать файлы .htaccess + для apache, по крайней мере для php.
Зоран Зарик
2

Я администратор системы для платформы электронной коммерции запуска. Мы используем varnish + nginx перед нашим стеком PHP / apache, и он творил чудеса.

У нас есть приложение с высоким использованием памяти, и оно использовало около 15-20 гигабайт оперативной памяти на каждый веб-узел, и как только мы добавили лак вперед, теперь оно составляет около 8 гигабайт оперативной памяти на узел. Они никогда не пили.

Поэтому я очень рекомендую это.

Майк
источник
3
Вы знаете, лак не говорит SSL правильно?
Майк
1

Я использую Drupal с модулем boost на сервере Apache + PHP + MySQL, но перед ними я использую Nginx с включенной функцией gzip-static и использую результаты boost для обслуживания пользователей.

И в довершение ко всему, я использую лак, все на одном компьютере, у меня хорошие результаты.

Я также использую Nginx для настройки заголовков, которые Drupal не очень хорошо подходит для кеша.

Go2linux
источник
0

Это плохая идея, если вам не нужно что-то вроде ESI. У Nginx есть своя собственная система кеширования, которая работает лучше .

VBart
источник
Я знаю, что это старый ответ, но, к сожалению, эта ссылка больше не доступна, поэтому я не могу подтвердить вашу заявку. По моему опыту, Varnish трудно превзойти по скорости и гибкости в качестве обратного прокси-сервера.
Мартейн Химельс
@MartijnHeemels web.archive.org/web/20130501222206/http://todsul.com/… и есть еще один тест: nbonvin.wordpress.com/2011/03/24/…
VBart
-1

Apache можно использовать для прекращения (дешифрования) SSL, проверьте http://noosfero.org/Development/Varnish#SSL

brauliobo
источник
1
Пожалуйста, избегайте публикации ссылок в качестве ответов, так как ваш ответ может потерять всякий смысл, когда на него влияет linkrot . Пожалуйста, рассмотрите возможность редактирования своего ответа и включения соответствующих частей по ссылке, которую вы указали в своем ответе. Обязательно оставляйте ссылку на месте в качестве ссылки.
Брайан