Як вивести змінну в журнал nginx для налагодження


83

Я тестую nginx і хочу вивести змінні файли журналу. Як я можу це зробити і до якого файлу журналу він піде (доступ чи помилка).

Відповіді:


143

Ви можете надсилати значення змінних nginx через заголовки. Корисно для розвитку.

add_header X-uri "$uri";

і ви побачите у заголовках відповідей браузера:

X-uri:/index.php

Я інколи роблю це під час місцевого розвитку.

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

location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt)$ {
    add_header X-debug-message "A static file was served" always;
    ...
}

location ~ \.php$ {
    add_header X-debug-message "A php file was used" always;
    ...
}

Тому відвідування URL-адреси на зразок http://www.example.com/index.php призведе до запуску останнього заголовка під час відвідування http://www.example.com/img/my-ducky.png запустить попередній заголовок.


29
Зауважте, що add_headerце працюватиме лише на успішних запитах . Документація стверджує, що його можна застосовувати лише до відповідей з кодами 200, 204, 301, 302 або 304. Тому його не можна використовувати для налагодження помилок HTTP.
Джон У. Сміт

31
@JohnWHSmith: Як було відзначено Marat в цій відповіді . З версії 1.7.5 , nginx додав параметр "завжди", до add_headerякого буде повертатися заголовок, незалежно від коду відповіді. Так, наприклад, add_header X-debug-message "A php file was used" always;повинен працювати навіть 500 код помилки.
yuvilio

6
Це зовсім не відповідає на питання. Хлопець хоче увійти до файлу журналу не клієнту.
Avamander

37

Ви можете повернути просту рядок як HTTP-відповідь:

location /
{
    return 200 $document_root;
}

1
Що робити, якщо ви хочете повернути дві величини змінних?
BringBackCommodore64

Перехід до місця негайно відкриє діалогове вікно "Зберегти як" у моєму браузері (перевірено на Opera, Chromium). Ніякої відповіді.
BringBackCommodore64

@ BringBackCommodore64 Додавання тексту / html-заголовка Content-Type може допомогти.
побито

Використовуючи Postman , це працює без додаткових заголовків. Дякую!
aexl

19

Ви можете встановити користувальницький формат журналу доступу за допомогою log_formatдирективи, яка реєструє цікаві вам змінні.


2
дякую, і я здогадуюсь, немає більш простого способу вивести одну змінну самостійно?
lulalala

@lulalala Не те, що я знаю.
mgorven

Можна встановити рівень журналу в директиві error_logдо debugтак що ви можете побачити значення змінних , і що блок, які виконуються. Прикладerror_log file.log debug
Віктор Агілар

1
зауважте, що порожні змінні відображаються як -у журналі, але вони дійсно порожні в коді nginx, ви не повинні перевіряти їх -у будь-який час. Це іноді плутає користувачів.
higuita

6

Інший варіант - включити модуль ехо, коли ви збираєте nginx або встановлюєте OpenResty, який є nginx в комплекті з розширенням (наприклад, echo.)

Тоді ви можете просто посипати конфігурацію такими твердженнями, як:

echo "args: $args"

2
Коли я це спробую, це перегукується на звичайний текстовий файл на сервері, що перериває вихід фактичної сторінки.
JaredMcAteer

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