nginxxy_pass अंततः GATEWAY_TIMEOUT देता है भले ही सर्वर अभी भी सक्रिय है


9

मैंने एक nginx प्रॉक्सी पैशाच सेट किया है, जो nginx शुरू में लोड होने पर ठीक काम करता है, लेकिन आखिरकार (शायद एक या दो दिन बाद? इस बिंदु पर भी निश्चित नहीं है) वह स्थान जो एक प्रॉक्सी पैशट्रॉज़ है, केवल एक 504 GATEWAY_TIMEOUTप्रतिक्रिया देता है । अजीब बात यह है कि मैंने कई प्रॉक्सी_पास स्थान निर्धारित किए हैं और यह यादृच्छिक है कि क्या नीचे जाता है और क्या रहता है।

यहाँ nginx config फाइल है:

server {
  listen   80;
  server_name  example.com;
  access_log  /var/log/nginx/access.log;
  error_log  /var/log/nginx/error.log;
  root   /srv/www/frontend/current/;

  location / {
    try_files $uri $uri/ /index.html;
  }

  # Block all svn access
  if ($request_uri ~* ^.*\.svn.*$) {
     return 404;
  }

  # Block all git access
  if ($request_uri ~* ^.*\.git.*$) {
     return 404;
  }

  location /nginx_status {
    stub_status on;
    access_log off;
    allow 127.0.0.1;
    deny all;
  }

  location /api/karma/ {
    proxy_pass <server A>;
  }

  location /api/auth/ {
    proxy_pass <server B>;
  }

  location /api/search/ {
    proxy_pass <server C>;
  }

  location /api/history/ {
    proxy_pass <server D>;
  }
}

(मैंने स्पष्ट रूप से सर्वर स्थानों को अज्ञात किया है)

इसलिए, उदाहरण के लिए, जब नग्नेक्स शुरू में शुरू होता है, तो मैं कर सकता हूं

curl -i example.com/api/history/health_check

(जहां health_check एक ज्ञात अंतिम बिंदु है) और 200 प्रतिसाद प्राप्त करें, लेकिन थोड़ी देर बाद, वही सटीक आदेश 504 GATEWAY_TIMEOUT देता है।

अंतर्निहित सर्वर और http सर्वर अभी भी पूरी तरह से चालू हैं और मैं सर्वर के पते के खिलाफ सीधे कर्ल कमांड कर सकता हूं और अपने स्थानीय मशीन से प्रतिक्रियाएं प्राप्त कर सकता हूं और जब nginx सर्वर में sshed किया जाता है।

GATEWAY_TIMEOUT को लौटाने वाला स्थान उपसर्ग रैंडम है, और जब से इसे सेटअप किया गया है, उन चार स्थानों में से प्रत्येक में प्रॉक्सी_पास एक या दूसरे बिंदु पर इस फैशन में विफल रहा है।

सब कुछ AWS t2_micro Ubuntu 14.04 लिनक्स इंस्टेंस पर होस्ट किया गया है और nginx स्वयं v1.4.6 है। अंतर्निहित सर्वर / एप्लिकेशन को पुनरारंभ नहीं किया जा रहा है, और AWS उदाहरण स्वयं पूरे समय के रूप में अच्छी तरह से कर रहे हैं। अंतर्निहित http सर्वर गो एप्लिकेशन हैं, लेकिन फिर, जब मुझे ये GATEWAY_TIMEOUTs मिलना शुरू होता है, तो एप्लिकेशन स्वयं पूर्ण रूप से चालू हो जाते हैं।

ऐसा होने पर त्रुटि लॉग में कुछ भी दिलचस्प नहीं था, लेकिन मैंने अभी त्रुटि लॉग पर डीबग लॉगिंग चालू किया है, और यहां एक टूटे हुए अनुरोध के लिए क्या है:

2015/07/13 19:56:31 [debug] 3523#0: *12096 post event 00000000022542A0
2015/07/13 19:56:31 [debug] 3523#0: *12096 delete posted event 00000000022542A0
2015/07/13 19:56:31 [debug] 3523#0: *12096 http wait request handler
2015/07/13 19:56:31 [debug] 3523#0: *12096 posix_memalign: 000000000222F6A0:256 @16
2015/07/13 19:56:31 [debug] 3523#0: *12096 malloc: 0000000002225CA0:1024
2015/07/13 19:56:31 [debug] 3523#0: *12096 recv: fd:23 1018 of 1024
2015/07/13 19:56:31 [debug] 3523#0: *12096 reusable connection: 0
2015/07/13 19:56:31 [debug] 3523#0: *12096 posix_memalign: 00000000022260B0:4096 @16
2015/07/13 19:56:31 [debug] 3523#0: *12096 http process request line
2015/07/13 19:56:31 [debug] 3523#0: *12096 http request line: "POST <url> HTTP/1.1"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http uri: "<url>"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http args: ""
2015/07/13 19:56:31 [debug] 3523#0: *12096 http exten: ""
2015/07/13 19:56:31 [debug] 3523#0: *12096 http process request header line
2015/07/13 19:56:31 [debug] 3523#0: *12096 http header: "host: <url>"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http header: "Accept: application/json, text/plain, */*"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http header: "Accept-Encoding: gzip, deflate"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http header: "Accept-Language: en-US,en;q=0.8"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http header: "Authorization: <auth token>"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http header: "Content-Type: application/json;charset=UTF-8"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http header: "Origin: <url>"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http header: "Referer: <url>"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http header: "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http header: "X-Forwarded-For: <ip address>"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http header: "X-Forwarded-Port: 443"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http header: "X-Forwarded-Proto: https"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http header: "Content-Length: 209"
2015/07/13 19:56:31 [debug] 3523#0: *12096 posix_memalign: 00000000022270C0:4096 @16
2015/07/13 19:56:31 [debug] 3523#0: *12096 http header: "Connection: keep-alive"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http header done
2015/07/13 19:56:31 [debug] 3523#0: *12096 event timer del: 23: 1436817428740
2015/07/13 19:56:31 [debug] 3523#0: *12096 generic phase: 0
2015/07/13 19:56:31 [debug] 3523#0: *12096 rewrite phase: 1

** snip ( bunch of logs about trying to match the url to a route )

2015/07/13 19:56:31 [debug] 3523#0: *12096 http cl:209 max:4194304
2015/07/13 19:56:31 [debug] 3523#0: *12096 rewrite phase: 3
2015/07/13 19:56:31 [debug] 3523#0: *12096 post rewrite phase: 4
2015/07/13 19:56:31 [debug] 3523#0: *12096 generic phase: 5
2015/07/13 19:56:31 [debug] 3523#0: *12096 generic phase: 6
2015/07/13 19:56:31 [debug] 3523#0: *12096 generic phase: 7
2015/07/13 19:56:31 [debug] 3523#0: *12096 access phase: 8
2015/07/13 19:56:31 [debug] 3523#0: *12096 access phase: 9
2015/07/13 19:56:31 [debug] 3523#0: *12096 post access phase: 10
2015/07/13 19:56:31 [debug] 3523#0: *12096 try files phase: 11
2015/07/13 19:56:31 [debug] 3523#0: *12096 http client request body preread 209
2015/07/13 19:56:31 [debug] 3523#0: *12096 http request body content length filter
2015/07/13 19:56:31 [debug] 3523#0: *12096 http body new buf t:1 f:0 0000000002225FC9, pos 0000000002225FC9, size: 209 file: 0, size: 0
2015/07/13 19:56:31 [debug] 3523#0: *12096 http init upstream, client timer: 0
2015/07/13 19:56:31 [debug] 3523#0: *12096 epoll add event: fd:23 op:3 ev:80000005
2015/07/13 19:56:31 [debug] 3523#0: *12096 http script copy: "Host: "
2015/07/13 19:56:31 [debug] 3523#0: *12096 http script var: "<aws url>"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http script copy: "
"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http script copy: "Connection: close
"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http script copy: "Content-Length: "
2015/07/13 19:56:31 [debug] 3523#0: *12096 http script var: "209"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http script copy: "
"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http proxy header: "Accept: application/json, text/plain, */*"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http proxy header: "Accept-Encoding: gzip, deflate"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http proxy header: "Accept-Language: en-US,en;q=0.8"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http proxy header: "Authorization: <auth>"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http proxy header: "Content-Type: application/json;charset=UTF-8"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http proxy header: "Origin: <url>"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http proxy header: "Referer: <url>"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http proxy header: "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http proxy header: "X-Forwarded-For: 96.45.202.230"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http proxy header: "X-Forwarded-Port: 443"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http proxy header: "X-Forwarded-Proto: https"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http proxy header:
"POST /v1/trip HTTP/1.0
Host: <url>
Connection: close
Content-Length: 209
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8
Authorization: <auth>
Content-Type: application/json;charset=UTF-8
Origin: <url>
Referer: <url>
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36
X-Forwarded-For: 96.45.202.230
X-Forwarded-Port: 443
X-Forwarded-Proto: https

"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http cleanup add: 0000000002227C40
2015/07/13 19:56:31 [debug] 3523#0: *12096 get rr peer, try: 2
2015/07/13 19:56:31 [debug] 3523#0: *12096 get rr peer, current: 1 0
2015/07/13 19:56:31 [debug] 3523#0: *12096 socket 24
2015/07/13 19:56:31 [debug] 3523#0: *12096 epoll add connection: fd:24 ev:80000005
2015/07/13 19:56:31 [debug] 3523#0: *12096 connect to 54.174.36.245:80, fd:24 #12097
2015/07/13 19:56:31 [debug] 3523#0: *12096 http upstream connect: -2
2015/07/13 19:56:31 [debug] 3523#0: *12096 posix_memalign: 000000000222F7B0:128 @16
2015/07/13 19:56:31 [debug] 3523#0: *12096 event timer add: 24: 60000:1436817451902
2015/07/13 19:56:31 [debug] 3523#0: *12096 http finalize request: -4, "<url>" a:1, c:2
2015/07/13 19:56:31 [debug] 3523#0: *12096 http request count:2 blk:0
2015/07/13 19:56:31 [debug] 3523#0: *12096 post event 000000000226E2B0
2015/07/13 19:56:31 [debug] 3523#0: *12096 delete posted event 000000000226E2B0
2015/07/13 19:56:31 [debug] 3523#0: *12096 http run request: "<url>"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http upstream check client, write event:1, "<url>"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http upstream recv(): -1 (11: Resource temporarily unavailable)
2015/07/13 19:56:31 [debug] 3523#0: post event 0000000002253E90
2015/07/13 19:56:31 [debug] 3523#0: delete posted event 0000000002253E90
2015/07/13 19:56:31 [debug] 3523#0: accept on 0.0.0.0:80, ready: 0
2015/07/13 19:56:31 [debug] 3523#0: posix_memalign: 000000000222F840:256 @16
2015/07/13 19:56:31 [debug] 3523#0: *12098 accept: 172.31.15.160 fd:25
2015/07/13 19:56:31 [debug] 3523#0: *12098 event timer add: 25: 60000:1436817451902
2015/07/13 19:56:31 [debug] 3523#0: *12098 reusable connection: 1
2015/07/13 19:56:31 [debug] 3523#0: *12098 epoll add event: fd:25 op:1 ev:80000001
2015/07/13 19:56:31 [debug] 3523#0: post event 0000000002253E90
2015/07/13 19:56:31 [debug] 3523#0: delete posted event 0000000002253E90
2015/07/13 19:56:31 [debug] 3523#0: accept on 0.0.0.0:80, ready: 0
2015/07/13 19:56:31 [debug] 3523#0: posix_memalign: 000000000222F950:256 @16
2015/07/13 19:56:31 [debug] 3523#0: *12099 accept: 172.31.15.160 fd:26
2015/07/13 19:56:31 [debug] 3523#0: *12099 event timer add: 26: 60000:1436817451902
2015/07/13 19:56:31 [debug] 3523#0: *12099 reusable connection: 1
2015/07/13 19:56:31 [debug] 3523#0: *12099 epoll add event: fd:26 op:1 ev:80000001
2015/07/13 19:56:31 [debug] 3523#0: *12096 post event 000000000226E040
2015/07/13 19:56:31 [debug] 3523#0: *12096 delete posted event 000000000226E040
2015/07/13 19:56:31 [debug] 3523#0: *12096 http upstream request: "<url>"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http upstream send request handler
2015/07/13 19:56:31 [debug] 3523#0: *12096 http upstream send request
2015/07/13 19:56:31 [debug] 3523#0: *12096 chain writer buf fl:0 s:830
2015/07/13 19:56:31 [debug] 3523#0: *12096 chain writer buf fl:1 s:209
2015/07/13 19:56:31 [debug] 3523#0: *12096 chain writer in: 0000000002227C98
2015/07/13 19:56:31 [debug] 3523#0: *12096 writev: 1039
2015/07/13 19:56:31 [debug] 3523#0: *12096 chain writer out: 0000000000000000
2015/07/13 19:56:31 [debug] 3523#0: *12096 event timer del: 24: 1436817451902
2015/07/13 19:56:31 [debug] 3523#0: *12096 event timer add: 24: 60000:1436817451904
2015/07/13 19:56:31 [debug] 3523#0: *12096 post event 0000000002254030
2015/07/13 19:56:31 [debug] 3523#0: *12096 post event 000000000226E040
2015/07/13 19:56:31 [debug] 3523#0: *12096 delete posted event 000000000226E040
2015/07/13 19:56:31 [debug] 3523#0: *12096 http upstream request: "<url>"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http upstream dummy handler
2015/07/13 19:56:31 [debug] 3523#0: *12096 delete posted event 0000000002254030
2015/07/13 19:56:31 [debug] 3523#0: *12096 http upstream request: "<url>"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http upstream process header
2015/07/13 19:56:31 [debug] 3523#0: *12096 malloc: 00000000022280D0:4096
2015/07/13 19:56:31 [debug] 3523#0: *12096 recv: fd:24 141 of 4096
2015/07/13 19:56:31 [debug] 3523#0: *12096 http proxy status 200 "200 OK"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http proxy header: "Content-Type: text/plain"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http proxy header: "Date: Mon, 13 Jul 2015 19:56:31 GMT"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http proxy header: "Server: nginx/1.6.2"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http proxy header: "Content-Length: 0"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http proxy header: "Connection: Close"
2015/07/13 19:56:31 [debug] 3523#0: *12096 http proxy header done
2015/07/13 19:56:31 [debug] 3523#0: *12096 xslt filter header
2015/07/13 19:56:31 [debug] 3523#0: *12096 HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Date: Mon, 13 Jul 2015 19:56:31 GMT
Content-Type: text/plain
Content-Length: 0
Connection: keep-alive

दिलचस्प लाइन (मेरे लिए) है:

2015/07/13 19:56:31 [debug] 3523#0: *12096 http upstream recv(): -1 (11: Resource temporarily unavailable)

मैंने Google में उस स्ट्रिंग को देखने की कोशिश की, लेकिन सच कहूं तो मुझे वास्तव में उत्तर समझ में नहीं आते हैं और वे उस मुद्दे से संबंधित नहीं लगते हैं जो मैं किसी भी तरह से कर रहा हूं।


nginx नॉन-ब्लॉकिंग I / O का उपयोग करता है। यह त्रुटि जिसका आप उल्लेख कर रहे हैं वह पूरी तरह से सामान्य है, यह बताता है कि इस समय सॉकेट से कुछ भी नहीं पढ़ा जा सकता है।
ओलिवर

जवाबों:


1

बोतल की गर्दन शायद आपके t2_micro फ़ाइल डिस्क्रिप्टर की संख्या में है, लेकिन इसकी एक उच्च संभावना भी है कि यह एक नेटवर्क बैंडविड्थ समस्या है।

बैंडविड्थ को बढ़ाए बिना इस समस्या को ठीक करने के दो सामान्य तरीके हैं: 1) ओपन फाइल्स सिस्टम की सीमा (संख्या) को बढ़ाएं और nginx 2 के लिए / या समाप्त करें) nginx को अपग्रेड करें 1.7.5 या अधिक

यदि बढ़ते फ़ाइल डिस्क्रिप्टर समस्या को हल नहीं करते हैं, तो ध्यान रखें कि t2_micro मूल रूप से एक कम नेटवर्क बैंडविड्थ उत्पाद है। यद्यपि आप 'बेहतर' नेटवर्क प्रदर्शन प्राप्त करने में सक्षम नहीं हो सकते हैं, आप 'अधिक सटीक' प्रॉक्सी प्रतिक्रिया हेल्थ_चेक के लिए कोशिश कर सकते हैं जो t2_micro कमजोरियों को कम करता है, एक दो का उपयोग करता है:

  • बफ़रिंग डिफ़ॉल्ट रूप से चालू है, इसलिए proxy_temp_pathमौजूद डिफ़ॉल्ट पथ की पुष्टि करें और पर्याप्त डिस्क स्थान है, क्योंकि यदि ऐसा नहीं होता है, तो बफ़र किए गए संदेश छिटपुट रूप से रिक्त या छूटे हो सकते हैं और प्रतिक्रिया के इंतजार में टाइमआउट स्थिति बना सकते हैं।
  • एडजस्ट करने के लिए आपको 1.7.5 या इससे अधिक के संस्करण की आवश्यकता होगी proxy_next_upstream_timeoutऔर proxy_next_upstream_triesकम बैंडविड्थ सर्वर पर 'अधिक समझदारी' से नग्नेक्स को प्रॉक्सी अनुरोधों को संभालना होगा। उदाहरण के लिए, आप किसी त्रुटि को पारित करने से पहले कई पुनर्प्रयासों को परिभाषित कर सकते हैं।

अद्यतन: संस्करण 1.7.5 और उच्चतर में एक त्रुटि से पहले प्रॉक्सी की संख्या को कॉन्फ़िगर करने के लिए, इस प्रविष्टि को nginx में जोड़ें।

proxy_next_upstream_tries 3;

यह आपको दो रिट्रीज़ (एक कोशिश, प्लस दो रिट्रीज़) देगा।


ठंडा! दूसरे विकल्प की कोशिश करने जा रहे हैं (नगीनेक्स के नवीनतम स्थिर संस्करण में अपग्रेड करें) और देखें कि क्या होता है। आमतौर पर यह समस्या ट्रिगर होने में एक या दो दिन पहले होती है, इसलिए मैं परिणामों के बाद यहां एक प्रतिक्रिया पोस्ट करूंगा।
सेजदानी

बहुत बढ़िया। 1.7.5 पर अपग्रेड करने से संभवत: समस्या ठीक नहीं होगी। चूंकि डिफ़ॉल्ट प्रॉक्सी_रेट्री 0 है, आपको nginx.conf को संपादित करना होगा और 1 या 2 जैसी संख्या के साथ पैरामीटर जोड़ना होगा। अंगूठे मदद करता है, लेकिन हमेशा ओपी को बताएं कि आपने आखिरकार समस्या को ठीक करने के लिए क्या किया।
एंड्रयू एस

मैंने अपने उत्तर को प्रॉक्सी_नेक्स्ट_अपस्टेम_ट्रीस ऑप्शन के प्रारूप के साथ अपडेट किया
एंड्रयू एस

तो मैं वास्तव में सिर्फ nginx 1.8.0 के लिए उन्नत किया गया है और इसके बारे में एक सप्ताह है कि हम समस्या मुक्त हो गया है। इसका मतलब यह नहीं है कि इसका 100% चला गया, लेकिन अभी मेरे लिए काफी अच्छा है।
सज्जादानशीं

1

इसे nginx.conf में जोड़ें:

proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;

यदि आप सिस्टमड का उपयोग कर रहे हैं तो 'नॅग्नेक्स रीलोड' ('सिस्टेक्टल नॅग्नेक्स रीलोड' करें)

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