Как я могу отладить nginx далее, чем журнал ошибок?

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

RewriteRule ^(.*)$ http://site.eu/$1 [R=301,L]
34
задан 28 September 2012 в 19:57
4 ответа

Я предполагаю, что вы уже подняли уровень ведения журнала ошибок Nginx до отладки. Если нет, начните с этого места.

Лучше всего, вероятно, будет использовать strace для просмотра системных вызовов, выполняемых Nginx. В частности, вам нужно обратить внимание на вызовы connect () и следить за их кодами возврата (здесь вам может быть man 2 connect ).

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

19
ответ дан 28 November 2019 в 19:52

Ничего более педантичного, чем это, если только вы не хотите использовать датчики dtrace:

  1. Установите уровень журнала отладки: /etc/nginx/nginx.conf:

    . ..
    http {
     ...
    error_log /var/log/nginx/error.log отладка; # todo testing удалите меня не для производственного использования
     ...
    }
    
  2. Настройте tcpdump в другом окне:

     tcpdump не порт 22 -vvv -s0 -q -XXX
    
  3. Отслеживайте файлы журнала в еще одном окне:

     tail -f / var / log / nginx / *
    
  4. Интерактивный запуск nginx с помощью strace:

     # вверху /etc/nginx/nginx.conf:
    
    демон выключен; # todo testing удалите меня не для производственного использования
    

    А затем

      $ strace nginx 
    

Дальнейшую отладку можно выполнить с помощью nginx, скомпилированного с помощью - with-debug . Проверьте это, запустив:

    nginx -V 2>&1 | grep -- '--with-debug' # no output if not debug

Еще один хороший модуль, не скомпилированный по умолчанию: HttpStubStatusModule . Скорее всего, для любой достойной установки потребуется скомпилированный nginx (настоятельно рекомендуется упаковывать с использованием инструментов упаковки дистрибутива).

Большинство из них непригодны для производственного использования, посмотрите на компиляцию nginx с gperf, если вам нужна дополнительная статистика.

37
ответ дан 28 November 2019 в 19:52

Похоже, вы отлаживаете сайт с высоким трафиком.

Используйте debug с debug_connection , чтобы журнал ошибок nginx отображал журналы отладки только с вашего IP-адреса.

Как только вы начнете видеть некоторые полезные журналы ошибок вместо активации опции отладки для всей конфигурации nginx, добавьте отдельную директиву error_log / path / to / some / file / debug; в location {. .} блок, отвечающий за соединение reverse_proxy.

Таким образом, вы сможете изолировать журнал ошибок отладки только от вашего IP.

Попробуйте связать его с запросом, который вы делаете (из вашего браузера).

Например, проверьте: https://easyengine.io/tutorials/nginx/debugging/

На следующий уровень вы можете использовать Nginx HttpEchoModule

5
ответ дан 28 November 2019 в 19:52

Я никогда не считал Nginx узким местом, в большинстве случаев он более чем способен, чем серверные части. Но если вы тестировали без Nginx и не обнаружили ошибок, то это будет либо (или оба):

  1. Проблема с конфигурацией Nginx
    1. Неверное значение тайм-аута восходящего потока
    2. Неверный URL-адрес зонда в восходящем направлении
    3. Слишком мало рабочих
    4. И т. Д.
  2. Узкое место TCP / IP в операционной системе
    1. Возможно, проксирование само по себе вызывает дублирование открытых портов и состояний. Будь то файловые дескрипторы, порты, TCP-соединения

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

2
ответ дан 28 November 2019 в 19:52

Теги

Похожие вопросы