Nginx: วิธีการตั้งค่าส่วนหัวของโฮสต์เป็นเซิร์ฟเวอร์ที่เลือก (โหลดบาลานซ์)


10

ฉันมีเว็บไซต์ที่ทำงานเป็น load balancer ไซต์ A

ฉันมีเว็บไซต์อื่นที่สามารถมีได้เพียงหนึ่งโดเมน ดังนั้นหากฉันเพียงแค่เปลี่ยนเส้นทางไปยังพวกเขามันบอกว่าไม่พบชื่อโฮสต์

ดังนั้นหากฉันตั้งค่าส่วนหัวเป็นบางสิ่งด้วยตนเองจะมีเพียงไซต์นั้นเท่านั้นที่ปรากฏขึ้น

ฉันจะตั้งproxy_set_header Host xxxxเป็นเซิร์ฟเวอร์ที่เลือกได้อย่างไร วิธีนี้แต่ละคำขอเปลี่ยนเส้นทางใหม่จะมีส่วนหัวของโฮสต์ที่แตกต่างและเหมาะสม

มันจะไม่เป็นปัญหาหากเว็บไซต์ 2 แห่งของฉันทำงานได้ตาม url และไม่ใช่ส่วนหัวของโฮสต์

worker_processes  1;

error_log  logs/error.log;
error_log  logs/error.log  notice;
error_log  logs/error.log  info;
error_log  logs/error.log  debug;

pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    upstream myapp1 {
        #server localhost:3333;
        server www.asd.com:80;
    }

    server {
        listen 80;

        location / {
            proxy_set_header Host            $upstream_addr;  // should become somehow www.asd.com right now this code doesn't work
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_pass http://myapp1;
        }
    }
}

$server_addrทำไม 127.0.0.1 ทำไม ??
มูฮัมหมัดอูเมอ

ฉันต้องการให้ส่วนหัวของโฮสต์เป็น www.asd.com เมื่อwww.asd.com:80เลือกเซิร์ฟเวอร์
Muhammad Umer

หรือถ้ามีวิธีการเขียนif(server1) than host = a; ,if(server2) than host = b;
มูฮัมหมัด Umer

1
สิ่งคือส่วนหัวของโฮสต์ที่เหมาะสมควรในความคิดของฉันสิ่งที่คุณได้รับจากลูกค้า หากลูกค้าร้องขอ www.asd.com แสดงว่าส่วนหัวของโฮสต์คืออะไร สิ่งนี้จะช่วยในการสร้าง URL ที่แน่นอนในแบ็กเอนด์เมื่อจำเป็นตั้งค่าโดเมนที่เหมาะสมสำหรับคุกกี้เป็นต้นไม่ว่าคุณจะพยายามทำอะไรคุณอาจมองว่ามันผิดไป
Florin Asăvoaie

ทั้งไคลเอนต์และเซิร์ฟเวอร์กลางคือฉัน
มูฮัมหมัดอูเมอ

คำตอบ:


6

คุณต้องตั้งค่าส่วนหัวเป็นตัวแปรโฮสต์ขาเข้าดังที่บันทึกไว้ที่นี่ :

proxy_set_header Host $host;

This variable is equal to line Host in *the header of request* or nameหมายถึงสิ่งที่ลูกค้า / เบราว์เซอร์บอกว่าเป็นสิ่งที่ได้รับเลือก
มูฮัมหมัดอู

นี่คือสิ่งที่คุณต้องการจะทำถูกต้อง? ไคลเอนต์ร้องขอทรัพยากร / โฮสต์เสมือนจากพร็อกซีของคุณและคุณต้องแสดงโฮสต์เสมือน โฮสต์เสมือนที่จะให้บริการถูกเลือกโดยไคลเอนต์ / borwser
เจฟฟ์หว่อง

ไม่มีเซิร์ฟเวอร์เสมือนใดที่ถูกเลือกโดยเซิร์ฟเวอร์สุ่ม
Muhammad Umer

1
อะไรแบบนี้? สร้างการพร็อกซีสองระดับและตั้งค่าโฮสต์ hardcoded เป็น endpoint บนserverfault.com
Jeff Wong

ดูไม่ดี แต่ฉันคิดว่า ive เห็นแล้วตั้งแต่ฉัน upvoted บางสิ่งที่นั่น
Muhammad Umer

0

คำตอบของคำถามนี้อธิบายพฤติกรรมนี้และการแก้ไขปัญหาข้อเสนอ

โดยพื้นฐานแล้วส่วนหัวได้รับการแก้ไขอย่างดีก่อนเลือกอัปสตรีม หากคุณไม่สามารถทำให้ upstreams ทั้งหมดตอบสนองต่อส่วนหัว Host: เดียวคุณต้องแก้ไข upstream ในเวลาเดียวกันเมื่อคุณตั้งค่าส่วนหัว

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