# Устранение неполадок веб-перехватчиков

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

## Отсутствующие поставки веб-перехватчика

Если вы не получаете доставку веб-перехватчика, которую вы ожидаете, следует определить точку, в которой отсутствует доставка.

1. Активируйте событие, которое ожидается привести к доставке веб-перехватчика. Например, если веб-перехватчик является веб-перехватчиком репозитория, который подписан `issues` на событие, можно открыть проблему в этом репозитории.

2. Просмотрите журнал последних поставок для веб-перехватчика. Сведения о том, как это сделать для каждого типа веб-перехватчика, см. в разделе [Просмотр доставленных данных веб-перехватчика](/ru/enterprise-server@3.22/webhooks/testing-and-troubleshooting-webhooks/viewing-webhook-deliveries).

   Если журнал недавних поставок не включает доставку, соответствующую событию веб-перехватчика, которое было активировано на предыдущем шаге, то GitHub не пытались выполнить доставку. Чтобы определить причину, выполните следующие действия.

   1. Подождите несколько минут, а затем снова проверьте. Доставка веб-перехватчика может занять несколько минут.

   2. Убедитесь, что вы активировали событие в расположении, где настроен веб-перехватчик. Например, если веб-перехватчик является веб-перехватчиком репозитория, убедитесь, что вы активировали событие в том же репозитории, где настроен веб-перехватчик.

   3. Убедитесь, что веб-перехватчик подписан на событие, которое вы активировали. Например, если при открытии проблемы ожидается доставка веб-перехватчика, убедитесь, что веб-перехватчик подписан на `issues` событие.

   4. Убедитесь, что веб-перехватчик активен. Дополнительные сведения см. в разделе [Отключение веб-перехватчиков](/ru/enterprise-server@3.22/webhooks/using-webhooks/disabling-webhooks).

   5. Убедитесь, что веб-перехватчик не влияет на ограничения доступа OAuth app. Если веб-перехватчик был создан OAuth app от имени пользователя, авторизованного OAuth app, веб-перехватчик будет автоматически отключен, если это организация или веб-перехватчик репозитория для организации, которая имеет ограниченный доступ к OAuth app. Дополнительные сведения см. в разделе [Сведения об ограничениях доступа к приложению OAuth](/ru/organizations/managing-oauth-access-to-your-organizations-data/about-oauth-app-access-restrictions) в документации GitHub Free.

   6. Проверьте, может ли событие достигнуть задокументированного ограничения. Например, при отправке нескольких трех тегов `push` событие не будет активировано для отправки. Дополнительные сведения об задокументированных ограничениях для каждого события см. в разделе [События и полезные данные веб-перехватчика](/ru/enterprise-server@3.22/webhooks/webhook-events-and-payloads).

   7. Проверьте состояние веб-перехватчиков в [githubstatus.com](https://www.githubstatus.com/).

   Если в журнале недавних поставок указано, что с доставкой произошла ошибка, то GitHub попыталась выполнить доставку, но доставка была неудачной. Обычно это связано с проблемой с сервером. См. приведенные ниже разделы, чтобы устранить определенную ошибку.

3. Просмотрите журналы для сервера. Сведения в журналах зависят от кода, выполняемого сервером для обработки доставки веб-перехватчиков. Для диагностики проблем на сервере может потребоваться добавить дополнительные инструкции журнала в код.

## Не удается иметь более 250 webhooks

Можно создать до 250  репозитория, организации или глобального репозитория webhooks для каждого типа события. Если вы пытаетесь создать больше, вы получите сообщение об ошибке о том, что у вас не может быть больше 250 веб-перехватчиков.

Если требуется более 250 webhooks, можно запустить прокси-сервер, который получает веб-перехватчики из GitHub и перенаправляет их на неограниченное количество URL-адресов назначения.

## Локальный узел URL-адреса не поддерживается

Нельзя использовать `localhost` или `127.0.0.1` как URL-адрес веб-перехватчика.

Для доставки веб-перехватчиков на локальный сервер для тестирования можно использовать службу пересылки веб-перехватчиков. Дополнительные сведения см. в разделе [Тестирование веб-перехватчиков](/ru/enterprise-server@3.22/webhooks/testing-and-troubleshooting-webhooks/testing-webhooks) или посетите сайт <https://smee.io/>.

## Не удалось подключиться к узлу

Ошибка возникает, когда GitHub пытается доставить вебхук, но не удаётся разрешить URL вебхука на IP-адрес, либо существуют сетевые ограничения, `failed to connect to host` мешающие подключению к хосту.

Чтобы проверить, разрешается ли имя узла в IP-адрес, можно использовать `nslookup`. Например, если URL-адрес полезных данных имеет значение `https://octodex.github.com/webhooks`, можно запустить `nslookup octodex.github.com`. Если имя узла не удалось разрешить в IP-адрес, команда nslookup будет указывать, что сервер не может найти имя узла.

Убедитесь, что сервер разрешает подключения с GitHub. Вы можете использовать конечную точку `GET /meta` для поиска текущего списка данных . Дополнительные сведения см. в разделе [Конечные точки REST API для метаданных](/ru/enterprise-server@3.22/rest/meta/meta#get-github-meta-information). GitHub иногда вносит изменения в его IP-адреса, поэтому периодически следует обновлять список разрешений IP-адресов.

## Не удалось подключиться к сети

Ошибка `failed to connect to network` указывает, что сервер отказался от подключения, когда GitHub попыталась доставить веб-перехватчик.

Убедитесь, что сервер разрешает подключения с GitHub. Вы можете использовать конечную точку `GET /meta` для поиска текущего списка данных . Дополнительные сведения см. в разделе [Конечные точки REST API для метаданных](/ru/enterprise-server@3.22/rest/meta/meta#get-github-meta-information). GitHub иногда вносит изменения в его IP-адреса, поэтому периодически следует обновлять список разрешений IP-адресов.

## Истекло время ожидания

Ошибка `timed out` указывает, что GitHub не получил ответ от сервера в 30 секунды доставки веб-перехватчика.

Сервер должен реагировать на ответ 2xx в 30 секунды получения доставки веб-перехватчика. Если сервер занимает больше времени, чем для ответа, GitHub завершает подключение и рассматривает сбой доставки.

Чтобы своевременно реагировать, может потребоваться настроить очередь для обработки полезных данных веб-перехватчика асинхронно. Сервер может реагировать, когда он получает веб-перехватчик, а затем обрабатывать полезные данные в фоновом режиме, не блокируя будущие поставки веб-перехватчика. Например, можно использовать такие службы, как Hookdeck[ или библиотеки, такие как ](https://hookdeck.com)[Resque](https://github.com/resque/resque/) (Ruby), [RQ](http://python-rq.org/) (Python) или [RabbitMQ](http://www.rabbitmq.com/).

## Не удается пройти проверку подлинности однорангового сертификата с помощью заданных сертификатов ЦС

Эта ошибка означает, что возникла проблема, связанная с сертификатами сервера. Наиболее распространенными проблемами являются:

* Сервер использует самозаверяющий сертификат.
* Сервер не отправляет полную цепочку сертификатов при установке подключения.

Чтобы диагностировать проблему, можно использовать [тест](https://www.ssllabs.com/ssltest/analyze.html) SSL-сервера из лабораторий SSL. Эта служба может работать только с портом по умолчанию для HTTPS (порт 443) и работать только с серверами, доступными из Интернета.

Вы также можете использовать `openssl` для диагностики проблемы. Для этого запустите `openssl s_client -connect HOST:PORT` терминал. Замените `HOST` именем узла сервера и `PORT` портом. Например, `openssl s_client -connect example.com:443`. Чтобы определить проблемы, найдите `verify error` в выходных данных.

## Недопустимый HTTP-ответ

Ошибка `invalid HTTP response` возникает, когда сервер возвращает состояние 4xx или 5xx в ответ на доставку веб-перехватчика из GitHub.

Необходимо настроить сервер для возврата состояния 2xx. Если сервер возвращает состояние 4xx или 5xx, GitHub записывает доставку как сбой.

## Доставка веб-перехватчиков не упорядочена

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

## Доставка веб-перехватчика не является немедленной

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

## Сбой проверки подписи

Необходимо использовать секрет веб-перехватчика и `X-Hub-Signature-256` заголовок, чтобы убедиться, что доставка веб-перехватчика осуществляется из GitHub. Дополнительные сведения см. в разделе [Проверка доставки веб-перехватчика](/ru/enterprise-server@3.22/webhooks/using-webhooks/validating-webhook-deliveries).

Если вы уверены, что полезные данные находятся из GitHub, но проверка подписи завершается ошибкой:

* Убедитесь, что вы настроили секрет для веб-перехватчика. Заголовок `X-Hub-Signature-256` не будет присутствовать, если вы не настроили секрет для веб-перехватчика. Дополнительные сведения о настройке секрета для веб-перехватчика см. в разделе [Редактирование веб-перехватчиков](/ru/enterprise-server@3.22/webhooks/using-webhooks/editing-webhooks).
* Убедитесь, что используется правильный заголовок. GitHub рекомендует использовать `X-Hub-Signature-256` заголовок, который использует алгоритм HMAC-SHA256. Заголовок `X-Hub-Signature` использует алгоритм HMAC-SHA1 и включается только в устаревшие цели.
* Убедитесь, что используется правильный алгоритм. При использовании заголовка `X-Hub-Signature-256` следует использовать алгоритм HMAC-SHA256.
* Убедитесь, что вы используете правильный секрет веб-перехватчика. Если вы не знаете значение секрета веб-перехватчика, вы можете обновить секрет веб-перехватчика. Дополнительные сведения см. в разделе [Редактирование веб-перехватчиков](/ru/enterprise-server@3.22/webhooks/using-webhooks/editing-webhooks).
* Убедитесь, что полезные данные и заголовки не изменяются перед проверкой. Например, если вы используете прокси-сервер или подсистему балансировки нагрузки, убедитесь, что прокси-сервер или подсистема балансировки нагрузки не изменяет полезные данные или заголовки.
* Если в реализации языка и сервера указана кодировка символов, убедитесь, что полезные данные обрабатываются как символы UTF-8. Полезные данные веб-перехватчика могут содержать символы юникода.