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使用內部地址重新路由客戶端?我怎麼解決這個問題?
您可以將'server_name .example.com;'放置在您的配置的「服務器」部分內。您也可以嘗試在'location @backend;'部分放置'proxy_set_header Host $ host;'(也嘗試'Host my-app;')。並確保您的後端也發送正確的301重定向。 –