Назад | Перейти на главную страницу

Можете ли вы положиться на Nginx как на ваш единственный веб-сервер для php / mysql?

Можете ли вы рассчитывать на то, что Nginx станет вашим единственным веб-сервером? Я знаю, что с точки зрения производительности он работает хорошо, но как он работает с точки зрения безопасности. Я знаю, что Apache стабилен и имеет ModSecurity. Это не относится к Nginx.

Я собираюсь использовать Nginx только как веб-сервер и только для динамического контента. Весь мой статический контент доставляется через CDN.

nginx запускает динамический контент путем «обратного проксирования» на сервер fastcgi. Пакет php-cgi в большинстве дистрибутивов включает режим fast-cgi, в котором php запускает небольшой сервер fcgi, к которому вы также можете подключить nginx.

Такое разделение позволяет делать умные вещи:

  1. Большинство динамических языков (php, perl, ruby, python) позволяют запускать приложения fcgi.
  2. Вы можете запускать динамический контент как разные учетные записи. Или даже под chroot-путями. На VPS, которым я управляю для нескольких друзей, у каждого пользователя есть свой собственный сервер FCGI с собственными учетными записями. Если их программное обеспечение компрометировано, злоумышленник сможет добраться только до этой учетной записи.
  3. Он предлагает простой способ горизонтального масштабирования для большинства приложений. nginx на любом сервере, вероятно, может обрабатывать больше статической нагрузки, чем динамической. Вы можете добавить несколько хостов в раздел восходящего потока на nginx и просто продолжать добавлять бэкенды по мере необходимости (однако масштабирование вашей базы данных + файловой системы остается на ваше усмотрение)
  4. Использование нескольких портов с разделом восходящего потока с одним хостом позволяет перезапустить приложение wep без простоя: (1) Запустить php-fcgi на другом порту (2) остановить php-fcgi на исходном порте. nginx автоматически перенаправит запросы с одного порта на другой
  5. Лучшее использование памяти. С Apache / Mod_Security / Mod_php каждый процесс apache имеет все эти модули, загруженные в память. Хотя существует некоторая память для копирования при записи, совместно используемая между процессами, как только каждый процесс изменяет страницу, эта страница памяти копируется. Разделяя эти задачи, nginx может использовать довольно крошечный объем памяти, вы можете настроить выделенный брандмауэр веб-приложения (устройство ips / ids, выделенный обратный прокси-сервер), и вы можете управлять политикой памяти в своем приложении php, и все это отдельно.

Обновлено: в комментариях ниже есть несколько ссылок:

fastcgi_pass param - Вот как вы указываете nginx передавать запрос на сервер fastcgi. FastCGI работает, передавая переменные (которые намеренно выглядят как переменные среды CGI), но позволяет передавать любые произвольные данные из внешнего интерфейса в серверную часть. В дистрибутиве debian (а также в дистрибутиве исходного кода iirc) есть файл fastcgi.conf, который включает в себя все параметры по умолчанию, которые необходимы большинству инструментальных средств, чтобы начать работу.

Модуль Upstream - Модуль Upstream позволяет вам определять несколько восходящих серверов, которые могут быть другими веб-серверами, серверами fastcgi или чем-либо еще. Модуль fastcgi_pass включает короткий пример, в котором используется восходящий поток. Обратите внимание, что в системе с одним хостом вы даже можете использовать сокеты домена unix и не нести накладных расходов TCP / IP!

Пример PHPFCGI - Здесь представлен полный образец конфигурации. Я лично являюсь поклонником daemontools (или runit, если вы не поклонник djb) и написал очень простые оболочки для запуска php-fcgi под контролем процесса (который перезапустится, если он ненормально завершится), но сценарий, представленный на этой странице это сценарий в стиле SysV, который вы можете поместить в /etc/init.d/ и добавить соответствующие ссылки в /etc/rcX.d/. В сценарии на этой странице есть несколько переменных, которые вы можете настроить, чтобы настроить среду, в которой работает ваше приложение fcgi.

Виртуальный хостинг упрощен с помощью разделов «сервер»:

server { 
     server_name www.host.com host.com other_aliases;
     ... 
}
server { 
     server_name www.host2.com host2.com other_aliases;
     ...
}

Видеть Раздел на server_name для получения дополнительных сведений остальная часть этой страницы содержит много информации о том, как можно настроить модуль corehttp.

Что касается безопасности, Игорь (ведущий разработчик) серьезно относится к безопасности и часто участвует в их очень активном списке рассылки. Вот список признанные проблемы безопасности , а вот список их архив списка рассылки

Я запускаю nginx с php-fcgi на высоконагруженном сервере, он работает потрясающе.

Безопасность - это то, что вы создаете сами. Всегда. Пожалуйста, не ошибитесь, полагаясь на какое-то программное обеспечение, которое волшебным образом защитит вас, когда дело доходит до реальных проблем. Не будет. Хорошее кодирование и администрирование.

У меня создалось впечатление, что Nginx может обслуживать только статический контент? Это делает php «невыполнимой миссией»