Skip to content

Распространенные ошибки Nginx и их решения

1. Обзор

В этой статье описаны распространенные ошибки и их решения в процессе использования Nginx.

2. Примеры

2.1 Невозможно прочитать свойство 'length' из неопределенного значения

Описание проблемы:

Когда пользователи не хотят раскрывать адрес своего сервера, они обычно используют обратный прокси-сервер Nginx, который используется для сообщения об ошибках запроса, как показано на следующем рисунке:

QQ截图20190929090207.png

Анализ причин:

Эта проблема связана с тем, что FineBI по умолчанию использует порт запроса 48888 (автономный) или 48889 (кластерный), и если номер порта, настроенный в Nginx, не соответствует этому порту, сообщение не может быть перенаправлено на правильный порт запроса, поэтому вам нужно изменить порт запроса сообщения в FineBI, чтобы он соответствовал порту, настроенному в nginx.

Решение:

1) Подключитесь к базе данных FineDB, в таблице базы данных fine_conf_entity добавьте поле (или измените его) WebSocketConfig.requestPort, измените его так, чтобы оно соответствовало порту, настроенному в Nginx. Например, если конфигурация порта в Nginx равна 8089, то мы можем изменить WebSocketConfig.requestPort на 8089, как показано на следующем рисунке:

222

2) Перезапустите FineBI после завершения модификации.

2.2 отказ в разрешении

Описание проблемы:

Кластерная среда, проводная сеть работает нормально, страница входа в беспроводную сеть пуста, но узлы могут нормально входить в систему.

Файл журнала показан ниже:

11.png

Анализ причин:

У Nginx нет разрешения на чтение потока данных.

Решение:

Измените файл nginx.conf, чтобы изменить группу пользователей на root, и откомментируйте его. Как показано на следующем рисунке:

1603095337682109.png

2.3 Протокол https требует наличия SSL

Описание проблемы:

Ошибка при запуске:

nginx:[emerg]Протокол https требует поддержки SSL в /usr/nginx/conf/nginx.conf:39

Анализ причин:

HTTPS настроен в файле nginx.conf, но в Nginx не настроен модуль SSL.

Решение:

Чтобы добавить модуль SSL в Nginx, смотрите раздел Настройка SSL-сертификатов для HTTPS-доступа.

2.4 Отсутствие зависимостей при компиляции Nginx

Описание проблемы:

Ошибка: для модулей SSL требуется библиотека OpenSSL

Как показано на рисунке ниже:

1603096371969177.png

Анализ причин:

Nginx требует три зависимости для компиляции некоторых модулей: PCRE, zlib и OpenSSL.

Решение:

yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel

2.5 Заготовки для платформы доступа к входу Nginx

Описание проблемы:

Платформа доступа к порталу Nginx пуста, а в журналах отображается ошибка записи файла кэша, как показано на следующем рисунке:

13.png

Решение:

Если пользователь, запустивший Nginx, имеет права на чтение/запись в соответствующем каталоге, причиной может быть нехватка дискового пространства, что можно проверить с помощью команды df -h.

Отключите acces.log в nginx.conf, чтобы журнал не становился слишком большим и не занимал все дисковое пространство.

2.6 Кластерные среды/серверы часто работают медленно

Описание проблемы:

Кластерная среда, в которой серверы часто застревают и работают медленно.

Решение:

Из-за нехватки места на диске nginx.conf отключает acces.log, чтобы он не был слишком большим и не занимал все дисковое пространство.

2.7 Потеря порта после настройки Nginx для экстранета

Описание проблемы:

Пользователь создал веб-кластер, и теперь он сопоставлен с экстрасетью. Пользователь может войти на страницу входа, обратившись к URL, но после нажатия на кнопку входа номер сопоставленного порта отсутствует, и он сообщает 404 сразу после перехода.

Анализ причин:

После скачка логина хост меняется, и порт теряется.

Решение:

Nginx изменяет поле host в заголовке (proxy_set_header Host) на адрес фактического внешнего доступа, как показано ниже:

14.png

2.8 Конфигурация Nginx не может получить доступ к статическим ресурсам, таким как CSS и JS

Описание проблемы:

Зайдите на localhost:8080\WebReport\ReportServer, страница пуста, консоль сообщает об ошибке: Failed to load resource: the server responded with a status of 404 (not Found).

16.png

Анализ причин:

Портал Nginx: http: //localhost/reportService/WebReport/decision

Tomcat: http: //ip:port/WebReport/decision

Пользователь находит /reportService в Nginx и передает его в Tomcat для обработки, а внутренний сервер возвращает запрос ресурса без /reportService, что приводит к перенаправлению на путь статического ресурса Nginx и ошибке доступа.

Конфигурация Nginx:

1603098476510572.png

18.png

Решение:

Вариант 1: Уровень Nginx

Перехватить /WebReport/decision, перенаправить на /reportService/WebReport/decision

Необходимо обратить внимание на следующие два момента:

  • rewrite - это 301 редирект, а return - 307 редирект.
  • Если имя_сервера - localhost, а доступ осуществляется через 127.0.0.1, то после перенаправления возникнет ошибка кросс-домена и ошибка ajax.

19.png

Вариант 2: Уровень Tomcat

Создайте виртуальный каталог, чтобы url Tomcat изменился на: http: //ip:port/reportService/WebReport/decision.

конкретная ступенька

(1) Переместите проект из webapp, чтобы избежать двойной загрузки;

(2) Измените tomcat conf/server.xml, docbase - абсолютный путь к проекту.

20.png

(3) Измените файл nginx.conf, удалив косую черту

Примечание: косая черта означает, что запрос направляется после /reportService/.

21.png

2.9 413 (Request Entity Too Large)

Описание проблемы:

Развернут кластер, для балансировки нагрузки используется Nginx. Когда пользователь с правами экспорта глобально экспортирует Excel/Pdf, экспорт не удается, поскольку у пользователя нет привилегий для экспорта. Нажав F12 для проверки внешнего отчета об ошибках, обнаружил, что ошибка: 413 (Request Entity Too Large). Как показано на следующем рисунке:

14.png

Анализ причин:

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

Решение:

Измените ограничение на размер файла в Nginx.

1) Откройте файл конфигурации Nginx nginx.conf, путь к которому обычно выглядит так: %nginx%/nginx.conf

2) Измените значение client_max_body_size в файле, которое соответствует максимальному размеру загрузки, разрешенному Nginx, как показано ниже:

222

Примечание: Роль этого параметра заключается в установке максимально допустимого размера тела клиентского запроса, значение размера определяется в зависимости от бизнес-потребностей настройки.

3) Сохраните и перезапустите Nginx, проблема решена.