nginx 구성 파일을 디버깅하는 가장 좋은 방법은 무엇입니까?


37

아파치에서 nginx로 이식 해야하는 많은 재 작성 규칙이 있습니다.

다시 쓰기 규칙과 "if"조건이 원하는대로 작동하는지 확인할 수 없기 때문에 다소 고통스러운 프로세스입니다.

아파치는 다시 쓰기 모듈을 디버깅했다. nginx를 위해 무엇을 할 수 있습니까?

답변:


37

사용 rewrite_log:

rewrite_log on;

error_log지시문에 디버그 레벨을 설정하십시오.

error_log /var/log/nginx/localhost.error_log notice;

아파치에 너무 가까이;) 난 확실히 nginx를 봐야합니다
올리비에 폰

이것은 재 작성 디버깅 이상으로 사용될 수 있습니다. "재 작성 DEBUG DEBUG break;"를 추가 할 수 있습니다. nginx 설정에서 원하는 곳 어디에서나 언제 방문하는지 확인하십시오. 이 다시 쓰기 행은 로그 될 행을 트리거하는 것 외에는 아무 것도 효과적으로 수행하지 않습니다 ( "DEBUG"위치가 일치하는 경우 "DEBUG"로 대체). 기술적으로 다음과 같은 변수를 출력 할 수도 있습니다 : "rewrite. * $ request break;" 또는. * " '$ http_x_forwarded_for'$ request"break를 다시 쓰십시오. -이로 인해 요청이 실패합니다. access_log에 대한 사용자 정의 로그 형식으로 변수를 추가하는 것이 좋습니다.
커티스 얄롭

14

디버깅 지원을 활성화 한 다음 error_log에서 디버그 레벨을 설정하십시오.

error_log   /var/log/nginx/error.log debug;

이제 로그를 마무리하고 요청을 보낼 수 있습니다. 아마도 당신이 원하는 것보다 더 많은 세부 사항이있을 수 있지만 때로는 생명의 은인이 될 수도 있습니다.

아, 그리고 당신은 위치 컨텍스트에서 적어도 악한 경우에 ...


3
notice디버그 debug와 관련하여 error_level재 작성 하는 것보다 훨씬 낫습니다. SSL과 gzip 세부 사항, 요청 당 50 줄 이상과 같은 많은 하위 레벨 관련 디버그 정보를 건너 뛰기 때문입니다.
Dan Dascalescu

1

디버깅을 위해 로그 및 내장 지원을 사용하는 것이 가장 합리적인 방법입니다. 초기 단계에서 빠른 라우팅 디버깅을 수행하고 브라우저 / 클라이언트를 통해서만 상호 작용하려면 return 4xx "text"를 사용하십시오. 지시어는 적은 노력으로 원하는 답변을 줄 수도 있습니다. 예를 들어

http {
  server {
    listen 80;
    server_name mydomain.net;
    return 404 "mydomain 80 route";
  }

  server {
    listen 80 default_server;
    return 404 "default 80 route";
  }
}

반환 된 웹 페이지의 텍스트는 server요청이 트리거 된 블록 을 알려줍니다 .

도움이 되었기를 바랍니다!
안드레스

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