Поиск по сайту:

Почему я считаю, что Nginx практически лучше Apache


Согласно последнему опросу веб-серверов, проведенному Netcraft в конце 2017 года (точно в ноябре), Apache и Nginx являются наиболее широко используемыми веб-серверами с открытым исходным кодом в Интернете.

Apache – это бесплатный HTTP-сервер с открытым исходным кодом для Unix-подобных операционных систем и Windows. Он был разработан как безопасный, эффективный и расширяемый сервер, предоставляющий службы HTTP в синхронизации с преобладающими стандартами HTTP.

С момента своего запуска Apache является самым популярным веб-сервером в Интернете с 1996 года. Это фактический стандарт для веб-серверов в Linux и экосистеме с открытым исходным кодом. Новым пользователям Linux обычно легче настроить и использовать.

Nginx (произносится как «Engine-x») — это бесплатный высокопроизводительный HTTP-сервер с открытым исходным кодом, обратный прокси-сервер и прокси-сервер IMAP/POP3. Как и Apache, он также работает в Unix-подобных операционных системах и Windows.

Хорошо известный своей высокой производительностью, стабильностью, простой настройкой и низким потреблением ресурсов, он с годами стал настолько популярным, что его использование в Интернете стремительно растет. Теперь это веб-сервер, который предпочитают опытные системные администраторы или веб-мастера ведущих сайтов.

Некоторые из загруженных сайтов, работающих на:

  • Apache: PayPal, BBC.com, BBC.co.uk, SSLLABS.com, Apple.com и многие другие.
  • Nginx – это Netflix, Udemy.com, Hulu, Pinterest, CloudFlare, WordPress.com, GitHub, SoundCloud и многие другие.

В Интернете уже опубликовано множество ресурсов, посвященных сравнению Apache и Nginx (я на самом деле имею в виду статьи «Apache против Nginx»), многие из которых четко и подробно объясняются их основные функции и операции в различных сценариях, включая показатели производительности в лабораторных тестах. Поэтому здесь это рассматриваться не будет.

Я просто поделюсь своим опытом и мыслями по поводу всей дискуссии, опробовав Apache и Nginx, оба в производственных средах, основанных на требованиях к хостингу современных веб-приложений, в следующей статье. раздел.

Причины, по которым я считаю, что Nginx практически лучше Apache

Ниже приведены причины, по которым я предпочитаю веб-сервер Nginx Apache для доставки современного веб-контента:

1. Nginx — легкий

Nginx – один из легких веб-серверов. Он занимает меньше места в системе по сравнению с Apache, который реализует широкий спектр функций, необходимых для запуска приложения.

Поскольку Nginx объединяет несколько основных функций, он опирается на выделенные сторонние веб-серверы, такие как серверная часть Apache, серверы FastCGI, Memcached, SCGI и uWSGI, или сервер приложений, то есть серверы для конкретного языка, такие как Node.js, Tomcat. , и т. д.

Поэтому его использование памяти гораздо лучше подходит для развертываний с ограниченными ресурсами, чем Apache.

2. Nginx создан для обеспечения высокого уровня параллелизма.

В отличие от потоковой или процессно-ориентированной архитектуры Apache (модель «процесс на соединение» или «поток на соединение»), Nginx использует масштабируемую, управляемую событиями (асинхронную) архитектуру. Он использует модель ответственного процесса, адаптированную к доступным аппаратным ресурсам.

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

Каждый из рабочих процессов может одновременно обрабатывать тысячи HTTP-соединений, читать и записывать контент на диск, а также взаимодействовать с вышестоящими серверами. Вспомогательные процессы (менеджер кэша и загрузчик кэша) могут управлять операциями кэширования содержимого на диске.

Это делает его операции масштабируемыми и приводит к высокой производительности. Такой подход к проектированию делает его быстрым и удобным для современных приложений. Кроме того, сторонние модули можно использовать для расширения встроенных функций Nginx.

3. Nginx легко настроить.

Nginx имеет простую структуру файлов конфигурации, что упрощает настройку. Он состоит из модулей, которые управляются директивами, указанными в файле конфигурации. Кроме того, директивы делятся на блочные и простые директивы.

Директива блока определяется фигурными скобками ({ и ). Если директива блока может содержать другие директивы внутри фигурных скобок, это называется контекстом, таким как события, http, сервер и местоположение.

http {
	server {
		
	}
}

Простая директива состоит из имени и параметров, разделенных пробелами, и заканчивается точкой с запятой (;).

http {
	server {
		location / {
				
				## this is simple directive called root
			   	root  /var/www/hmtl/example.com/;

		}
		
	}
}

Вы можете включить пользовательские файлы конфигурации, например, с помощью директивы include.

http {
	server {

	}
	## examples of including additional config files
	include  /path/to/config/file/*.conf;
	include  /path/to/config/file/ssl.conf;
}

Практическим примером для меня было то, как мне удалось легко настроить Nginx для запуска нескольких веб-сайтов с разными версиями PHP, что было непросто с Apache.

4. Nginx — отличный интерфейсный прокси

Одним из распространенных вариантов использования Nginx является настройка его в качестве прокси-сервера. В этом случае он получает HTTP-запросы от клиентов и передает их прокси-серверам или вышестоящим серверам, упомянутым выше, по различным протоколам. Вы также можете изменить заголовки клиентских запросов, которые отправляются на прокси-сервер, и настроить буферизацию ответов, поступающих от прокси-серверов.

Затем он получает ответы от прокси-серверов и передает их клиентам. Его гораздо проще настроить в качестве прокси-сервера по сравнению с Apache, поскольку необходимые модули в большинстве случаев включены по умолчанию.

5. Nginx замечателен в обслуживании статического контента.

Статический контент или файлы обычно представляют собой файлы, хранящиеся на диске серверного компьютера, например файлы CSS, файлы JavaScript или изображения. Давайте рассмотрим сценарий, в котором вы используете Nginx в качестве интерфейса для Nodejs (сервера приложений).

Хотя сервер Nodejs (в частности, платформы Node) имеет встроенные функции для обработки статических файлов, им не требуется выполнять какую-либо интенсивную обработку для доставки нединамического контента, поэтому практически полезно настроить веб-сервер для подачи статического контента непосредственно клиенты.

Nginx может гораздо лучше обрабатывать статические файлы из определенного каталога и предотвращать блокировку процессов вышестоящего сервера запросами на статические ресурсы. Это значительно повышает общую производительность внутренних серверов.

6. Nginx — эффективный балансировщик нагрузки

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

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

Nginx использует следующие методы балансировки нагрузки:

  • циклический (метод по умолчанию) – запросы к вышестоящим серверам распределяются по циклическому принципу (в порядке списка серверов в вышестоящем пуле).
  • наименее подключенное – здесь следующий запрос пересылается на сервер с наименьшим количеством активных подключений.
  • ip-hash – здесь хэш-функция используется для определения того, какой сервер следует выбрать для следующего запроса (на основе IP-адреса клиента).
  • Общий хэш – в рамках этого метода системный администратор задает хеш (или ключ) с заданным текстом, переменными запроса или среды выполнения или их комбинацией. Например, ключом может быть исходный IP-адрес и порт или URI. Затем Nginx распределяет нагрузку между вышестоящими серверами, генерируя хэш для текущего запроса и помещая его на вышестоящие серверы.
  • Наименьшее время (Nginx Plus) — следующий запрос назначается вышестоящему серверу с наименьшим количеством текущих подключений, но отдается предпочтение серверам с наименьшим средним временем ответа.

7. Nginx хорошо масштабируется.

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

По словам Мэттью Принса, одной из компаний, извлекших выгоду из удивительных возможностей масштабируемости Nginx, является CloudFlare. По словам Мэттью Принса, ей удалось масштабировать свои веб-приложения для обработки более 15 миллиардов просмотров страниц в месяц при относительно скромной инфраструктуре. Strong>, соучредитель и генеральный директор CloudFare.

Более подробное объяснение можно найти в этой статье в блоге Nginx: NGINX против Apache: наш взгляд на вопрос десятилетней давности.

Заключение

И Apache, и Nginx невозможно заменить друг другом, у них есть свои сильные и слабые стороны. Однако Nginx предлагает мощную, гибкую, масштабируемую и безопасную технологию для надежной и эффективной работы современных веб-сайтов и веб-приложений. Каково ваше мнение? Сообщите нам об этом через форму обратной связи ниже.