Оптимизация TLS в NGINX

TLS (он же Transport Layer Security) – протокол защиты веб-страниц, который заменил собой SSL. По сути TLS = SSL и является следующим поколением (версией) устаревшего и подверженного POODLE-атакам стандарта.

TLS/SSL

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

Для установки безопасного канала используется протокол TLS Handshake, также нужно получить сертификат от ЦС и подгрузить криптобиблиотеку, OpenSSL в нашем случае.

Для включения TLS и настройки HTTPS-сервера в Nginx нужно в файле конфигурации в секцию server включить параметр SSL:

ssl_protocols TLSv1.1 TLSv1.2;

## включение SSL на 443 порте, указание сертификата, ключа, протоколов TLS и используемых шифров

Здесь директива ssl_protocols ограничивает используемые протоколы, а ssl_ciphers описывает разрешенные шифры в формате, поддерживаемом библиотекой OpenSSL. К примеру:

## пример использования всех шифров в формате OpenSSL

Важно понимать, что операции TLS/SSL достаточно ресурсоемкие, так что даже требуется запуск нескольких рабочих процессов на мультипроцессорных системах. Самой “тяжелой” и в плане нагрузки, и по времени исполнения, является операция TLS Handshake. Поэтому лучшим решением будет оптимизация сессии: постоянные соединения, кэширование, статические ключи и включение OCSP Stapling.

Keepalive

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

TLS keepalive

Для этого в секцию server файла конфигурации нужно добавить:

Кэширование сессии

Кэширование необходимо для повторного использования ключей, чтобы не повторять хэндшейк.

TLS caching

Для этого в секции http файла конфигурации Nginx нужно добавить:

## включение общего кэша размером 100 МБ и таймаута времени сессии 1 час

В 1 МБ кэша помещается около 4000 сессий, так что представленный пример позволит хранить до 400 000 сессий.

Session Tickets или мандат сессии

Протокол TLS умеет использовать session tickets для возобновления сеанса, при условии, что клиент их поддерживает (браузеры семейства Chromium и Firefox). Для этого TLS-сервер отправляет клиенту состояние сессии (session ticket), шифруя его своим ключом, и идентификатор ключа. Клиент возобновляет защищенную сессию, отправляя последний тикет на сервер во время инициализации процедуры TLS Handshake. А сервер, в свою очередь, возобновляет сессию в соответствии с сохраненными параметрами.

TLS session tickets

Реализуется все очень просто. В конфигурацию Nginx в уже знакомой секции server необходимо добавить:

## включение статических ключей

OCSP Stapling

Online Certificate Status Protocol – механизм проверки актуальности сертификата SSL, который заменил менее быстрый протокол CRL (Certificate Revocation List). При использовании CRL браузер загружает список аннулированных сертификатов и проверяет текущий сертификата, что увеличивает время подключения. Тогда как при использовании OCSP браузер отправляет проверочный запрос на адрес OCSP и в ответ получает статус сертификата, что может сильно нагружать сервера центров сертификации.

OCSP Stapling

Для использования протокола применяется OCSP Stapling – владелец сертификата самостоятельно с определенным интервалом опрашивает сервер OCSP и кэширует ответ, который содержит электронную подпись. Сам ответ “сшивается” с TLS Handshake через расширение запроса Certificate Status Request. Так что на серверы центров сертификации не поступает огромное количество запросов, которые также содержат информацию о просмотрах пользователя.

Чтобы включить OCSP Stapling, нужно добавить несколько строчек кода в файл конфигурации Nginx:

## включение OCSP Stapling и подключение доверенного сертификата

Дополнительные функции

Для принудительного использования браузером протокола HTTPS существует механизм под названием Strict Transport Security:

add_header Strict-Transport-Security «max-age=31536000; includeSubDomains»;

## включение Strict-Transport-Security, возраст в секундах

При помощи вот такой функции браузер будет понимать, что нужно использовать протокол HTTPS даже переходя по ссылке HTTP. Это поможет предотвратить часть атак, особенно, если на сервере не установлен редирект с HTTP на HTTPS.

Самое главное

Оптимизация TLS не займет много времени, но поможет существенно ускорить работу протокола и подключения пользователей к защищенным сайтам. А внедрение OCSP Stapling и HSTS еще и повысит безопасность соединения.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Как перезапустить nginx после обновления конфигурации

Включение и использование log-файлов для проверки работы Nginx

Что такое Etag и как его настроить в Nginx

301 redirect в Nginx’e

Причины и методы исправления ошибки Gateway Timeout, Nginx

Уменьшение размера картинок при сохранении качества

Как и зачем используется заголовок Cache-control

Где находится nginx. conf и пример настроек

Как настроить Nginx на максимальную эффективность

Как исправить ошибку 405 Not Allowed в Nginx

Как использовать try_files в настройках Nginx’a

Использование Nginx, как кэширующего сервера

Как исправить ошибку Primary script unknown в Nginx

Работа приложения с несколькими бэкендами при помощи Nginx

Как пофиксить ошибку «110: connection timed out» while reading response header from upstream

Причины возникновения ошибки Ошибка 502 bad gateway в Nginx и методы исправления

Архитектурные принципы высоконагруженных приложений

Как решить ошибку upstream sent too big header while reading response header from upstream в Nginx

Как улучшить время получения первого байта и отзывчивость веб-сервера

Основы оптимизации работы Web сервера

Ошибка HTTP 413 (Request Entity Too Large Error) означает, что клиент отправил слишком большой запрос на сервер.

Что означает ошибка сервера 504 Gateway Time Out и как ее исправить

Ошибка сервера 504

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

Сообщения, кодирующиеся в формате 5хх, говорят о проблеме на стороне сервера, например, когда невозможно выполнить запрос из-за нарушения связи между несколькими серверами. Ошибка 504 Gateway Time Out не является распространенной, но это не значит, что на нее не стоит обращать внимания, особенно владельцу сайта. Рассмотрим некоторые причины возникновения данной ошибки и способы ее устранения как на стороне обычного посетителя, так и администратором веб-ресурса.

Ошибка 504 Gateway Time Out – это код состояния HTTP, который появляется, когда в течение заданного периода времени один сервер не получает своевременный ответ от другого сервера, который действует как шлюз или прокси.

Описания ошибки могут иметь различную форму:

Наличие дополнительного словесного описания помогает конкретизировать причину возникновения сбоя.

Производительный хостинг в подарок при заказе лицензии 1С-Битрикс

Выбирайте надежную CMS с регулярными обновлениями системы и профессиональной поддержкой. А мы подарим вам год хостинга – специально для сайтов на 1С-Битрикс.

Что делать посетителю сайта при возникновении ошибки 504

Итак, вы столкнулись с появлением на экране сообщения «error 504». Не спешите уходить с сайта, ведь возникновение сбоя может говорить о неправильной работе вашего браузера или даже наличии более серьезных проблем на уровне пользовательского софта. Попробуйте произвести довольно простые действия, чтобы убедиться, что с вашим программным обеспечением и настройками все в порядке.

Если после проведения всех вышеозначенных рекомендаций любая ошибка, в т. ч. 504 Gateway Time Out, продолжает возникать регулярно, обратитесь в техподдержку проблемного интернет-ресурса.

Решение проблем с появлением ошибки сервера 504 администратором веб-ресурса

Некорректная работа сайта чаще всего просто раздражает посетителя и приводит к тому, что пользователь находит альтернативный ресурс. Для владельца сайта такие сбои могут носить более глобальные последствия. Поэтому очень важно своевременно обнаруживать баги и максимально быстро устранять их. Для раннего мониторинга стоит использовать все возможные инструменты:

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

Почти все ошибки с кодом 5хх, возникающие из-за невозможности обработки определенного количества запросов, поступающих на сервер, решаются методом апгрейда железа (использованием высокопроизводительного хостинга) либо оптимизацией работы программного обеспечения. Второй способ зависит от вида движка, на котором создан конкретный сайт. При использовании условно-бесплатных программ (WordPress, OpeneCart и других) все проблемы придется решать на уровне администрирования, с привлечением конкретного веб-программиста, разработавшего данный сайт. Если баги возникают на платных платформах (1С-Битрикс, UMI. CMS, NetCat CMS), напишите об ошибке 504 Gateway Time Out в техподдержку разработчика. Отправить сообщение о проблеме следует и разработчикам платных скриптов, если они установлены на вашем сайте, и вы считаете, что сбои возникают по причине их некорректного исполнения.

Вот некоторые причины, приводящие к возникновению ошибки 504 Gateway Time Out

Еще одна возможная причина возникновения ошибки 504 – исполняемый скрипт не укладывается в отведенный лимит времени. Это бывает, когда скрипт обращается к другим сайтам либо просто выполняет тяжелую операцию, например, строит поисковый индекс.

Рекомендации по устранению ошибки 504 Gateway Time Out методами администрирования сайта

Ошибка 504 Gateway Time Out может быть вызвана недавними изменениями или обновлениями на сайте. Если после отката к состоянию, предшествующему изменениям, баг исчез, следует найти конкретное действие, повлекшее возникновение ошибки. Для этого необходимо проверить журнал ошибок соответствующей CMS. Пользователи WordPress могут включить журналирование ошибок в файле wp-config. php добавлением следующих строк:

Все возникающие варианты ошибок будут записаны в файле wp-contents/debug. log.

Для проверки работоспособности плагинов и расширений попробуйте отключить те, которые вызывают подозрение как источники возникновения ошибки 504. В первую очередь это касается устаревших скриптов, но причиной могут оказаться и обновления. Если проблема исчезла, далее следует найти некорректный плагин или дополнение и устранить или исправить его. Один из способов улучшения работы исполняемого скрипта – увеличить значение параметра PHP max_execution_time или облегчить скрипт.

При использовании CDN для более быстрого получения контента, в частности CloudFlare, который работает как CDN и как сервис предотвращения негативных последствий от DDoS, вы можете столкнуться с двумя типами ошибок 504. В случае возникновения проблемы на стороне CloudFlare лучшим решением будет связаться с поддержкой CloudFlare или отключить его. Второй вариант – когда сбой возникает на стороне хостинг-провайдера. В этой ситуации также необходимо обратиться в службу поддержки хостера.

Часто ошибку 504 можно видеть на серверах, где используется VPS-хостинг и установлен Nginx в качестве фронтенда и Apache в качестве бэкенда. Для устранения проблемы в Apache можно увеличить значение timeout по умолчанию в файле httpd. conf:

Также увеличить лимит в max_execution_time в php. ini:

После внесения изменений следует перезапустить Apache. Ошибка 504 Gateway Time Out должна исчезнуть.

Аналогичным образом проблема с появлением ошибки HTTP 504 решается пользователями Nginx. Попробуйте увеличить такие параметры в файле /etc/nginx/conf. d/timeout. conf:

Также рекомендуется увеличить max_execution_time в php. ini:

Далее перезапустите Nginx и откройте сайт.

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

Данный способ позволяет администрировать настройки веб-сервера без использования консоли, один раз настроить их под ваш проект и больше не подключаться к серверу без острой необходимости.

Например, в бесплатной панели управления Vesta Control Panel достаточно внести изменения в раздел «Сервер» и навсегда забыть о возможности возникновения ошибок на сайте.

Ошибка ответа сервера 504 Vesta Control PanelИ далее внести соответствующие изменения.

Ошибка ответа сервера 504 Vesta Control Panel

Изменение php. ini в VestaCP

Аналогичным способом проблема устраняется и при использовании альтернативных панелей управления хостингом – Ajenti, CentOS Web Panel, ISPmanager и других.

Если вы считаете, что появление 504 Gateway Timeout вызвано превышением лимита использования ресурсов серверного железа, оптимальным решением будет аренда выделенного сервера или VPS. Когда ваш сайт уже размещен на виртуальном хостинге, но ни одна из рекомендаций не привела к исправлению error 504, обратитесь к хостинг-провайдеру. В этом случае подробно опишите причины, которые, как вы полагаете, привели к появлению сбоя.

Заключение

В данной статье мы рассмотрели основные причины возникновения ошибки HTTP 504 Gateway Timeout и популярные способы устранения неполадки. Уверен, некоторые администраторы веб-ресурсов сталкивались с подобными проблемами, выходящими за рамки приведенных примеров и рекомендаций.

Источники:

https://highload. today/optimizatsiya-tls-v-nginx/

https://timeweb. com/ru/community/articles/chto-oznachaet-oshibka-504-gateway-time-out-i-kak-ee-ispravit

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: