Nginx:選択したサーバーにホストヘッダーを設定する方法(負荷分散)


10

ロードバランサーとして機能するサイトがあります。サイトA

1つのドメインしか持てない他のサイトがあります。だから私がそれらにリダイレクトすると、ホスト名が見つかりませんと表示されます。

したがって、ヘッダーを手動で設定すると、そのサイトのみが表示されます。

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はなぜですか?
ムハンマドウメール2015年

サーバーwww.asd.com:80が選択されたときにホストヘッダーをwww.asd.comにしたい
Muhammad

または、書き方があるif(server1) than host = a; 場合if(server2) than host = b;
Muhammad Umer 2015年

1
重要なのは、適切なホストヘッダーは、私の意見では、クライアントから取得するすべてのものであるべきだということです。クライアントがwww.asd.comを要求した場合、それがホストヘッダーの内容です。これは、必要に応じてバックエンドで絶対URLを正しく生成し、Cookieなどに適切なドメインを設定するのに役立ちます。何をしようとしても、おそらくそれを間違った方法で見ています。
FlorinAsăvoaie2015年

クライアントもミドルサーバーも私です。
Muhammad Umer 2015年

回答:


6

ここに記載されているように、ヘッダーを受信ホスト変数に設定する必要があります

proxy_set_header Host $host;

This variable is equal to line Host in *the header of request* or nameつまり、クライアント/ブラウザからの指示に応じて、それが選択されます。
ムハンマドウメール

これはあなたがやりたいことですよね?クライアントがプロキシからリソース/仮想ホストを要求し、仮想ホストを提供する必要があります。提供される仮想ホストは、クライアント/ブラウザによって選択されます。
ジェフウォン

サーバーによって仮想ホストがランダムに選択されることはありません
Muhammad Umer

1
このようなもの?2つのレベルのプロキシを作成し、ハードコーディングされたホストを2番目のレイヤーのエンドポイントに設定しますserverfault.com/a/622782/287634
Jeff Wong

見た目は悪いですが、そこで何かを賛成していたので、すでに見られていると思います
Muhammad

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.