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は内部アドレスを使用してクライアントを再ルーティングしていますか?どうすればこの問題を解決できますか?
設定の 'server'セクションの中に' server_name .example.com; 'を置くことができます。 'proxy @set_header Host $ host;'( 'Host my-app;'も試してみてください)を 'location @backend;'セクションの中に入れてみることもできます。また、バックエンドが適切な301リダイレクトを送信していることを確認してください。 –