การกำหนดค่าพร็อกซีย้อนกลับ nginx บางรายการหยุดทำงานวันละครั้ง


12

ฉันมีพร็อกซีย้อนกลับ nginx ซึ่งพร็อกซีร้องขอจากภายนอก amazon ELB ไปยัง ELB ภายใน

ฉันมีแบ็กเอนด์อินสแตนซ์ 6 ที่จัดการการร้องขอ การกำหนดค่าที่เปิดใช้งานไซต์จะมีลักษณะเช่นนี้ แต่มีหมายเลขพอร์ตที่แตกต่างกันและ proxy_pass ทุกอย่างอื่นเหมือนกัน:

server {
    listen 3000;
    location / {
            proxy_pass http://internal-prod732r8-PrivateE-1GJ070M0745TT-348518554.eu-west-1.elb.amazonaws.com:3000;
            include /etc/nginx/proxy.conf;
    }

}

ทุกๆหนึ่งชั่วโมงการกำหนดค่าจะหยุดทำงานทุก ๆ 24 ชั่วโมง ผู้รับมอบฉันทะอื่น ๆ ทั้งหมดทำงานได้ดี หากฉันรีสตาร์ท nginx การกำหนดค่าทั้งหมดจะทำงานอีกครั้ง ไม่มีสิ่งใดใน error.log ไม่มีอะไรแปลกในบันทึกการเข้าถึง syslog หรือ dmesg

สิ่งนี้เป็นที่รู้จักหรือไม่? ฉันทำสิ่งผิดปกติกับการกำหนดค่าพร็อกซีของฉันหรือไม่ มีบันทึกอื่น ๆ ที่ฉันสามารถดูได้หรือไม่



คำตอบ:


22

คำตอบสำหรับคำถามนี้คือบางครั้ง ELB จะเปลี่ยน ip adresses และ nginx แก้ปัญหาชื่อระหว่างการเริ่มต้น

ในการแก้ไขปัญหานี้จะมีเซิร์ฟเวอร์ DNS ใน VPC ของคุณที่ 0.2 เสมอ ดังนั้นถ้า IP ท้องถิ่น CIDR คือ 10.0.0.0/16 เซิร์ฟเวอร์ DNS อยู่ที่ 10.0.0.2

เพิ่มลงในการกำหนดค่า nginx

resolver 10.0.0.2 valid=10s;

proxy_pass จำเป็นต้องได้รับการกำหนดเป็นตัวแปรมิฉะนั้น nginx จะแก้ไขได้เพียงครั้งเดียวเท่านั้น ดังนั้นตามการกำหนดค่าด้านบนนี่เป็นการกำหนดค่าที่ถูกต้อง

server {
    listen 3000;
    location / {
            resolver 10.0.0.2 valid=10s;
            set $backend "http://internal-prod732r8-PrivateE-1GJ070M0745TT-348518554.eu-west-1.elb.amazonaws.com:3000"
            proxy_pass $backend;
            include /etc/nginx/proxy.conf;
    }
}

ไม่มีใครรู้ว่า nginx รุ่นใดรองรับตัวแปรในการตั้งค่า proxy_pass ฉันพยายาม elastic beanstalk (nginx version 1.6.2) และไม่ต้องการยอมรับตัวแปรอย่างไรก็ตามฉันใส่ไว้ในนั้น
Stephen C

ขอบคุณสำหรับสิ่งนี้ขับเราอย่างบ้าคลั่งมาประมาณเดือนแล้ว!
Jim.R

บทความเกี่ยวกับบล็อก nginx นี้สะท้อนการกำหนดค่านี้ซ้ำด้วย nginx.com/blog/dns-service-discovery-nginx-plus
Morgan Christiansson

1

หาก proxy_pass ของคุณไม่ได้ส่งตรงไปยัง URL เดียวอย่างที่แสดงตัวอย่างของคุณ ( http://amazonaws.com ) แต่ให้ไปที่ฟาร์มต้นน้ำพร็อกซีแทนเช่นนี้:

upstream my_upstream {
 server1 127.0.0.1:1337;
 server2 127.0.0.1:1338; 
}
location / {
 proxy_pass         http://my_upstream;
}

จากนั้นคุณจะกังวลน้อยกว่าหนึ่งใน upstreams ที่ล้มเหลวชั่วคราว เพราะพวกเขาทั้งหมดจะทำงานเดียวกัน หากไม่สามารถตอบกลับได้ระบบจะส่งข้อความถัดไปสำหรับการตอบกลับนั้น ความสงบจิตสงบใจ.

Nginx จะข้ามเครื่องที่ล้มเหลวเป็นเวลา x วินาทีโดยอัตโนมัติ จนกว่าคุณจะซ่อมมันหรือจนกว่ามันจะกลับมาเอง ( http://wiki.nginx.org/HttpUpstreamModule )

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


ขอบคุณสำหรับการตอบกลับของคุณ! สิ่งประหลาดคือฉันสามารถทำคำขอไปยังอินสแตนซ์แบ็กเอนด์โดยตรง แต่ไม่ผ่าน nginx หากฉันเพิ่งรีสตาร์ท nginx คำขอจะถูกนำมาใช้อีกครั้ง เนื่องจากสิ่งนี้อยู่ในสภาพแวดล้อมการผลิตแล้วฉันต้องการค้นหาว่าทำไมหนึ่งในการกำหนดค่าดูเหมือนจะ "ไม่โหลด" หรือฉันจะทราบได้อย่างไรว่า nginx ทำอะไรอยู่เบื้องหลัง
user202172

คุณอาจต้องการค้นหาข้อมูลการบันทึก nginx เพิ่มเติม นี่เป็นปัญหาที่มีคนพยายามเช่นคุณเพื่อค้นหาข้อมูลเพิ่มเติมเกี่ยวกับ "ปัญหาที่ไม่สม่ำเสมอ [... ] ฉันกำลังอยู่ใกล้" stackoverflow.com/questions/9914792/ ...... เขาอธิบายวิธีการดึงบันทึกที่เกี่ยวข้องเพิ่มเติม หวังว่ามันจะช่วย
user18099
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.