nginx: सभी हेडर के साथ पूर्ण अनुरोध / प्रतिक्रिया लॉग करें?


44

हमारे पास एक एप्लिकेशन सर्वर है जो कभी-कभी हैंग होता है। हमें संदेह है कि यह एक ग्राहक के खराब अनुरोध के कारण है।

क्या nginx फ़ाइलों के लिए पूर्ण अनुरोध / प्रतिक्रिया (जैसे फ़िडलर कैप्चर) को लॉग कर सकता है, इसलिए हम उन अनुरोधों को देख सकते हैं जो हैंग होने से पहले भेजे गए थे?

(हमें संभवतः pcap और उस दृष्टिकोण से बचने और nginx में यह सब करने की आवश्यकता है)

यदि nginx इसके लिए सही उपकरण नहीं है, तो (नेटवर्क विश्लेषक के अलावा) क्या हो सकता है?


1
रिवर्स प्रॉक्सी मोड में मितप्रोक्सी को वही करना चाहिए जो आप ढूंढ रहे हैं।
विवेक थॉमस

@VivekThomas यह एक nginx सवाल है .... हम पहले से ही nginx का उपयोग कर रहे हैं और बदलने वाले नहीं हैं।
संस्मिथ

3
@samsmith पुराना सवाल है, लेकिन शायद यह किसी और की मदद करता है: आपको नगनेक्स छोड़ना नहीं है। परिस्थितियों के आधार पर, आप केवल अस्थायी रूप से किसी अन्य पोर्ट पर nginx को पुन: रूट कर सकते हैं, जिससे माइटप्रॉक्सी को यातायात को बाधित करने और डीबगिंग का समर्थन करने की अनुमति मिलती है। फिर, एक बार पूरा होने पर, आप बस nginx को मूल पोर्ट पर फिर से रूट कर सकते हैं और माइट्रॉक्सी को बंद कर सकते हैं।
प्रति लंडबर्ग

1
आप modsecurity मॉड्यूल का उपयोग कर सकते हैं, जो पूर्ण अनुरोधों / प्रतिक्रियाओं को लॉग इन कर सकते हैं, nginx.com/blog/modsecurity-log-and-debugging
Willem

जवाबों:


44

आगंतुकों द्वारा भेजे गए अनुरोध निकाय को प्राप्त करने के लिए, लॉग में लॉग फॉर्मेट client_body_in_file_only on;में लॉग करके लिखी गई "अस्थायी" फ़ाइल का उपयोग करें और लॉग करें $request_body_file। "अस्थाई" फाइलें डिफ़ॉल्ट रूप से client_temp निर्देशिका में स्थित होंगी।

आप अनुरोध हेडर $http_<header>भी लॉग इन कर सकते हैं और हेडर साथ भेज सकते हैं $sent_http_<header>

यदि आपके पास शरीर और हेडर का अनुरोध है, तो आपको इसे फिर से खेलना चाहिए और आपके आगंतुक को जो प्रतिक्रिया मिलनी चाहिए वह प्राप्त होगी।

इसके अलावा गोर जैसी किसी चीज पर अत्यधिक विचार किया जाना चाहिए ताकि आप किसी अन्य वातावरण पर ट्रैफिक को फिर से चला सकें जहां आप nginx को उत्पादन में IO मुद्दों को पैदा किए बिना इन अस्थायी फ़ाइलों को लिखने दे सकते हैं (nginx उन्हें onमूल्य के साथ शुद्ध नहीं करेगा इसलिए यह "अस्थायी" नहीं है इस मामले में)।


1
@jwadsack उत्तर को ध्यान से पढ़ें।
ज़ेवियर लुकास

4
@XavierLucas मुझे लगा कि आप दो अलग दृष्टिकोण प्रदान कर रहे हैं। मुझे महसूस नहीं हुआ कि आप दोनों कह रहे हैंclient_body_in_file_only और $http_<header>इसकी आवश्यकता होगी। अब मुझे वह मिल गया
ज्यूडसैक

5
क्या आप कृपया अधिक सटीक कोड साझा कर सकते हैं?
वेलकन

3
निश्चित रूप से $ http <हैडर> केवल तभी उपयोगी है जब आप सभी हेडर नामों को पहले से जानते हैं
एड रैंडल

2
क्या कोई नगीनस विन्यास का वास्तविक अंश साझा कर सकता है, कृपया?
नाऊकर

17

mitmproxy जो आप पूछ रहे हैं वह करने के लिए सही उपकरण है।

mitmproxy एक इंटरेक्टिव, एसएसएल-सक्षम मैन-इन-द-मिडिल प्रॉक्सी HTTP के लिए कंसोल इंटरफ़ेस के साथ है।

mitmdump mitmproxy का कमांड-लाइन संस्करण है। HTTP के लिए tcpdump पर विचार करें।

विशेषताएं

  • HTTP अनुरोधों और प्रतिक्रियाओं को इंटरसेप्ट करें और उन्हें मक्खी पर संशोधित करें।
  • बाद में फिर से खेलना और विश्लेषण के लिए पूर्ण HTTP वार्तालाप सहेजें।
  • HTTP वार्तालाप के क्लाइंट-साइड को फिर से चलाएँ। पहले से रिकॉर्ड किए गए सर्वर की HTTP प्रतिक्रियाओं को फिर से खेलना।
  • किसी निर्दिष्ट सर्वर पर ट्रैफ़िक अग्रेषित करने के लिए प्रॉक्सी मोड रिवर्स करें।
  • OSX और Linux पर पारदर्शी प्रॉक्सी मोड।
  • पायथन का उपयोग करके HTTP ट्रैफ़िक में स्क्रिप्टेड परिवर्तन करें।
  • अवरोधन के लिए एसएसएल प्रमाणपत्र मक्खी पर उत्पन्न होते हैं।

रिवर्स प्रॉक्सी मोड आपको फ़िडलर की तरह अनुरोध और प्रतिक्रिया पर कब्जा करने देगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.