Nginx: cara mengatur header host ke server yang dipilih (load balancing)

10

Saya memiliki situs yang berfungsi sebagai penyeimbang beban. Situs A.

Saya memiliki situs lain yang hanya dapat memiliki satu domain. Jadi jika saya hanya mengarahkan ulang ke mereka dikatakan nama host tidak ditemukan.

Jadi jika saya secara manual mengatur tajuk ke sesuatu maka hanya situs itu yang muncul.

Bagaimana saya bisa mengatur proxy_set_header Host xxxxke alamat server yang dipilih. Dengan cara ini setiap permintaan pengubahan rute akan memiliki header host yang berbeda dan sesuai.

Ini tidak akan menjadi masalah jika 2 situs saya yang lain dapat bekerja berdasarkan url dan bukan header host.

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;
        }
    }
}
Muhammad Umer
sumber
$server_addrentah bagaimana 127.0.0.1 mengapa ??
Muhammad Umer
Saya ingin header host menjadi www.asd.com ketika server www.asd.com:80dipilih
Muhammad Umer
atau jika ada cara untuk menulis if(server1) than host = a; ,if(server2) than host = b;
Muhammad Umer
1
Masalahnya adalah bahwa header host yang sesuai harus, menurut pendapat saya, apa pun yang Anda dapatkan dari klien. Jika klien meminta www.asd.com, maka seharusnya itu header host. Ini akan membantu untuk menghasilkan url absolut dengan benar di backend saat dibutuhkan, mengatur domain yang tepat untuk cookie dll. Apa pun yang Anda coba lakukan, Anda mungkin melihatnya dengan cara yang salah.
Florin Asăvoaie
client dan server menengah adalah saya.
Muhammad Umer

Jawaban:

6

Anda perlu mengatur header ke variabel host yang masuk, seperti yang didokumentasikan di sini :

proxy_set_header Host $host;
Jeff Wong
sumber
This variable is equal to line Host in *the header of request* or nameyang berarti apa pun yang dikatakan klien / browser, itulah yang dipilih.
Muhammad Umer
Ini yang ingin Anda lakukan, betul? Klien meminta host sumber daya / virtual dari proxy Anda, dan Anda perlu menyajikan host virtual. Tuan rumah virtual yang akan dilayani dipilih oleh klien / borwser.
Jeff Wong
tidak ada virtual host yang dipilih oleh server secara acak
Muhammad Umer
1
Sesuatu seperti ini? Buat dua tingkat proksi, dan atur host dengan hardcoded ke titik akhir pada serverfault.com/a/622782/287634
Jeff Wong
Saya tidak melihatnya, tetapi saya pikir saya sudah melihat karena saya telah mengangkat beberapa hal di sana
Muhammad Umer