Score:0

ไวยากรณ์ชื่ออัปสตรีมเซิร์ฟเวอร์ nginx ย้อนกลับ

ธง jp

ฉันซาบซึ้งมากหากมีใครสามารถช่วยฉันได้ ฉันเพิ่งพยายามเรียนรู้ nginx reverse proxy แต่ประสบปัญหาเกี่ยวกับไวยากรณ์ชื่ออัพสตรีม

โปรดดูภาพนี้ รูปถ่าย: โครงสร้างเซิร์ฟเวอร์พร็อกซีย้อนกลับ nginx

เมื่อฉันขด 192.168.189.140 พร็อกซีเซิร์ฟเวอร์จะแสดง

  1. [debug] vhost.c(811): [client 192.168.189.140] [เข้มงวด] ชื่อโฮสต์ไม่ถูกต้อง 'bbs_server_pools' ปัญหาใกล้: _serve

  2. [debug] vhost.c(902): [client 192.168.189.140] Client ส่งผิดรูปแบบ ส่วนหัวของโฮสต์: bbs_server_pools

หลังจากที่ฉันเปลี่ยนชื่ออัปสตรีม bbs_server_pools เป็น bbs มันก็ใช้ได้ดีทั้งหมด สิ่งนี้เกี่ยวข้องกับรุ่นของ nginx หรืออย่างอื่นหรือไม่

  1. ข้อผิดพลาดไฟล์ Nginx.conf

    ผู้ปฏิบัติงาน_กระบวนการ 1;
    error_log บันทึก / error.log ข้อผิดพลาด;
    
    เหตุการณ์ {
    worker_connections 1024;
    }
    
    http {
    รวม mime.types;
    แอปพลิเคชัน default_type/octet-stream;
    ส่งไฟล์บน;
    keepalive_timeout 65;
    log_format main '$remote_addr - $remote_user [$time_local] "$request"'
                    '$สถานะ $body_bytes_sent "$http_referer"'
                    '"$http_user_agent" "$http_x_forwarded_for"';
    
    เซิร์ฟเวอร์ {
    ฟัง 80;
    server_name bbs.etiantian.org;
    ที่ตั้ง / {
         proxy_pass http://bbs_server_pools;   
       } 
    }    
    
    ต้นน้ำ bbs_server_pools {
    เซิร์ฟเวอร์ 192.168.189.137:80;
    เซิร์ฟเวอร์ 192.168.189.138:80 น้ำหนัก=3;
    }  
    
    
    }
    
  2. ไฟล์ nginx.conf ที่ดีหลังจากเปลี่ยน bbs_server_pools เป็น bbs

    ผู้ปฏิบัติงาน_กระบวนการ 1;
    error_log บันทึก / error.log ข้อผิดพลาด;
    
    เหตุการณ์ {
    worker_connections 1024;
    }
    
    http {
    รวม mime.types;
    แอปพลิเคชัน default_type/octet-stream;
    ส่งไฟล์บน;
    keepalive_timeout 65;
    log_format main '$remote_addr - $remote_user [$time_local] "$request"'
                    '$สถานะ $body_bytes_sent "$http_referer"'
                    '"$http_user_agent" "$http_x_forwarded_for"';
    
    เซิร์ฟเวอร์ {
    ฟัง 80;
    server_name bbs.etiantian.org;
    ที่ตั้ง / {
         proxy_pass http://bbs;   
       } 
    }    
    
    ต้นน้ำ bbs {
    เซิร์ฟเวอร์ 192.168.189.137:80;
    เซิร์ฟเวอร์ 192.168.189.138:80 น้ำหนัก=3;
    }  
    
    
    }
    
Score:0
ธง gr

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

ตามค่าเริ่มต้น จะมีการกำหนดใหม่เพียงสองฟิลด์เท่านั้น:

proxy_set_header โฮสต์ $proxy_host;
ปิดการเชื่อมต่อ proxy_set_header;

เดอะ เจ้าภาพ ค่าส่วนหัวของคำขอที่ส่งต่อจะเป็น bbs_server_pools ด้วยการกำหนดค่าแรกของคุณและ บีบีเอส กับอันที่สอง อย่างไรก็ตาม อักขระที่ถูกต้องสำหรับชื่อโฮสต์คืออักษร ASCII จาก ถึง ซี,หลักจาก 0 ถึง 9และยัติภังค์ (-).แม้ว่าเครื่องหมายขีดล่างจะเป็นอักขระที่ถูกต้องสำหรับชื่ออัปสตรีม nginx แต่จะใช้ไม่ได้กับชื่อโฮสต์ และนั่นคือสาเหตุของข้อผิดพลาดที่คุณได้รับจากอัปสตรีม มักจะเป็นความคิดที่ดีที่จะเก็บ เจ้าภาพ ค่าส่วนหัวจากคำขอเดิมโดยใช้

proxy_set_header โฮสต์ $host;

(หรือ $http_hostคุณสามารถตรวจสอบความแตกต่าง ที่นี่). อย่างไรก็ตาม อาจมีบางกรณีที่คุณไม่ควรทำ ตรวจสอบ นี้ คำตอบเพื่อค้นหาข้อมูลเพิ่มเติมในเรื่องนี้

jp flag
สวัสดีอีวาน! ขอบคุณมาก ๆ! คำตอบของคุณแก้ปัญหาของฉันโดยสิ้นเชิง
Ivan Shatsky avatar
gr flag
มีการอธิบายวิธีขอบคุณ ServerFault สำหรับคำตอบที่ใช้งานได้ [ที่นี่](https://serverfault.com/tour#:~:text=The%20person%20who%20asked%20can%20mark%20one%20answer%20as%20% 22ยอมรับ%22.) :)

โพสต์คำตอบ

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