2016-09-13 13 views
0

私のVM(アドレスx.y.z.w)のポート80でNginxドッカーの画像を使用しています。だから私はhttp://x.y.z.w私のブラウザで試して、それは私にNginxのインデックスファイルを表示しています。ルーティング用にNginxを設定する

今、私はそれは私が欲しいもの、ポート8081と8082で同じVM上で動作している私の2つのドッキングウィンドウのイメージに(基本的にプロキシ通過)を構成しています。このため

when I type http://x.y.z.w/a it should go to http://x.y.z.w:8081 
when I type http://x.y.z.w/b it should go to http://x.y.z.w:8082 

、私は私のconfの部分を変更しましたファイル:

 location /a { 
     rewrite ^/a(.*) /$1 break; 
     proxy_pass http://x.y.z.w:8081 ; 
    } 

    location /b { 
     rewrite ^/b(.*) /$1 break; 
     proxy_pass http://x.y.z.w:8082 ; 
    } 

期待どおり動作しています。しかし、すべての画像が同じマシン(同じIPを持つ)にあるので、x.y.z.wの代わりにlocalhostを使用します。しかし、それはlocalhostで動作しません。

基本的には、IPが将来変更される可能性があるため、ハードコードされたIP(x.y.z.w)をリンクに使用したくありません。

Nginxは実行中の変数IPを知ることができ、そのIPを使用することができます。または、何らかの変更を加えてlocalhostとどうすれば動作するのですか?

+0

ドッカーのリンクhttps://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/ – Tuan

答えて

0

localhostは、ホストではなくコンテナのloopbackを参照するため、別のドッカーコンテナに対処することはできません。 @ Tuanが示唆しているように、linkhttps://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/)のコンテナを使うことができるので、それらの名前で通信することができます。例えば:

docker run --rm -ti --name backend nginx:latest 
docker run --rm -ti --name proxy --link backend:backend nginx:latest 

proxybackendを知っています。

+0

x.y.z.wの代わりに使用できる変数はありますか? nginxは、現在実行されているアドレスを知っていますか? –

+0

Dockerコンテナとそのリンクには任意のホスト名を使用できます。 Nginxにはさまざまな変数 - リクエストのホスト名(http://nginx.org/ja/docs/http/ngx_http_core_module.html#var_host)もあります。 –

0

私はちょうど私のnginx.confx.y.z.wのすべての出現を$hostと置き換えました。うまくいきました。

例えば

、代わりのproxy_pass http://x.y.z.w:8081 ;は、それが

proxy_pass http://$host:8081 ;今私のIPは(x.y.z.w)の変更は、それは私のアプリケーションに影響を与えていない場合は書いています。

関連する問題