Недавно я исследовал различия между Apache и Nginx и не понимаю, что мне выбрать.
Я провел некоторый поиск, но окончательного сравнения между ними нет, и мне было интересно, может ли кто-нибудь здесь высказать свое мнение о различиях между ними.
Мои текущие знания позволяют мне понять, что mod_php быстрее и безопаснее, чем fastcgi, однако Apache намного хуже, когда дело доходит до одновременных подключений и потребления памяти.
Мой сайт использует много длинных опросов, но имеет веб-базу, отличную от AJAX (то есть Apache с длинным опросом поверх).
Мое первоначальное решение проблем с памятью Apache состояло в том, чтобы отправить длинный опрос через node.js, а затем получить node.js для доступа к Apache каждые 2 секунды, и в этом случае Apache не будет иметь открытого соединения, а будет node.js. Я пришел к выводу, что этого может быть недостаточно, и ищу разные решения. Мне все еще интересно, сработала бы моя первоначальная идея.
Итак, что лучше для современного Интернета? Apache или Nginx?
Обновление: все предложения были хорошими и действительными. Я придерживался первоначальной второй идеи - использовать полноценный сервер Nginx. Я удовлетворен тем, что будучи выделенным сервером, я не мог столкнуться с проблемами безопасности из-за fastcgi, и, поскольку мои длинные сценарии опроса должны быть написаны на PHP, мне нужен сервер, который может обрабатывать одновременные соединения с высокой нагрузкой, а Apache просто не может этого сделать, независимо от того, сколько Я меняю структуру, но память все равно будет голодной.
Я отметил ответ Мартина Ф, так как он дал такой четкий и полный ответ на мои вопросы, что я чувствую, что он заслуживает этой оценки, однако все три ответа были хорошими и действительными, и наиболее точно будет рассмотрено использование обратного прокси для другого сайта, которым я владею. так как я только что нашел кое-что очень, очень интересное, что Nginx может делать при проксировании.
Спасибо,
Похоже, у вас есть несколько заблуждений, которые, как мне кажется, необходимо исправить.
Во-первых, mod_php лишь ненамного быстрее, все мои тесты показали, что разница настолько мала, что ее не стоит учитывать. Я также сомневаюсь, что аспект безопасности важен для вас, поскольку вы, похоже, смотрите на выделенный сервер и mod_php действительно имеет преимущество только в общей среде - на самом деле, в выделенной среде php-fpm будет иметь преимущество, поскольку PHP и ваш веб-сервер теперь работают как разные процессы, и это даже без учета потрясающих параметров ведения журнала в php- fpm, например, медленный журнал.
Если бы мир был черно-белым, я бы сказал, что нужно использовать чистую настройку nginx и скомпилировать php с помощью php-fpm. Более реалистично, если у вас уже работает Apache, сделайте nginx обратным прокси-сервером для apache, и вы можете сэкономить несколько часов времени установки, и разница в производительности будет крошечной.
Но давайте на секунду предположим, что мир черно-белый, потому что это дает гораздо более потрясающие настройки. Вы делаете nginx + php-fpm для своего веб-сервера. Чтобы решить проблемы с загрузкой, вы используете модуль загрузки и модуль загрузки для nginx. Это означает, что ваш веб-сервер принимает загрузку и передает путь к файлу в PHP, когда это будет сделано, так что файл не нужно передавать между nginx и PHP через протокол fastcgi, сладко. (У меня это в живой установке, и он отлично работает, кстати!)
Для загрузки пользователем вы используете функцию nginxs, похожую на x-send-file, которая называется x-accl-redirect, по сути, вы выполняете аутентификацию в PHP и устанавливаете заголовок, который nginx подхватывает и начинает передачу этого файла. PHP завершает выполнение, и ваш веб-сервер обрабатывает передачу, милая! (Опять же, у меня есть это в живой настройке, и он отлично работает)
Для распределения файлов по серверам или других длительных операций мы понимаем, что PHP не совсем подходит для этого, поэтому мы устанавливаем gearman, который является сервером заданий, который может распределять задания между воркерами на разных серверах, эти воркеры могут быть написаны на любой язык. Поэтому вы можете создать распределенного воркера и порождать 5 из них, используя в общей сложности 200 КБ памяти вместо 100 МБ, которые использовал бы PHP. Сладкий. (У меня это тоже работает вживую, так что все это реально возможно)
Если вы еще не разобрались с этим, я думаю, что многие из ваших проблем вообще не связаны с вашим веб-сервером, вы просто так думаете, потому что Apache заставляет его быть связанным с вашим веб-сервером из-за его структуры, часто есть гораздо лучшие инструменты для работы, чем PHP, и PHP - это язык, который знает это и предоставляет отличные возможности для разгрузки работы, даже не покидая PHP.
Я настоятельно рекомендую nginx, но я также думаю, что вам следует рассмотреть другие варианты решения других ваших проблем, если у вас есть проблемы с масштабированием или производительностью, не стесняйтесь писать мне. Я не знаю, можете ли вы отправлять сообщения здесь, но в противном случае напишите мне на martin@bbtn.us, так как я не выслеживаю ошибки сервера из-за чего-либо, не помеченного nginx. :)
Я бы посоветовал запустить nginx как обратный прокси. Он будет обрабатывать все ваши статические и кешированные файлы (где это значительно быстрее, чем Apache / меньше накладных расходов на память), а затем перенаправит все запросы на динамический контент в Apache.
Я не уверен, что mod_php быстрее, чем его альтернативы, где вы это читали? Я провел несколько лабораторных тестов с nginx + php-fpm, и, судя по моим измерениям, он превосходит все остальные настройки.
Взгляните на эту настройку: http://interfacelab.com/nginx-php-fpm-apc-awesome/
Я настроил его почти так же, за исключением того, что использую пакеты PHP из http://www.dotdeb.org/ - который включает пакет php-fpm и готовый к использованию сценарий инициализации. Я не использую memecache или syck.