我正在构建一个 docker web 项目。例如,有两个容器,分别称为A
和B
。我将其用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
重定向/test
至B
。
我添加此proxy_direct
行是因为当我访问时/api/test
,后端服务器将引发307
临时重定向。但是,由于代理删除了/api
前缀,重定向效果不佳。
预期结果应该是:当后端服务器重定向/test
到时/test/
,主服务器将重定向修改为/api/test/
。
但是上面的代码不起作用。我认为问题可能是api
是 的docker网络别名B
,而不是原始主机名。因此重定向无法通过别名匹配。
我尝试用 替换http://api/
,$proxy_host
但问题仍然存在。