2016-09-17 58 views
0

我使用兩個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,請求第一進入容器1,它傳遞給容器2,然後返回301要求瀏覽器去到新的位置,其是不正確地執行以下操作: http://my-app/my-folder/

正確的位置應該包含最初問主持人:http://localhost/my-folder/

當然,在生產和,地址example.com/my-folder應該被轉發到example.com/my-folder/,而不是我的-app/my-folder/

爲什麼nginx使用內部地址重新路由客戶端?我怎麼解決這個問題?

+0

您可以將'server_name .example.com;'放置在您的配置的「服務器」部分內。您也可以嘗試在'location @backend;'部分放置'proxy_set_header Host $ host;'(也嘗試'Host my-app;')。並確保您的後端也發送正確的301重定向。 –

回答