Поведение nginx как прокси

Поведение nginx как прокси

Я тестирую nginx с разными конфигурациями, чтобы заменить архитектуру, работающую с squid + apache. Я знаю, что могу использовать nginx для управления статическими запросами и балансировки нагрузки, но меня интересует одно конкретное решение, которое я не совсем понимаю:

Я использую 2 сервера nginx (сбалансированных) с настройкой proxy_pass для передачи всех запросов на сервер Apache. Когда один клиент делает запрос на сайт, один из серверов nginx обрабатывает его и отправляет на сервер Apache. Теперь, как такое поведение может улучшить мою систему? Кажется, что все запросы проходят через Apache, и я не вижу никакой выгоды. Что произойдет, когда 100 одновременных подключений пройдут через nginx? 100 подключений будут идти на сервер Apache или это какое-то внутреннее поведение, которое допускает небольшое влияние на Apache?

решение1

Nginx может помочь вашему Apache, когда у вас много медленных подключений к вашим сайтам. Например, архитектура конечного автомата nginx не уязвима для Slowloris DDoShttp://isc.sans.org/diary.html?storyid=6601.

решение2

Я знаю, что nginx может выполнять множество функций, но почему бы не делегировать каждую часть архитектуры программному обеспечению, которое делает одну часть действительно хорошо? Рассмотрите некоторые или все из этих частей: pound или haproxy для балансировки нагрузки, Varnish или squid для обратного кэширующего прокси и наличие nginx и apache на бэкэнде для статического и динамического контента (соответственно).

Тем не менее, я не совсем уверен, в чем ваш вопрос. Вы сказали nginx передавать все запросы (я предполагаю, что под «передавать» вы подразумеваете не кэширование) на бэкенд Apache. Без кэширования преимуществом было бы распределение нагрузки между несколькими серверами Apache на бэкенде. Если у вас только один бэкенд Apache, то вы получите преимущество только за счет кэширования контента, а не просто прямой передачи запросов.

Было бы полезно получить более подробную информацию о вашей настройке и о том, что вы хотите сделать.

решение3

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

  расположение / {
    proxy_pass http://backendwww;
  }
  местоположение ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico|html|swf|flv|mp3|m4v)$ {
    access_log выключен;
    истекает 30 дн.;
    корень /var/www/application_webroot;
    error_page 404 = @fallback;
  }
  местоположение @fallback {
    proxy_pass http://backendwww;
  }
  расположение ~ /\.ht {
    отрицать все;
  }

решение4

Согласен с Zero*, пусть Enginx обрабатывает всю статику, однако более простая конфигурация — просто передавать PHP на бэкэнд, а не указывать, что не следует передавать в Apache/PHP, например:

location ~ .(php|phtml?)$ { proxy_pass http://backendwww; }

Связанный контент