nginx: ไม่มีสตรีมสดขณะเชื่อมต่อกับอัปสตรีม


15

ข้อผิดพลาดเกตเวย์ไม่ถูกต้อง 502 แสดงเมื่อสลับระหว่างหน้าเว็บไซต์และบางครั้งในหน้าแรก แต่ไม่ใช่สำหรับคำขอแรกในหน้าแรกเป็นเพียงเมื่อมีการเปลี่ยนเส้นทางหน้าอื่นไป และมันเกิดขึ้นสำหรับไฟล์จาวาสคริปต์บางไฟล์

load balancing ถูกกำหนดค่าไว้ใน upstreams สอง php1 php2 ทั้งสองเป็น apache server

เมื่อฉันตรวจสอบบันทึกข้อผิดพลาดที่ฉันชอบ:

no live upstreams while connecting to upstream

[error] 27212#0: *314 no live upstreams while connecting to   upstream, client: ip_address , server: example.com, request: "GET / HTTP/1.1", upstream: "http://example.com", host: "example.com", referrer: "http://example.com/mypages/"

และนี่คือการกำหนดค่าเซิร์ฟเวอร์สมดุลภาระ

  upstream example.com  {
    #  ip_hash;
      server php01 max_fails=3 fail_timeout=15s;
      server php02 max_fails=3 fail_timeout=15s;
    }

    server {
      listen IP:80;
      server_name example.com;
      access_log /var/log/nginx/example.com.access;
      error_log /var/log/nginx/example.com.error error;

     location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass  http://$server_name/$uri;
        proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment;
        proxy_cache_bypass $http_pragma $http_authorization;
        proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
        proxy_no_cache $http_pragma $http_authorization;
      }

    }

ฉันค้นหาเป็นเวลาหลายชั่วโมงและไม่มีประโยชน์ใด ๆ ที่พบว่าสตรีมของฉันอัพและไม่มีปัญหากับพวกเขา


เซิร์ฟเวอร์ upstream ของคุณ (php01, php02) ทำงานหรือไม่ คุณสามารถเทลเน็ตจากเครื่อง ngnix ให้พวกเขาได้ไหม
neutrinus

พวกเขาเชื่อมต่อ
Mohammad Jolani

คุณตรวจสอบแล้วว่าเซิร์ฟเวอร์ upstream มีกระบวนการเพียงพอที่จะรองรับปริมาณข้อมูลหรือไม่ คุณควรตรวจสอบบันทึกของเซิร์ฟเวอร์ upstream หากพวกเขาปฏิเสธคำขอด้วยเหตุผลบางประการ
Tero Kilkanen

ฉันทำและไม่มีปัญหากับบันทึกข้อผิดพลาดอัปสตรีมและไม่มีบันทึกการเข้าถึงสำหรับคำขอเกตเวย์ที่ไม่ดี
Mohammad Jolani

คุณพบวิธีแก้ไขปัญหานี้หรือไม่?
flickerfly

คำตอบ:


4

นี่ไม่ใช่ปัญหากับ Nginx มันเป็นปัญหากับแบ็กเอนด์ PHP ของคุณที่ไม่ตอบสนองในเวลา คุณสามารถเพิ่มการเข้าสู่ระบบเพื่อ Nginx ช่วยยืนยันเรื่องนี้

ในฐานะที่เป็นจุดอ้างอิงที่สองคุณสามารถทำได้topบนเซิร์ฟเวอร์และตรวจสอบด้วยตนเองว่า PHP กำลังใช้งาน CPU เป็นระยะเวลาหนึ่งหรือไม่และเป็นอีกตัวบ่งชี้ของการตอบสนองช้า

หากการตอบกลับช้ามากจาก PHP นั้นใช้ได้กับคุณคุณสามารถขอให้ Nginx รออีกต่อไปก่อนที่จะยอมแพ้:

 # Wait 5 minutes before giving up on the backend!
 proxy_read_timeout 5m; 

ด้วยการตรวจสอบบันทึกที่มีข้อมูลเวลาที่เชื่อมโยงกับข้างต้นคุณควรจะสามารถทราบได้ว่าคำขอใดที่ PHP ดำเนินการช้า

หากต้องการ จำกัด ปัญหาให้ส่งคำขอเหล่านี้ไปยังแบ็กเอนด์ PHP โดยตรง

ขึ้นอยู่กับสิ่งที่เกิดขึ้นคุณอาจสามารถเปิดใช้งานการแคชบางคำขอใน Nginx โดยหลีกเลี่ยงการร้องขอช้าบางอย่าง


0

ไม่ทราบว่ามันเหมือนกันหรือไม่ แต่สิ่งที่ใช้ได้ผลสำหรับฉันคือการเพิ่ม max_fails = 0 ต่อท้ายชื่อเซิร์ฟเวอร์

upstream sm_url {เซิร์ฟเวอร์ LOAD_BALANCER_DOMAIN_NAME: max_fails = 0; }


-3

เปลี่ยนชื่ออัปสตรีมเป็น "up_example.com" และเปลี่ยน

proxy_pass  http://$server_name/$uri;

เป็น

proxy_pass  http://up_$server_name$uri;

$server_nameในขณะที่แหกคอกผมเห็นไม่มีปัญหาทางเทคนิคที่มีการใช้ หากนี่เป็นปัญหาฉันคิดว่าเขาจะมีปัญหา / ตลอดเวลา / ไม่ใช่แค่บางครั้งตามที่รายงาน
Mark Stosberg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.