Як я можу налагоджувати nginx далі, ніж журнал помилок?


34

В даний час я отримую досить велику потоку HTTP, і це призводить до того, що мій зворотний проксі-сервер nginx виробляє 502 Bad Gateway.

У мене frontend-сервер, який працює nginx як проксі-сервер мого сервера, але це просто connect() failed (110: Connection timed out) while connecting to upstreamпомилка. Тон їх. Якщо я обійду проксі-сервер для підключення до бекенда, я можу запустити сайт просто чудово, тому я знаю, що він знаходиться десь у зворотному проксі. Однак я не маю уявлення, як визначити, чому це час закінчується.

Будь-яка допомога?

працює nginx 1.2.3 на CentOS 6.2


Ви можете почати, оновивши Nginx до останньої версії. Хоча я не знаю такої помилки в 1.2.3
Бен Лессані - Сонассі

2
.... а потім подивіться на те, що ВІДМОВАЄ ВІДМОВЛЕННЯ В NGINX
symcbean

Який ваш сервер резервного сервера? Мене раніше бентежили помилки, коли помилка, яку Nginx обслуговувала, насправді виходила з бекенда. Тут не схоже на випадок, але вам потрібно оновити своє запитання більш детально.
jeffatrackaid

Також ви підключаєтесь через приватну / публічну мережу до бекенда? Чи є IP-адреси проксі-серверів дозволеними в будь-яких брандмауерах, ddos ​​або інших інструментах типу ip / rate-limititing? Як виглядає netstat на сервері сервера? Скільки відкритих підключень? Що таке MaxClients на бекенді? Ви їх виснажуєте?
jeffatrackaid

Відповіді:


19

Я припускаю, що ви вже підключили рівень реєстрації помилок Nginx до налагодження. Якщо ні, починайте там.

Ваша найкраща ставка, ймовірно, буде використана straceдля перегляду системних дзвінків, які здійснює Nginx. Зокрема, ви хочете звернути увагу на connect()дзвінки та стежити за поверненнями цих кодів (тут man 2 connectможете бути вашим другом).

Отримавши цю інформацію, ви зможете краще зрозуміти, чи проблема обмежується вашим проксі-сервером frontend, чи має щось спільне з взаємодією між проксі-сервером та сервером додатка.


37

Це не стає набагато педантичнішим, ніж це, якщо ви не хочете поставити зонди dtrace:

  1. Встановити рівень журналу налагодження: /etc/nginx/nginx.conf:

    ...
    http {
            ...
            error_log /var/log/nginx/error.log debug; # todo testing remove me not for production use
            ...
    }
    
  2. Налаштування tcpdump в іншому вікні:

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

    tail -f /var/log/nginx/*
    
  4. Запуск nginx інтерактивно з strace:

    # top of /etc/nginx/nginx.conf:
    
    daemon off; # todo testing remove me not for production use
    

    І потім

     $ strace nginx 
    

Подальше налагодження може бути здійснено із nginx, складеного з --with-debug. Перевірте це, запустивши:

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

Ще один хороший модуль, який не компілюється за замовчуванням, це: HttpStubStatusModule . Ймовірно, для будь-якого пристойного налаштування потрібен буде створений на замовлення nginx (настійно рекомендую упаковку за допомогою пакувальних інструментів distro).

Більшість з них непридатні для використання у виробництві. Подивіться на компіляцію nginx з gperf, якщо вам потрібно більше статистики.


на кроці 2 для мене працює наступне: tcpdump -i будь-який не порт 22 -vvv -s0 -q -XXX
ccppjava

5

Схоже, ви налагоджуєте сайт із високим трафіком.

Використовуйте debugз debug_connectionдирективою, щоб журнал помилок nginx відображав журнали налагодження лише з вашого IP-адреси.

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

Таким чином ви зможете ізолювати журнал помилок налагодження лише від вашого IP-адреси.

Спробуйте пов’язати це із запитом, який ви робите (зі свого браузера).

Наприклад, перевірте: https://easyengine.io/tutorials/nginx/debugging/

Попереду, ви можете використовувати HttpEchoModule Nginx


2

Я ніколи не виявив, що Nginx є вузьким місцем, в більшості випадків він більш ніж здатний, ніж задній край. Але якщо ви протестували без Nginx і не виявили помилок, то його буде або (або обидва):

  1. Проблема конфігурації Nginx
    1. Помилка значення вихідного тайм-ауту
    2. Неправильна URL-адреса зонда вгору за течією
    3. Занадто мало працівників
    4. І т.д.
  2. Вузьке місце TCP / IP операційної системи
    1. Можливо, саме з'єднання викликає дублювання відкритих портів і станів. Будь це дескриптори файлів, порти, з'єднання TCP

Не бачачи ваших конфігурацій Nginx, ніхто не може коментувати перший. І без відповідних виходів з ОС ніхто не може коментувати останні.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.