2016-09-17 30 views
0

2つのDockerコンテナを使用してアプリケーションをホストしています。最初のコンテナにはnginxリスニングポート80が含まれています。これはアプリケーションの「エントリポイント」であり、現在はすべてのリクエストをコンテナ2(my-app)に渡します。 nginxの構成は以下の通りです:nginx 301に内部アドレスが含まれています

user www-data; 
worker_processes 4; 

events { 
     worker_connections 1024; 
} 

http { 
    include mime.types; 

    server { 
     location/{ 
      proxy_pass http://my-app:80; 
     } 
    } 
} 

第二の容器のnginxの構成は次のようになります。

user www-data; 
worker_processes 4; 

events { 
     worker_connections 1024; 
} 

http { 
    include mime.types; 

    server { 

     root /var/www/my-app/public; 

     location =/{ 
      proxy_pass http://localhost:81; 
     } 

     location/{ 
      try_files $uri $uri/ /index.html @backend; 
     } 

     location @backend { 
      proxy_pass http://localhost:81; 
     } 
} 

}

問題がある:nginxのは、自動的にクライアントを再ルーティングしたい場合新しいアドレスが正しく301を返しますが、場所ヘッダーに内部アドレスが誤って含まれています。例えば

:私はhttp://localhost:80/my-folderに行けば、要求はまず間違って、次の新しい場所に移動するには、ブラウザを尋ねる301を返し容器2、に渡した容器1、に行く: http://my-app/my-folder/

正しい場所が含まれている必要があり、もともとホスト尋ねた:代わりに、

そして生産の当然のhttp://localhost/my-folder/、アドレスexample.com/my-folderがexample.com/my-folder/に転送する必要がありますが、私の-app/my-folder/

なぜnginxは内部アドレスを使用してクライアントを再ルーティングしていますか?どうすればこの問題を解決できますか?

+0

設定の 'server'セクションの中に' server_name .example.com; 'を置くことができます。 'proxy @set_header Host $ host;'( 'Host my-app;'も試してみてください)を 'location @backend;'セクションの中に入れてみることもできます。また、バックエンドが適切な301リダイレクトを送信していることを確認してください。 –

答えて

関連する問題