3

プライベート ポート (たとえば、ポート 5000 でリッスン) で Nginx リバース プロキシの背後で実行されている内部アプリ サーバー (Django + gunicorn) があります。

アプリ サーバーには複数の Django アプリがインストールされており、個別のベース パスにマップされています。例:

/app1
/app2

どこ/app1で のコンテンツを提供し、 のコンテンツをdomain1.com提供/app2しますdomain2.com

内部アプリ サーバーに転送されたパスを保持しながら、特定のホスト名に対する着信要求を関連するバックエンド アプリに静かに逆プロキシしたいと思います。

http://domain1.com/foo --> /app1/foo
http://domain1.com/bar/bletch --> /app1/bar/bletch

http://domain2.com/alpha/bravo --> /app2/alpha/bravo

単純な「仮想ホスティング」構成をセットアップしようとしているが、共有バックエンド アプリ サーバー インスタンスを使用したいと言うことができると思います。

キーポイント: リダイレクトされた URL 構造を訪問者のブラウザに見せたくありません。そのため、クライアント ブラウザがhttp://domain1.com/fooにアクセスすると、正しいコンテンツが提供されますが、ブラウザにはリダイレクトが表示されません。

私はNginxでいくつかの基本的な作業を行いました(まだ学習中です)。この目標を達成するための安全で効率的な方法を示すNginx構成の例を探しています。

4

1 に答える 1

3

この回答に基づいて、希望どおりに機能するように見える構成を次に示します。

app1で実行する場合http://localhost:8000/app1_path:

upstream app1 {
    server 127.0.0.1:8000 fail_timeout=0;
}
server {
    listen 80;
    server_name example.com
    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        rewrite ^(.*)$ /app1_path$1 break;
        proxy_pass http://app1;
    }
}

したがって、各ホスト名->アプリ/パスのペアに対して、このパターンを必要なだけ繰り返すことができます。

于 2012-09-17T18:00:02.943 に答える