Настройка сервисов NGINX |
Здравствуйте, уважаемые читатели! На микрокомпьютере MB77.07 установлен веб-сервер NGINX, но работает он в простейшей начальной конфигурации. Начальная конфигурация позволяет очень быстро запустить сайт. Но чтобы повысить безопасность и быстродействие сайта, а также удобство пользования ресурсом, понадобится задействовать дополнительные возможности NGINX.
Итак, пора улучшить начальную конфигурацию NGINX! Для этого нужно отредактировать файл из каталога /etc/nginx/sites-enabled
- прописать дополнительные настройки в секцию server {}
.
Для начала, нужно ораничить доступ к сайту по всяким левым запросам, чтобы ограничить возможности нездорового сканирования сайта:
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444;
}
Потом, нужно запретить доступ к сайту напрямую по ip-адресу в обход доменного имени:
if ($host !~ ^(домен)$ ) {
return 403;
}
Для повышения быстродействия сайта на стороне клиента нужно заставить NGINX использовать кэш браузера, чтобы компьютер посетителя не делал лишних запросов на сервер:
expires 168h;
add_header Cache-Control private;
Кроме того, весьма полезно будет запретить NGINX записывать в журнал обращения к файлам изображений, а также файлам оформления стилей:
location ~ \.(jpg|png|ico|css){
access_log off;
expires max;
}
Далее, при возникновении ошибочных запросов пусть NGINX выдаёт мои страницы ошибок вместо стандартных. Во-первых, надо указать модулю proxy необходимость отображения страниц ошибок вместо запросов, добавив строку
proxy_intercept_errors on;
в конец файла proxy_params
, а во-вторых, настроить соответствие страниц ошибкам:
error_page 403 /403.html;
location = /403.html {
root /mnt/usbflash1/mb7707;
allow all;
}
error_page 404 /404.html;
error_page 451 /451.html;
error_page 500 /500.html;
location = /500.html {
root /mnt/usbflash1/mb7707;
allow all;
}
Поскольку при генерации ошибок 403 и 500 переходы по внутренним ссылкам становится недоступными, то для отображения их страниц нужно указывать их расположение и принудительное разрешение доступа!
Чтобы страницы ошибок нормально отображались, их нужно размещать в корневом каталоге сайта!
Для ориентирования в адресной строке браузера расширения файлов и явное указание главной страницы совершенно не обязательно. Лучше скрыть главную страницу и расширения .html и .php страниц сайта. Каюсь, здесь я совсем запутался, большое спасибо Антону Прибора за помощь!
rewrite ^/(.*/)?index.(html|php)$ /$1 permanent;
rewrite ^/(.*)\.(php|html)$ /$1 permanent;
try_files $uri $uri.html $uri/index.html @php;
location @php {
set $fname $document_root$document_uri;
if ($fname ~ /$) {
set $fname "${fname}index";
}
if (!-f $fname.php) {
return 404;
}
include fastcgi.conf;
fastcgi_param SCRIPT_FILENAME $fname.php;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
Наконец, нужно создать чёрный список ip-адресов. В него можно смело добавлять адреса и даже целые подсети, с которых пытались сканировать сайт в поиске уязвимостей. Например, создать файл noips
в каталоге /etc/nginx/conf.d
и в нём директивой deny ххх.yyy.zzz.ttt
запретить обращение к сайту каждого недружественного ip-адреса xxx.yyy.zzz.ttt.
При желании, вы даже можете заблокировать просмотр сайта с некоторых браузеров по User Agent! Например, яндекс-сервис попытался своровать ваши деньги, а может и своровал-таки... И вы теперь решительно не согласны с тем, чтобы ваш сайт отображался на браузерах Яндекса! Тогда в самом начале секции server {}
нужно прописать:
if ($http_user_agent ~* (YaBrowser) ) {
return 444;
}
Однако, в случае подмены User Agent браузера такая блокировка не сработает.
Всё готово, остаётся сохранить файлы и перезагрузить NGINX:
service nginx restart
Обновлено - 10.12.2018. Описана настройка nginx-light - как предельно облегчённого и необременённого неиспользуемыми функциями.
Обновлено - 31.12.2019. Исправлено описание настройки пользовательских страниц ошибок.
Обновлено - 11.06.2021. Добавлено описание блокировки просмотра сайта с определённых браузеров.
Благодарю за внимание, доброго здоровья!
Сайт работает на микрокомпьютере