nginx: Введіть повний запит / відповідь усіма заголовками?


44

У нас є сервер додатків, який іноді висить. Ми підозрюємо, що це пов’язано з поганим запитом клієнта.

Чи може nginx записувати повний запит / відповідь (як, наприклад, фіддер захоплює) у файли, щоб ми могли бачити запити, надіслані перед затриманням?

(Напевно, нам потрібно уникати pcap та такого підходу та робити все це у nginx)

Якщо nginx не є правильним інструментом для цього, що (крім мережевого аналізатора) може бути?


1
mitmproxy у режимі зворотного проксі повинен робити те, що ви шукаєте.
Вівек Томас

@VivekThomas це питання nginx .... ми вже використовуємо nginx і не збираємось змінювати.
Самсміт

3
@samsmith Старе запитання, але, можливо, це допомагає комусь іншому: вам не доведеться відмовлятися від nginx. Залежно від обставин, ви можете просто перенаправити nginx на інший порт тимчасово, щоб дозволити mitmproxy перехоплювати трафік та підтримувати налагодження. Потім, як тільки закінчите, ви можете просто перенаправити nginx до вихідного порту та mitmproxy відключення.
Пер Лундберг

1
Ви можете використовувати модуль безпеки, який може реєструвати повні запити / відповіді, див. Nginx.com/blog/modsecurity-logging-and-debugging
Віллем

Відповіді:


44

Щоб отримати запит, який надіслали відвідувачі, використовуйте client_body_in_file_only on;та записуйте "тимчасовий" файл, про який він записує, у журналах, додаючи var $request_body_fileдо формату журналу. Тимчасові файли за замовчуванням будуть розміщені в каталозі client_temp.

Ви також можете входити в заголовки запитів $http_<header>і надсилати заголовки за допомогою $sent_http_<header>.

Якщо у вас є тіло запиту та заголовки, ви повинні мати змогу повторити його та отримати відповідь свого відвідувача.

Також слід враховувати щось на зразок gor, щоб ви могли відтворювати трафік в іншому середовищі, де ви могли б дозволити nginx писати ці тимчасові файли, не викликаючи проблем з IO у виробництві (nginx не очистить їх зі onзначенням, тому це не так "тимчасово" в цьому випадку).


1
@jwadsack Уважно прочитайте відповідь.
Ксав'є Лукас

4
@XavierLucas Я думав, ти пропонує два різних підходи. Я не розумів, що ти говориш і те, client_body_in_file_only і $http_<header>потрібно. Я зараз це розумію.
jwadsack

5
Не могли б ви поділитися більш точним кодом?
Велкан

3
Безумовно, $ http <header> корисний лише у тому випадку, якщо ви заздалегідь знаєте всі назви заголовків
Ед Рандалл,

2
Чи може хтось поділитися фактичним фрагментом конфігурації nginx?
Nowaker

17

mitmproxy, здається, є правильним інструментом для того, щоб робити те, що ви просите.

mitmproxy - це інтерактивний, підтримуючий SSL проксі-сервер для HTTP з консольним інтерфейсом.

mitmdump - версія командного рядка mitmproxy. Подумайте tcpdump для HTTP.

Особливості

  • Перехоплюйте HTTP-запити та відповіді та змінюйте їх на ходу.
  • Збережіть цілі HTTP-розмови для подальшого відтворення та аналізу.
  • Відтворіть HTTP-розмови на стороні клієнта. Відтворити відповіді HTTP попередньо записаного сервера.
  • Режим зворотного проксі для переадресації трафіку на вказаний сервер.
  • Прозорий режим проксі для OSX та Linux.
  • Внесіть сценарії зміни в HTTP-трафік за допомогою Python.
  • SSL сертифікати на перехоплення генеруються на льоту.

Режим зворотного проксі-сервера дозволить вам зафіксувати запит і відповідь так само, як це робить Fiddler.

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