Настройка сервисов 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. Добавлено описание блокировки просмотра сайта с определённых браузеров.


Благодарю за внимание, доброго здоровья!



Сайт работает на микрокомпьютере