2010-11-25 21 views
7

Nous utilisons nginx comme proxy inverse pour contrôler et consigner l'accès à une application de service Web Clojure (Java).nginx: Est-il possible de capturer les en-têtes de réponse dans le journal d'accès lors de l'utilisation de nginx en tant que proxy inverse?

Nous sommes en mesure de générer un access_log et capturer les en-têtes entrants en utilisant nginx très bien. Notre application Clojure enregistre l'activité via log4j. Le problème est, est que nous ne pouvons pas correspondre une entrée dans le access_log à une entrée générée par l'application.

L'application répond à l'accès en envoyant des en-têtes de réponse ainsi qu'un corps. Nous pouvons librement modifier ces en-têtes de réponse. Mon idée initiale était de générer un UUID correspondant à chaque requête de service Web et de le renvoyer à l'utilisateur dans l'en-tête de réponse X-Uuid. Ma pensée était que je pouvais capturer cette réponse en créant une coutume log_format:

log_format lt-custom '$remote_addr - $remote_user [$time_local] ' 
        '"$request" $status $body_bytes_sent ' 
        '"$http_referer" "$http_user_agent" $request_time $http_x_uuid'; 

Il est à la recherche comme nginx peut capturer les en-têtes dans les requêtes entrantes, mais pas les réponses sortantes (je l'ai vérifié ceci en remplaçant $http_x_uuid avec $http_content_type).

Alors! Y at-il un moyen de lier mes access_log enties et mes entrées log4j en capturant les en-têtes de réponse sortants en utilisant nginx? Y a-t-il un meilleur moyen? Je préfère ne pas compter sur les utilisateurs qui génèrent leurs propres UUID.

Merci beaucoup!

Répondre