Web МастерскаяБлог
Сообщество Web Мастеров. Тут собрано всё, чтобы написать свой первый сайт, запустить его в Интернет и поддерживать его в течении всей его работы.
Оптимизация конфигурации Nginx
Nginx — мощный и высокопроизводительный сервер приложений, способный справляться с большими нагрузками. Однако даже такая надежная система требует тонкой настройки, чтобы раскрыть весь потенциал производительности. В этой статье рассмотрим наиболее важные параметры и приемы оптимизации Nginx.
1. Использование worker процессов
По умолчанию Nginx создает столько worker-процессов, сколько ядер у процессора сервера. Это оптимальное значение, однако иногда можно увеличить количество worker'ов, если нагрузка велика, а ресурсов достаточно.
Пример настройки количества worker'ов:
2. Настройка keepalive соединений
Использование долгоживущих HTTP-соединений позволяет значительно снизить нагрузку на сервер, особенно при большом количестве запросов от одного клиента.
Пример настройки keepalive:
3. Кэширование статического контента
Настройте кэширование для файлов изображений, CSS, JavaScript и...
Основные направления оптимизации
1. Использование worker процессов
По умолчанию Nginx создает столько worker-процессов, сколько ядер у процессора сервера. Это оптимальное значение, однако иногда можно увеличить количество worker'ов, если нагрузка велика, а ресурсов достаточно.
Пример настройки количества worker'ов:
worker_processes auto;2. Настройка keepalive соединений
Использование долгоживущих HTTP-соединений позволяет значительно снизить нагрузку на сервер, особенно при большом количестве запросов от одного клиента.
Пример настройки keepalive:
keepalive_timeout 65;
keepalive_requests 10000;3. Кэширование статического контента
Настройте кэширование для файлов изображений, CSS, JavaScript и...
- Жалоба
Как заблокировать IP адрес пользователя в Nginx
О том, как заблокировать IP в .htaccess, я рассказывал: Как заблокировать IP адрес пользователя в .htaccess, тут я расскажу, как заблокировать нежелательные IP адреса в Nginx, как это сделал я.
И так, у меня поселился один постоялец, крутится он на сайте круглые сутки, видимо это бот. Первые цифры IP:
Перечитываю конфигурацию Nginx командой:
Готово! Обратите внимание на то, как написан IP:
После добавления записи, которая кого то блокирует, в моем файле: "var/www/httpd-logs/danfa.net.error.log", появляются записи (Доступ закрыт...
И так, у меня поселился один постоялец, крутится он на сайте круглые сутки, видимо это бот. Первые цифры IP:
141.8 - это неизменные цифры, остальные постоянно меняются. Было решено заблокировать его, для этого я открываю "etc/nginx/nginx.conf" и после: http { добавляю:
deny 141.8.0.0/16;Перечитываю конфигурацию Nginx командой:
nginx -s reloadГотово! Обратите внимание на то, как написан IP:
141.8.0.0/16 - первые две цифры (141.8), как есть, дальше следуют нули и /16 - это говорит о том, что цифры могут быть абсолютно любыми (диапазон). Если надо заблокировать, какой то конкретный IP, например: 141.8.142.114, пишем так:
deny 141.8.142.114;После добавления записи, которая кого то блокирует, в моем файле: "var/www/httpd-logs/danfa.net.error.log", появляются записи (Доступ закрыт...
Nginx: Как запретить прямое обращение к файлам
Для одной задумки потребовалось запретить прямое обращение к файлам, при этом, чтобы сценарий движка, мог иметь полный доступ, к файлам. Сделать это надо было на Nginx. Мне помогли с этим и сейчас расскажу, что необходимо сделать, чтобы запретить.
Папка для запрета:
Код для конфига Nginx:
Многие пишут
После добавления строк выше, необходимо перечитать конфигурацию. Для этого я использую команду:
Готово. Теперь папка
Возможно, пригодится: Тема: Команды для настройки сервера....
Папка для запрета:
/app/XX/data/. Вместо XX идентификатор приложения, то есть цифры, которые постоянно меняются.Код для конфига Nginx:
location ~* /app/\d+/data/ {
valid_referers server_names;
if ($invalid_referer) {
return 404;
}
}Многие пишут
return 403 (Запрещено), я решил, что будет лучше отправлять на 404 ошибку, нежели прямо давать понять, что сюда нельзя.После добавления строк выше, необходимо перечитать конфигурацию. Для этого я использую команду:
nginx -s reloadГотово. Теперь папка
data скрыта от прямого обращения.Возможно, пригодится: Тема: Команды для настройки сервера....
Nginx: Добавление слеша в конце URL, если его там нет
Ранее страницы моего сайта открывались, как с слэшем в конце URL, так и без него. Чтобы не допустить дублей страниц, я решил, что мой сайт будет работать только с слэшем в конце URL. Проверку слэша и его добавления делал на PHP:
Слэш добавляется ко всем URL, кроме тех, что имеют на конце:
Всё работает отлично, но грешно делать это на PHP, если есть Nginx... Поискав в интернете решение моей задачи, нашёл такую строку кода:
Данный код добавляет слэш в конец всем URL, кроме тех, где есть точка (
Вставил строку в
...
// Добавление слеша в конце URL, если его там нет
if (substr($url, -1) != '/')
{
if (!preg_match('/(.*)\.(jpg|jpeg|gif|png|js|css|ico)/i', $url))
{
$url = $url . '/';
}
} // End: Добавление слеша в конце URL, если его там нетСлэш добавляется ко всем URL, кроме тех, что имеют на конце:
jpg|jpeg|gif|png|js|css|ico.Всё работает отлично, но грешно делать это на PHP, если есть Nginx... Поискав в интернете решение моей задачи, нашёл такую строку кода:
rewrite ^([^.\?]*[^/])$ $1/ permanent;Данный код добавляет слэш в конец всем URL, кроме тех, где есть точка (
.) или параметры (id=1). А значит картинки, к которым будут обращаться на прямую, остаются без слэша.Вставил строку в
location:
location / {
rewrite ^([^.\?]*[^/])$ $1/Nginx: Удаление лишних слэшев в URL
Ранее я удалял лишние слэши, при помощи PHP. Делал так:
Сегодня, наконец то, дошли руки, чтобы перенести удаление лишних слэшев в конфиг Nginx. Я добавил в
После чего перечитал конфигурацию, при помощи команды:
Теперь код в PHP удаляю, больше он не нужен. Работает Nginx.
Возможно, будет интересно:
- Блог: Nginx: Добавление слеша в конце URL, если его там нет
- Блог: Nginx: Удаление параметров в URL...
// Удаление лишних слешев
if (preg_match('/\/{2,}/i', $url))
{
$url = preg_replace('/\/{2,}/', '$1/', $url);
} // End: Удаление лишних слешевСегодня, наконец то, дошли руки, чтобы перенести удаление лишних слэшев в конфиг Nginx. Я добавил в
server следующий код:
# Удаление лишних слешев
if ($request_uri ~ "//") {
return 301 $uri;
} # End: Удаление лишних слешевПосле чего перечитал конфигурацию, при помощи команды:
nginx -s reloadТеперь код в PHP удаляю, больше он не нужен. Работает Nginx.
Возможно, будет интересно:
- Блог: Nginx: Добавление слеша в конце URL, если его там нет
- Блог: Nginx: Удаление параметров в URL...
Категории
- Apache 6
- CMS 3
- CSS 16
- FTP 1
- HTML 11
- JavaScript 43
- MySQL 17
- Nginx 16
- PHP 51
- phpMyAdmin 2
- SVG 3
- URL 1
- XML 3
- Безопасность 7
- Библиотека JS 16
- Графика 3
- Доменное имя 1
- Инструкция 1
- Кодировка 2
- Контент 8
- Мнение 1
- Мобильное устройство 1
- Монетизация сайта 2
- Настройка 3
- Оптимизация 2
- Ошибка 10
- Поисковая система 1
- Продвижение сайта 6
- Производительность 1
- Софт 1
- Старт 2
- Сценарий 1
- Функция 1
- Хостинг | Сервер 3
Реклама















