Nginx количество одновременных соединений

Ускорить работу сайта можно по разному. Либо, перенести его на более мощный сервер, либо оптимизировать программное обеспечение существующего. Последний вариант позволит улучшить производительность не меняя «железо». В этой статье я расскажу как использовать сервер (сервис, службу) memcached для ускорения сайта на WordPress.

Вопросы аппаратного обеспечения

Оптимизируя нашу систему, мы не можем выделить достаточно, уделяя должное внимание настройке нашего оборудования. Какое бы из этих решений мы ни выбрали для нашей установки, наличие достаточного объема ОЗУ имеет решающее значение. Когда процесс веб-сервера или интерпретатор, такой как PHP, не имеют достаточно оперативной памяти, он начинает подмену, и подкачка эффективно означает использование жесткого диска для пополнения оперативной памяти. Результатом этого является увеличение задержки каждый раз, когда к этой памяти обращаются. Это подводит нас ко второму пункту — месту на жестком диске. Использование быстрого SSD-хранилища является еще одним критическим фактором скорости нашего сайта. Нам также необходимо учитывать доступность ЦП и физическое расстояние центров обработки данных нашего сервера до предполагаемой аудитории.

Чтобы глубже погрузиться в аппаратную сторону настройки производительности, у Dropbox есть хорошая статья .

Предварительное сжатие

Перед тем, как отдать содержимое страниц в браузер посетителя, можно его сжать. Сжатие уменьшает размер передаваемых файлов (иногда в несколько раз), что приводит к увеличению скорости загрузки страниц и уменьшению исходящего трафика. Сжимать нужно только файлы, содержащие текстовую часть — текст, HTML, PHP, JS, XML, и прочие подобные. Текст хорошо сжимается даже при низком уровне компрессии, объем передаваемых фалов уменьшается на 50-80%. Конечно, файлы небольшие, всего десятки килобайт, но если учесть, что таких фалов тысячи, и загружаются они тысячами посетителей каждый день, то, как говорят, с миру по нитке — нищему на воротник, экономия получается существенная.

Предварительное сжатие / Apache

Для тех, у кого установлен Apache, нужно узнать у хостера, какие специальные модули, реализующие его, установлены — mod_pagespeed или mod_deflate? Обычно в Apache 2x устанавливают mod_deflate. Есть еще mod_gzip, но его устанавливали в предыдущих версиях, так что его встретить маловероятно.

Если установлен модуль mod_pagespeed, то в файл .htaccess, находящийся в корне вашего сайта, нужно вставить:

ModPagespeed on # using commands,filters etc

Если установлен модуль mod_deflate, то то в файл .htaccess, находящийся в корне вашего сайта, нужно вставить:

AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript

Читайте также:  Как предотвратить пробуждение Android от сна (ROOT)

В данном случае сжатию подвергаются все текстовые файлы — txt, html, xml, xhtml, css, js.

Предварительное сжатие / Nginx

Если хостинг работает под управлением Nginx, то директивы будут выглядеть иначе. В файл .htaccess, находящийся в корне вашего сайта, нужно вставить:

server { gzip on; gzip_types text/html text/css application/x-javascript text/plain text/xml image/x-icon; }

Предварительное сжатие / Скрипт

Бывает так, что сервер, обеспечивающий работу вашего блога, не поддерживает mod_deflate или mod_gzip. В этом случае можно прибегнуть к универсальному скрипту, который работает и на Apache, и на Nginx.

В файл используемой вами темы, в самое его начала, первой строкой нужно вставить:

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

Установка плагина

Зайдите в панель управления WordPress. Обычно для этого нужно просто добавить к домену /wp-admin, чтобы получилось -admin. Больше информации — в статье как зайти в панель управления WordPress.

В меню слева перейдите в раздел «Плагины», а потом в подраздел «Добавить новый». Введите в поисковой строке LiteSpeed Cache. В блоке с плагином нажмите кнопку «Установить» в правом верхнем углу, а потом сразу же «Активировать».

Установка плагина

На этом всё. В большинстве случаев кэширование начнёт работать само, дополнительно ничего настраивать не нужно.

Если используете другие плагины кэширования, рекомендуем отключить их в разделе «Плагины» – «Установленные», чтобы настройки разных плагинов не конфликтовали между собой .

Проверка наличия нужных заголовков в ответе сервера

После того, как вы вставите код в файл .htaccess, можно проверить, находятся ли необходимые заголовки в составе ответа сервера. Для этой цели можно воспользоваться каким-нибудь онлайн сервисом, например, , где в качестве клиента (User Agent), посылающего HTTP-запрос на сервер, выбираем любой браузер, а также вводим URL ресурса (для примера я взял путь до изображения, используемого в одной из статей блога):

После нажатия кнопки «Отправить запрос», через несколько секунд появится результат:

Как видите, в моем случае присутствуют все четыре заголовка. Я говорил, что обязательно должны выводится по одному из пар «Last-Modified — ETag» и «Expires — Cache-Control», остальные излишни. При этом полный комплект, насколько можно судить, не причинит вреда.

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

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

Читайте также:  Как Linux и R помогли мне заработать на Forex

Далее советую для закрепления материала обратиться к видео и посмотреть последовательно 6 уроков (один из которых посвящен настройке кеширования в браузерах), в которых подробно рассмотрены все наиболее важные аспекты ускорения сайта WP:

Другие способы

Установи правильные значения системных переменных

Открой файл /etc/ и помести в него следующие строки:

# Защита от smurf-атак _echo_ignore_broadcasts = 1 # Защита от неправильных ICMP-сообщений _ignore_bogus_error_responses = 1 # Защита от SYN-флуда _syncookies = 1 # Запрещаем маршрутизацию от источника _source_route = 0 _source_route = 0 # Защита от спуфинга _filter = 1 _filter = 1 # Мы не маршрутизатор _forward = 0 _redirects = 0 _redirects = 0 # Включаем ExecShield = 1 _va_space = 1 # Расширяем диапазон доступных портов _local_port_range = 2000 65000 # Увеличиваем максимальный размер TCP-буферов _rmem = 4096 87380 8388608 _wmem = 4096 87380 8388608 _max = 8388608 _max = 8388608 _max_backlog = 5000 _window_scaling = 1

Размести корневой каталог Web-сервера на выделенном разделе

Поместив корневой каталог Web-сервера в выделенный раздел и запретив на нем размещение любых исполняемых файлов и файлов-устройств, ты обезопасишь остальную часть системы от тех, кто сможет получить доступ к корню Web-сервера. При этом запись в файле /etc/fstab должна иметь примерно такой вид:

/dev/sda5 /nginx ext4 defaults,nosuid,noexec,nodev 1 2

Помести nginx в chroot/jail-окружение

Любая современная *nix-система позволяет запереть приложение в изолированной среде исполнения. В Linux для этого можно использовать технологии KVM, Xen, OpenVZ и VServer, во FreeBSD – Jail, в Solaris – Zones. Если ни одна из этих технологий не доступна, ты можешь поместить nginx в классический chroot, который хоть и намного более хрупок, но большинство взломщиков остановить сможет.

Установи правила SELinux для защиты nginx

Хорошей альтернативой изолированным средам исполнения являются локальные системы обнаружения и предотвращения вторжений, такие как SELinux или AppArmor. Будучи правильно настроенными, они смогут предотвратить попытки взлома Web-сервера. По дефолту ни одна из них не настроена для работы в связке с nginx, однако в рамках проекта SELinuxNginx () были созданы правила для SELinux, которые может использовать любой желающий. Остается только скачать и установить:

# tar -zxvf se-ngix_1_0_ # cd se-ngix_1_0_10/nginx # make # /usr/sbin/semodule -i

Настрой брандмауэр

Обычно nginx устанавливают на выделенных машинах, готовых к высокой нагрузке, поэтому зачастую он остается единственным сетевым сервисом, работающим на сервере. Чтобы обезопасить сервер, достаточно создать совсем небольшой набор правил, которые будут открывать 80, 110 и 143-й порты (если, конечно, nginx должен работать еще и как IMAP/POP3-прокси) и закрывать от внешнего мира все остальное.

Ограничь количество соединений с помощью брандмауэра

Для не слишком нагруженного Web-сайта хорошей идеей будет ограничить количество попыток соединений с одного IP-адреса в минуту. Это сможет уберечь тебя от некоторых типов DoS-атак и брутфорса. В Linux это можно сделать с помощью стандартного iptables/netfilter-модуля state:

# iptables -A INPUT -p tcp —dport 80 -i eth0 -m state —state NEW -m recent —set # iptables -A INPUT -p tcp —dport 80 -i eth0 -m state —state NEW -m recent —update —seconds 60 —hitcount 15 -j DROP

Читайте также:  Настройка OpenVPV-сервера на Windows Server

Правила урезают лимит на количество подключений с одного IP в минуту до 15. То же можно сделать и с помощью pf:

Кроме лимита на количество последовательных подключений (15 в минуту), данное правило устанавливает дополнительный лимит на количество одновременных подключений равный 100.

Настрой PHP

Если ты используешь nginx в связке с PHP, не забудь настроить и его. Вот как должен выглядеть конфигурационный файл /etc/php/ защищенного сервера:

# Отключаем опасные функции disable_functions = phpinfo, system, mail, exec # Максимальное время исполнения скрипта max_execution_time = 30 # Максимальное время, которое может потратить скрипт на обработку данных запроса max_input_time = 60 # Максимальное количество памяти, выделяемое каждому скрипту memory_limit = 8M # Максимальный размер данных, отсылаемых скрипту с помощью метода POST post_max_size = 8M # Максимальный размер загружаемых файлов upload_max_filesize = 2M # Не показывать ошибки PHP-скриптов пользователям display_errors = Off # Включаем Safe Mode safe_mode = On # Включаем SQL Safe Mode _mode = On # Позволяем выполнять внешние команды только в этом каталоге safe_mode_exec_dir = /путь/к/защищенному/каталогу # Защищаемся от утечки информации о PHP expose_php = Off # Ведем логи log_errors = On # Запрещаем открытие удаленных файлов allow_url_fopen = Off

Memcached для кэширования объектов

Memcached является одним из самых быстрых и популярных средств для кэширования произвольных данных в оперативной памяти.

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

Memcached работает гораздо быстрее чем MySQL, и потребляет гораздо меньше памяти. Но он не умеет обрабатывать сложные запросы, поэтому полностью заменить базу данных сервером Memcached в WordPress невозможно.

Стандартное кеширование объектов в WordPress

В WordPress есть свое кеширование объектов и оно происходит по тому же принципу, что и в Memcached — произвольные значения или объекты хранятся в памяти под определенным ключом. Но кеш WordPress является непостоянным, то есть все закэшированные значения сбрасываются при следующем посещении страницы сайта.

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

По сути мы кешируем базу данных MySQL, получая необходимые данные значительно быстрее.

Как отключить всплывающее окно в настройках WTotal Cache

Через 30 дней после первой установки W3 Total Cache начинает появляться всплывающее окно, которое предлагает поставить ссылку на W3TC на вашем сайте, написать сообщение в Твиттер, поставить оценку плагину на и подписаться на рассылку W3 EDGE.

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

Как отключить всплывающее окно в настройках WTotal Cache

Чтобы полностью отключить это окно, вместо «х» нажмите Cancel. После этого окно исчезнет и больше появляться не будет.