Vraag Hoe variabele in nginx log uit te voeren voor foutopsporing


Ik test nginx en wil variabelen uitvoeren naar de logbestanden. Hoe kan ik dat doen en welk logbestand zal het gaan (toegang of fout).


63
2017-07-04 05:29


oorsprong




antwoorden:


U kunt nginx-variabelenwaarden verzenden via headers. Handig voor ontwikkeling.

add_header X-uri "$uri";

en je ziet in de responskoppen van je browser:

X-uri:/index.php

Ik doe dit soms tijdens lokale ontwikkeling.

Het is ook handig om u te vertellen of een subsectie wordt uitgevoerd of niet. Strooi het gewoon in je zinnen om te zien of ze wennen.

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;
    ...
}

Dus een bezoek aan een url zoals http://www.example.com/index.php activeert de laatste header tijdens een bezoek http://www.example.com/img/my-ducky.png zal de voormalige kop activeren.


118
2018-03-08 19:58



Let daar op add_header zal werken alleen op succesvolle aanvragen. Documentatie stelt dat het alleen kan worden toegepast op antwoorden met codes 200, 204, 301, 302 of 304. Daarom kan het niet worden gebruikt om HTTP-fouten te debuggen. - John WH Smith
Ah, dit is geniaal! Bedankt! - L0j1k
@JohnWHSmith: Zoals marat opmerkte in dit antwoord. Vanaf versie 1.7.5, nginx heeft een toegevoegd "altijd" parameter naar add_header die de header zal retourneren, ongeacht de antwoordcode. Dus bijvoorbeeld add_header X-debug-message "A php file was used" always;, zou zelfs voor 500 foutcode moeten werken. - yuvilio
Echte held. Mijn leven gered - Bernardo Vale
Dit beantwoordt de vraag helemaal niet. De man wil inloggen logbestand niet aan de klant. - Avamander


U kunt een eenvoudige reeks als HTTP-antwoord retourneren:

location /
{
    return 200 $document_root;
}

29
2018-02-21 17:39



Wat als u twee variabelenwaarden wilt retourneren? - BringBackCommodore64
Direct naar de locatie wordt het dialoogvenster Opslaan als van mijn browser geopend (getest op Opera, Chromium). Geen enkele reactie. - BringBackCommodore64


U kunt een aangepast toegangslogboekformaat instellen met behulp van de log_format richtlijn die de variabelen registreert waarin u bent geïnteresseerd.


15
2017-07-04 05:35



bedankt, en ik denk dat er geen eenvoudigere manier is om één variabele afzonderlijk uit te voeren? - lulalala
@lulalala Niet dat ik weet. - mgorven
Het is mogelijk om het logniveau in de richtlijn in te stellen error_log naar debug zodat je de waarde van de variabelen en het blok kunt zien die worden uitgevoerd. Voorbeeld error_log file.log debug - Victor Aguilar
merk op dat lege variabelen worden weergegeven als - in het logboek, maar zijn echt leeg in de nginx-code, moet je niet controleren - te allen tijde. Dit kan gebruikers soms verwarren. - higuita


Een andere optie is om op te nemen de echo-module wanneer u nginx bouwt of installeert OpenResty dat is nginx gebundeld met een aantal extensies (zoals echo.)

Vervolgens kunt u uw configuratie eenvoudig bestrooien met uitspraken als:

echo "args: $args"

6
2017-11-21 22:30



Wanneer ik dit probeer, echoot het uit naar een gewoon tekstbestand op de server dat de uitvoer van de eigenlijke pagina onderbreekt. - JaredMcAteer
Er is een echo_log richtlijn in ontwikkeling. - Gajus