Score:4

โหลดบาลานซ์ NGINX: ชื่อ ssl อัปสตรีม

ธง tr

ฉันมีการกำหนดค่า Nginx ต่อไปนี้เพื่อปรับสมดุลการโหลดระหว่างโหนดต่างๆ อย่างไรก็ตาม เมื่อฉันพยายามเปลี่ยนเส้นทางการรับส่งข้อมูลที่ได้รับ 502 เกตเวย์ไม่ถูกต้อง.

จากการอ่านบันทึกข้อผิดพลาด ฉันพบว่าปัญหาเกี่ยวข้องกับความจริงที่ว่าตัวจัดสรรภาระงาน Nginx ของฉันพยายามตรวจสอบความถูกต้องของใบรับรอง X509 ไม่ สำหรับโหนดต่างๆ (backend1.example.com,backend2.example.com) แต่สำหรับชื่อต้นน้ำ แบ็กเอนด์.example.com (ไม่มีหมายเลข)ซึ่งนำไปสู่ข้อผิดพลาดที่แสดงด้านล่าง

ฉันจะบอก nginx ให้ใช้ชื่อโฮสต์ของโหนดที่ส่งต่อ แทนที่จะเป็นโหนดอัปสตรีมได้อย่างไร

บันทึกข้อผิดพลาด:

ใบรับรอง SSL อัปสตรีมไม่ตรงกับ "backend.example.com" ในขณะที่ SSL จับมือกับอัปสตรีม...

การกำหนดค่า:

ต้นทาง backend.example.com {
   little_conn;
   แบ็กเอนด์เซิร์ฟเวอร์ 1.example.com:443
   แบ็กเอนด์เซิร์ฟเวอร์ 2.example.com:443
}
เซิร์ฟเวอร์ {

        ฟัง [::]:443 ssl ipv6only=เปิด;
        ฟัง 443 ssl;
        server_name example.com;

        ที่ตั้ง / {
                proxy_pass https://backend.example.com;

                proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
                เปิด proxy_ssl_session_reuse;
                เปิด proxy_ssl_verify;
                proxy_ssl_verify_ความลึก 2;
                proxy_set_header โฮสต์ $host;
        }
    ssl_certificate /etc/letsencrypt/.../fullchain.pem; # จัดการโดย Certbot
    ssl_certificate_key /etc/letsencrypt/.../privkey.pem; # จัดการโดย Certbot
    รวม /etc/letsencrypt/options-ssl-nginx.conf; # จัดการโดย Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # จัดการโดย Certbot

}
Score:3
ธง in

คำสั่ง ngx_http_proxy_module ที่คุณต้องการคือ proxy_ssl_name

คุณสามารถแก้ไขปัญหานั้นได้หลายวิธี:

  1. ลองตั้งค่าดูครับ proxy_ssl_name $proxy_host;

  2. ใช้ใบรับรอง ssl wildcard

  3. หากในเครือข่ายภายในใช้การเชื่อมต่อ http สำหรับอัปสตรีมโดยไม่มีการเข้ารหัสซ้ำซ้อนมากเกินไป และอนุญาตให้เชื่อมต่อ http ที่ฝั่งอัปสตรีมจากพร็อกซีเซิร์ฟเวอร์ย้อนกลับของคุณเท่านั้น

  4. วางใบรับรองอัปสตรีมเดียวกันในแต่ละโหนดและตั้งค่าเป็นชื่อที่ต้องการ proxy_ssl_name backend.example.com;

AndreaCostanzo1 avatar
tr flag
1. ใช้งานไม่ได้เนื่องจากตั้งค่า `backend.example.com` 3. เครือข่ายไม่เป็นส่วนตัว นี่คือเหตุผลหลักสำหรับการเข้ารหัสระหว่าง lb และโหนดส่วนหลัง คุณช่วยอธิบายวิธีจัดการกับ Wildcard Certificate ได้ไหม (ฉันต้องสร้างหนึ่งรายการแล้วคัดลอกบนโหนดส่วนหลังทุกโหนด สามารถทำได้ผ่าน certbot โดยตรงหรือไม่)
in flag
ลองเปลี่ยนชื่อแบ็กเอนด์อัปสตรีมจากชื่อ FQDN เป็นเพียง "แบ็กเอนด์" เป็นต้น `proxy_ssl_name $proxy_host; แบ็กเอนด์ proxy_pass; เปิด proxy_ssl; proxy_ssl_verify บน;`
in flag
ได้ คุณสามารถออกใบรับรอง wild card ได้โดยตรงกับ certbot แต่ต้องมีการตรวจสอบเพิ่มเติม เช่น cloud flare dns ถ้าคุณใช้ ลอง[บทความ](https://idolsgate.com/blog/wildcard-SSL-certificate-with- ให้เข้ารหัสบน Centos-7/) มันใช้งานได้สำหรับฉัน
AndreaCostanzo1 avatar
tr flag
การเปลี่ยนชื่อไม่ทำงาน ฉันคิดว่าโซลูชันเดียวที่มีอยู่ยังคงใช้ใบรับรอง SSL ที่ใช้ร่วมกัน
Score:1
ธง jp

ตาม จิงซ์ นักพัฒนาที่คุณจำเป็นต้องแบ่งปันใบรับรอง TLS เดียวกันระหว่างเซิร์ฟเวอร์ส่วนหลังทั้งหมด ดูรายงานข้อบกพร่องต่อไปนี้ https://trac.nginx.org/nginx/ticket/1307#comment:5

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา