melhor maneira de depurar o arquivo de configuração do nginx?


37

Eu tenho várias regras de reescrita que preciso portar do apache para o nginx.

É um processo bastante doloroso, porque não consigo ver se minhas regras de reescrita e as condições "se" estão funcionando como eu quero.

O Apache teve depuração para seu módulo de reescrita. O que posso fazer pelo nginx?

Respostas:


37

Ativar rewrite_log:

rewrite_log on;

e defina o nível de depuração na error_logdiretiva:

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

tão perto do Apache;) Eu definitivamente tenho que dar uma olhada no nginx
Olivier Pons

Observe que isso pode ser usado para mais do que a reescrita de depuração. Você pode adicionar "reescrever quebra DEBUG DEBUG;" em qualquer lugar que você quiser na configuração do nginx e veja quando é atingido. Essa linha de reescrita efetivamente não faz nada (se o local "DEBUG" for correspondido, substitua-o por "DEBUG") além de acionar uma linha a ser registrada. Tecnicamente, você pode até gerar variáveis ​​como esta: "reescreva. * $ Request break;" ou reescreva. * "'$ http_x_forwarded_for' $ request" break; - embora isso faça com que a solicitação falhe. Seria melhor adicionar a variável a um formato de log personalizado para access_log.
Curtis Yallop

14

Habilite o suporte à depuração e defina o nível de depuração em error_log.

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

Agora você pode ajustar o log e enviar suas solicitações. Provavelmente há mais detalhes do que você deseja, mas às vezes isso pode salvar a vida.

Ah, e você deve estar ciente de que, se for mau , em um contexto de local pelo menos ...


3
noticeé muito melhor do debugque a error_levelreescrita para depuração, porque ignorará muitas informações de depuração irrelevantes de baixo nível (por exemplo, detalhes de SSL ou gzip; mais de 50 linhas por solicitação).
Dan Dascalescu

1

Usar logs e suporte interno para depuração é definitivamente a maneira mais razoável. Se você está fazendo alguma depuração de roteamento rápido nos estágios iniciais e deseja interagir apenas pelo navegador / cliente, usando o retorno 4xx "text"; A diretiva também pode fornecer a resposta desejada com muito pouco esforço. Por exemplo,

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

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

O texto na página da web retornada informará qual serverbloco sua solicitação foi acionada.

Espero que isto ajude!
Andres

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.