如何在 nginx 中使用 proxy_redirect 作为 docker 网络别名?

如何在 nginx 中使用 proxy_redirect 作为 docker 网络别名?

我正在构建一个 docker web 项目。例如,有两个容器,分别称为AB。我将其用A作主服务器,它监听80端口并处理静态页面。url 路径/api代理到后端服务器B。我这样编写配置文件:

server {
    listen 80;
    listen [::]:80;
    server_name _;

    location / {
        root /var/www/html;
        index index.html;
    }

    location ~* ^/api/?(.*)$ {
        rewrite ^/api/?(.*)$ /$1 break;
        proxy_pass http://api;
        proxy_redirect http://api/ /api/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

rewrite行确保/api/test重定向/testB

我添加此proxy_direct行是因为当我访问时/api/test,后端服务器将引发307临时重定向。但是,由于代理删除了/api前缀,重定向效果不佳。

预期结果应该是:当后端服务器重定向/test到时/test/,主服务器将重定向修改为/api/test/

但是上面的代码不起作用。我认为问题可能是api是 的docker网络别名B,而不是原始主机名。因此重定向无法通过别名匹配。

我尝试用 替换http://api/$proxy_host但问题仍然存在。

相关内容