Архив метки: nginx

Nginx: что за инструмент? Его особенности, сферы применения.

Nginx – это программное обеспечение для развертывания веб-сервера, которое эффективно предотвращает падение производительности и другие сложные проблемы.

Сейчас продукт обслуживает более 26% веб-ресурсов по всей планете. В своем сегменте Nginx является самым популярным в России, а в мировом рейтинге занимает почетное второе место. Разберемся подробнее, что из себя представляет ПО, как работает и применяется, чем отличается от основного конкурента Apache.

nginx

Читать

Понимание и внедрение методов балансировки нагрузки Linux

Если вы управляете серверами Linux, вы знаете, что они надежны и универсальны. Но чтобы получить от них максимальную отдачу, вам также необходимо понимать, как реализовать правильную балансировку нагрузки — и именно об этом вся эта статья.

Начнем с основ: что такое балансировка нагрузки и почему это так важно для ваших серверов? Речь идет не только о предотвращении сбоев; речь идет о максимизации эффективности и стабильности. Читать

Бесплатный SSL сертификат Let’s Encrypt протокола https Nginx

Краткая инструкция по настройке https с помощью SSL сертификата от Let’s Encrypt на ОС Ubuntu с веб-сервером Nginx. Сначала прочтите всё до конца, а потом выполняйте.

Если что-то не получится, обязательно задавайте вопросы в комментариях. Полная официальная инструкция на английском доступна на readthedocs.org.

После успешного перехода интернета на защищенный https протокол внешние ресурсы (например, js, тэги <img>) надо брать только по https, иначе замо́чек в адресной строке браузера не будет зелёным. Читать

nginx: [warn] protocol options redefined

На случай, если вы получаете предупреждающее сообщение от Nginx после перезагрузки.




Для просмотра сообщение с ошибками в терминале набираем:




sudo nginx -t




июл 06 17:59:14 user nginx[1963]: nginx: [warn] protocol options redefined for 195.234.208.75:443 in /etc/nginx/sites-enabled/ваш_домен.conf:10

июл 06 17:59:14 user nginx[1963]: nginx: [warn] protocol options redefined for 195.234.208.75:443 in /etc/nginx/sites-enabled/ваш_домен2.conf:2




Вы можете легко исправить это вручную, просто добавьте параметр “http2” в директиву “listen” вашего конфигурационного файла для домена (только для порта 443).




Для этого откроем файл из сообщения об ошибке:




sudo nano /etc/nginx/sites-enabled/ваш_домен.conf




Нажмем клавиши ctrl+? и введём число 10 (из сообщения об ошибке). Курсор встанет на нужную строчку. В данной строке укажите параметр “http2“. Вот пример:




listen 195.234.208.74:443 ssl http2;



[endtxt]




. . . .




2023-07-06T18:27:09
Nginx

Переменные в nginx

Сегодня в статье привожу примеры переменных в web браузере Nginx




  • $args – переменная равна аргументам в строке запроса;
  • $arg_name – переменная равна аргументу name в строке запроса;
  • $binary_remote_addr – переменная равна адресу клиента в бинарном виде, длина её значения всегда 4 байта;
  • $content_length – переменная равна строке “Content-Length” в заголовке запроса;
  • $content_type – переменная равна строке “Content-Type” в заголовке запроса;
  • $cookie_name – переменная равна cookie name;
  • $document_root – переменная равна значению директивы root для текущего запроса;
  • $document_uri – то же самое, что и $uri;
  • $host – переменная равна строке “Host” в заголовке запроса или имени сервера, на который пришёл запрос, если этой строки нет;
  • $hostname – переменная равна имени хоста;
  • $http_name – переменная равна строке name в заголовке запроса;
  • $is_args – переменная равна “?”, если в строке запроса есть аргументы, и пустой строке, если их нет;
  • $limit_rate – переменная позволяет установить ограничение скорости соединения;
  • $pid – переменная равна номеру рабочего процесса;
  • $request_method – переменная равна методу запроса, обычно это “GET” или “POST”;
  • $remote_addr – переменная равна адресу клиента;
  • $remote_port – переменная равна порту клиента;
  • $remote_user – переменная равна имени пользователя, используемого в Basic аутентификации;
  • $realpath_root – переменная равна значению директивы root для текущего запроса, при этом все символические ссылки преобразованы в реальные путь;
  • $request_filename – переменная равна пути к файлу для текущего запроса, формируемому из директив root или alias и URI запроса;
  • $request_body – переменная содержит тело запроса. Значение переменной появляется в location’ах, обрабатываемых директивами proxy_pass и fastcgi_pass.
  • $request_body_file – переменная равна имени временного файла, в котором хранится тело запроса. По завершению работы файл необходимо удалить. Для того, чтобы тело запроса клиента всегда записывалось в файл, нужно указать client_body_in_file_only on. При передаче имени в проксированном запросе или в запросе к FastCGI-серверу следует запретить передачу самого тела директивами “proxy_pass_request_body off” или “fastcgi_pass_request_body off” соответственно.
  • $request_uri – переменная равна полному первоначальному URI вместе с аргументами;
  • $query_string – то же самое, что и $args;
  • $scheme – переменная равна схеме запроса — “http” или “https”;
  • $server_protocol – переменная равна протоколу запроса, обычно это “HTTP/1.0” или “HTTP/1.1”;
  • $server_addr – переменная равна адресу сервера, на который пришёл запрос. Как правило, для получения значения этой переменной делается один системный вызов. Для того, чтобы избежать системного вызова, нужно указывать адреса в директивах listen и использовать параметр bind;
  • $server_name – переменная равна имени сервера, на который пришёл запрос;
  • $server_port – переменная равна порту сервера, на который пришёл запрос;
  • $uri – переменная равна текущему URI в запросе, он может отличаться от первоначального, например, при внутренних редиректах или при использовании индексных файлов.



2022-01-08T13:12:16
Nginx

Как заблокировать хотлинкинг с помощью Nginx

Nginx — это легкий веб-сервер, способный обрабатывать огромное количество запросов в определенный момент времени, не загружая сервер. Он содержит сложные функции, такие как асинхронная обработка, поддержка ipv6, загрузчик кеша, поддержка http/2, горячая ссылка на блоки, пулы потоков, SPDY и SSL и многое другое. Среди них одна из самых важных функций для любого веб-сайта в целом — это блокировка хотлинкинга. Горячие ссылки — это злонамеренная практика, часто применяемая некоторыми мелкими веб-мастерами, когда они не могут позволить себе стоимость полосы пропускания и, таким образом, в конечном итоге берут ее откуда-то еще. Это мешает законным веб-мастерам использовать пропускную способность, за которую они заплатили. Вдобавок к этому связанный ресурс может быть недоступен для пользователей, которые посещают исходный веб-сайт, когда полоса пропускания, выделенная для исходного веб-мастера, исчерпана, а владелец сайта не платил за чрезмерно потребляемую пропускную способность. В общем, чтобы сохранить целостность, горячие ссылки на веб-сайты должны быть недоступны, и в этой статье рассказывается, как это легко сделать.

 

Подготовка

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

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

nano /etc/nginx/sites-available/default

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

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

    nginx -t

    • Если все в правильном порядке, введите следующую команду, чтобы изменения вступили в силу.

    sudo systemctl restart nginx

 

Метод 1: Общий метод

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

  1. Скопируйте следующий фрагмент кода.
  2. Откройте файл nginx по умолчанию, как показано на этапе «Подготовка».
  3. Вставьте скопированный фрагмент кода под первый блок местоположения, найденный в файле по умолчанию. В nginx нечувствительность к регистру в регулярном выражении (~*) всегда имеет приоритет перед прямой косой чертой (/), и поэтому следующий фрагмент кода выполняется перед блоком местоположения прямой косой черты.
  4. Сохраните и закройте файл по умолчанию, а затем выполните 3, 4 шага на этапе «Подготовка», чтобы изменения вступили в силу.

В следующем примере он блокирует запросы к файлам css, gif, ico, jpeg, js, png, woff, woff2, ttf, ttc, otf и eot. В блоке местоположения есть 10 условных операторов. Первый условный оператор позволяет напрямую просматривать ресурсы через веб-браузер, 2- й и 3- й блоки позволяют просматривать ресурсы через исходный сайт (как голые, так и субдомены www), остальные блоки, кроме поиска? q и последний блок позволяют сканерам поисковых систем получать доступ и индексировать ресурсы, что очень важно для индексации изображений как в изображениях Google, так и в изображениях Bing. Поиск? Q позволяет службе кеширования Google получать доступ и сохранять ресурсы вместе со страницей, и, таким образом, страница может быть доступна непосредственно через результат поиска Google, когда сайт находится в автономном режиме.

location ~* .(css|gif|ico|jpeg|jpg|js|png|woff|woff2|ttf|ttc|otf|eot)$ {

if ($http_referer !~ "^$"){

set $rule_0 1$rule_0;

}

if ($http_referer !~ "^http://nucuta.com/.*$"){

set $rule_0 2$rule_0;

}

if ($http_referer !~ "^http://nucuta.com$"){

set $rule_0 3$rule_0;

}

if ($http_referer !~* "google."){

set $rule_0 4$rule_0;

}

if ($http_referer !~* "search?q=cache"){

set $rule_0 5$rule_0;

}

if ($http_referer !~* "msn."){

set $rule_0 6$rule_0;

}

if ($http_referer !~* "yahoo."){

set $rule_0 7$rule_0;

}

if ($http_user_agent !~* "googlebot"){

set $rule_0 8$rule_0;

}

if ($http_user_agent !~* "msnbot"){

set $rule_0 9$rule_0;

}

if ($http_user_agent !~* "slurp"){

set $rule_0 10$rule_0;

}

if ($http_referer !~* "yandex."){ 

set $rule_0 11$rule_0; 

}

if ($rule_0 = "10987654321"){

return 403;

break;

}

}

Метод 2: метод Valid_Referers

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

  1. Скопируйте следующий фрагмент кода в середину и в самое начало основного блока местоположения.
  2. Замените список доменных имен разрешенными доменными именами, например google, bing, или вашими собственными доменами и т. Д.
  3. Сохраните и закройте файл по умолчанию, а затем выполните 3, 4 шага на этапе «Подготовка», чтобы изменения вступили в силу.

valid_referers нет заблокированных server_names

*.linux.com linux.* www.linux.com/about/

~.linux.;if ($invalid_referer) {

return 403;

}



 

В основном он имеет два блока кода, valid_referers и условное выражение if с переменной invalid_referer. По умолчанию этот блок кода используется между и в самом начале блока местоположения перед выполнением любого другого кода, но его можно использовать и в любом другом месте, например, между блоком кода местоположения с регулярными выражениями для обнаруживать определенные форматы файлов, чтобы сделать блокировку релевантной для вышеупомянутых форматов файлов, как в методе 1. Как объяснялось ранее, метод содержит только два блока кода, первый блок кода содержит 3 ключевых слова, первое — «нет», когда Поле referer отсутствует в HTTP-запросе, второе поле «блокируется», когда поле referer удаляется какой-либо промежуточной стороной, такой как прокси, брандмауэр и т. д., третье ключевое слово предназначено для указания действительных доменных имен.

Когда имя домена начинается с символа «~», оно рассматривается как регулярное выражение, и поэтому могут использоваться очень сложные шаблоны, но может быть трудно понять, если регулярные выражения известны недостаточно хорошо. Если ни одно из условий не выполняется в операторе valid_referers, переменная invalid_referer устанавливается в пустую строку, в противном случае она устанавливается в 1, что это означает, если поступающий запрос не содержит поля referer или если nginx определил, что поле referer удалено брандмауэром или прокси-сервером, или если в поле referer заданы указанные домены (список допустимых доменных имен), то для недопустимой переменной referer устанавливается пустая строка, и, следовательно, ее условие if не выполняется. Однако, если запрос поступает из домена, который не указан в выражении valid_referers как допустимый домен, он блокируется.

 

ВЫВОД

Обязательно примите во внимание этот контент и не допускайте ссылок на свои сайты, размещенные на Nginx.



2021-02-18T22:28:50
NGINX