Redirect nginx 301包含内部地址
我使用两个Docker容器来承载我的应用程序。第一个容器包含nginx侦听端口80。这是我的应用程序的“入口点”,目前它只将所有请求传递给容器2(我的应用程序)。nginx配置如下所示:Redirect nginx 301包含内部地址,redirect,nginx,Redirect,Nginx,我使用两个Docker容器来承载我的应用程序。第一个容器包含nginx侦听端口80。这是我的应用程序的“入口点”,目前它只将所有请求传递给容器2(我的应用程序)。nginx配置如下所示: user www-data; worker_processes 4; events { worker_connections 1024; } http { include mime.types; server { location / {
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,但位置头不正确地包含一个内部地址
例如:如果我转到,则请求首先转到容器1,容器1将其传递到容器2,然后容器2返回301,请求浏览器转到新位置,这是错误的,如下所示:
正确的位置应包含最初询问的主机:
当然,在生产中,地址example.com/my-folder应该转发到example.com/my-folder/,而不是我的app/my folder/
为什么nginx使用内部地址重新路由客户端?如何解决此问题?解决方案是正确设置某些重定向头。我还找到了一个完整的教程:
同时,感谢伊沃·盖洛夫帮助我走向正确的方向。:) 您可以放置
server\u name.example.com代码>在配置的服务器
部分中。您还可以尝试放置proxy\u set\u header Host$Host
(也可以尝试在位置@backend内托管我的应用程序;
)代码>部分。并确保您的后端也发送了正确的301重定向。