Как устранить ошибку 503 Service Temporarily Unavailable в nginx при работе с 1С

База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как устранить ошибку 503 Service Temporarily Unavailable в nginx при работе с 1С

Просмотр 1 ветки ответов
  • Автор
    Записи
    • #38822
      Фото аватараOdineski
      Участник

        : <html>
        <head><title>503 Service Temporarily Unavailable</title></head>
        <body>
        <center><h1>503 Service Temporarily Unavailable</h1></center>
        <hr><center>nginx</center>
        </body>
        </html>

      • #38823
        bot_avaOdin — Одинэсник
        Участник

          Ошибка 503 Service Temporarily Unavailable от nginx означает, что nginx не может получить нормальный ответ от backend-сервера. В схеме с 1С backend обычно это:

          — Apache или IIS;
          — публикация 1С;
          — сервер 1С, если публикация работает через веб-сервер;
          — upstream, указанный в конфигурации nginx.

          Сам nginx запущен, но сервис за ним недоступен либо сам вернул ошибку 503.

          ## 1. Сначала посмотрите журнал nginx

          Выполните:

          И отдельно журнал доступа:

          Особенно важны сообщения:

          Это означает, что на указанном порту не запущен Apache, IIS или другой backend.

          Обычно означает ошибку в блоке upstream или недоступность всех серверов из группы.

          Backend отвечает слишком долго. Для 1С это может быть зависшая публикация, проблемы с сервером 1С или слишком маленькие тайм-ауты.

          Backend принял соединение, но закрыл его до формирования ответа.

          Пример команды, чтобы сразу отфильтровать важные ошибки:

          ## 2. Проверьте backend напрямую, минуя nginx

          Допустим, в конфигурации nginx указано:

          Тогда выполните на сервере:

          Для публикации 1С, например:

          Если используется IP другого сервера:

          Результаты трактуются так:

          — Connection refused
          На порту никто не слушает либо доступ запрещен firewall.

          — Connection timed out
          Проблема с сетью, маршрутизацией или firewall.

          — 404 Not Found
          Backend доступен, но указан неправильный путь публикации.

          — 401 Unauthorized или 403 Forbidden
          Backend доступен, но требуется авторизация либо запрещен доступ.

          — 503 Service Unavailable
          Сам backend вернул 503. В этом случае проблему нужно искать не в nginx, а в Apache, IIS, публикации или сервере 1С.

          — HTML страницы 1С или ответ HTTP-сервиса
          Связь между nginx и backend работает, нужно проверять маршрутизацию URL.

          ## 3. Проверьте, слушается ли нужный порт

          Для Apache, например, порт 8080:

          Для порта 80:

          Для HTTPS:

          В нормальном случае будет что-то подобное:

          Если вывода нет, сервис на этом порту не запущен или слушает другой порт.

          Проверьте службы:

          На разных Linux-дистрибутивах Apache называется по-разному:

          или:

          После перезапуска проверьте журнал:

          или:

          ## 4. Проверьте конфигурацию nginx

          Сначала выполните:

          Если проверка успешна:

          перечитайте конфигурацию:

          Посмотрите фактически загруженную конфигурацию:

          Полезно проверить, не используется ли другой конфигурационный файл или другой proxy_pass.

          ## 5. Типовая конфигурация nginx для публикации 1С

          Если Apache слушает 127.0.0.1:8080, а публикация 1С называется mybase, конфигурация может выглядеть так:

          После изменения:

          Обратите внимание на завершающий /:

          Для публикаций 1С лучше явно указывать одинаковый путь в location и proxy_pass. Неправильное сочетание путей может приводить к обращению не к той публикации и появлению ошибок 404 или 503.

          ## 6. Если nginx и Apache находятся на разных серверах

          Проверьте backend с сервера nginx:

          Проверьте доступность порта:

          Если nc не установлен:

          На сервере Apache проверьте, на каком адресе он слушает:

          Если Apache слушает только:

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

          или:

          При этом порт 8080 желательно закрыть от внешнего доступа firewall и разрешить только IP сервера nginx.

          ## 7. Проверьте саму публикацию 1С

          На сервере с Apache выполните запрос непосредственно к публикации:

          Проверьте наличие файла публикации:

          В default.vrd должны быть корректно указаны сервер, имя информационной базы и параметры публикации.

          Пример:

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

          После изменения публикации перезапустите веб-сервер:

          или:

          ## 8. Частая ошибка при использовании proxy_pass

          Неправильный вариант:

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

          Более предсказуемый вариант:

          Если nginx должен проксировать весь backend без изменения URL:

          Если нужно заменить внешний путь /api/ на путь публикации /ut_demo/hs/:

          Например, запрос:

          будет передан backend как:

          ## 9. Проверьте SELinux

          На CentOS, RedOS, AlmaLinux, Rocky Linux причиной блокировки подключения nginx к backend может быть SELinux.

          Проверьте его состояние:

          Если ответ:

          разрешите nginx сетевые подключения:

          Проверьте сообщения SELinux:

          После этого снова проверьте:

          ## 10. Проверьте firewall

          Если backend находится на другом сервере, на нем должен быть разрешен порт, например 8080:

          Разрешить порт только для сервера nginx лучше адресно:

          Где 192.168.1.20 это IP сервера nginx.

          ## Наиболее вероятная причина

          Если после запроса вы видите именно стандартную страницу:

          и в error.log есть:

          то обычно исправление такое:

          1. Узнать backend из proxy_pass.
          2. Проверить его командой curl напрямую.
          3. Запустить Apache или IIS.
          4. Проверить, что публикация 1С действительно слушает указанный порт.
          5. Исправить адрес или порт в proxy_pass.
          6. Выполнить:

          Точный диагноз по одной HTML-странице определить нельзя. Ключевая информация находится в /var/log/nginx/error.log и в результате команды curl к адресу из proxy_pass.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С