디버깅을 위해 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;
    ...
}

따라서 http://www.example.com/index.php 와 같은 URL 을 방문하면 후자의 헤더 가 트리거되고 http://www.example.com/img/my-ducky.png 를 방문 하면 이전 헤더가 트리거됩니다.


29
참고 add_header작동 성공한 요청 만에 . 설명서에는 코드 200, 204, 301, 302 또는 304의 응답에만 적용 할 수 있다고 명시되어 있으므로 HTTP 오류를 디버깅하는 데 사용할 수 없습니다.
John WH Smith

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 text / html Content-Type 헤더를 추가하면 도움이 될 수 있습니다.
비트 비트

Postman을 사용하면 추가 헤더없이 작동합니다. 감사!
8

19

log_format관심있는 변수를 기록하는 지시문을 사용하여 사용자 정의 액세스 로그 형식을 설정할 수 있습니다 .


2
덕분에 하나의 변수를 자체적으로 출력하는 더 쉬운 방법이 없다고 생각합니까?
lulalala 님

@lulalala 내가 아는 바는 없습니다.
mgorven

이 지시어의 로그 레벨을 설정 가능 error_log하기 debug때문에 사용자가 변수의 값과 실행되는 블록을 알 수있다. 예error_log file.log debug
Victor Aguilar

1
빈 변수는 -로그와 같이 표시 되지만 nginx 코드에서는 실제로 비어 있으므로 -언제든지 확인하지 마십시오 . 이것은 때때로 사용자를 혼란스럽게합니다.
higuita

6

또 다른 옵션은 nginx를 빌드 할 때 echo 모듈 을 포함 시키 거나 echo와 같은 확장 기능이 번들로 포함 된 nginx 인 OpenResty 를 설치 하는 것입니다.

그런 다음 다음과 같은 명령문으로 구성을 간단히 뿌릴 수 있습니다.

echo "args: $args"

2
이것을 시도하면 실제 페이지의 출력을 방해하는 서버의 일반 텍스트 파일로 에코됩니다.
JaredMcAteer

echo_log개발 지시어.
Gajus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.