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重定向。 –