重写nginx主机并将代理传递给squid

重写nginx主机并将代理传递给squid,nginx,rewrite,squid,proxypass,Nginx,Rewrite,Squid,Proxypass,我希望实现以下目标: 请求主机: 应该改写为 并通过nginx proxypass传递给squid服务器 server { listen 80; server_name ~^(?<subdub>.*)\.proxy\.myserver\.com$; location / { rewrite ^ $scheme://$subdub break; proxy_set_header X-Real-IP $remote_addr; proxy_set

我希望实现以下目标:

请求主机:

应该改写为

并通过nginx proxypass传递给squid服务器

server {
  listen 80;
  server_name ~^(?<subdub>.*)\.proxy\.myserver\.com$;
  location / {
    rewrite ^ $scheme://$subdub break;
    proxy_set_header  X-Real-IP $remote_addr;
    proxy_set_header  Host $scheme://$subdub;
    proxy_set_header  Request-URI $scheme://$subdub;
    proxy_pass http://localhost:3128;
    proxy_redirect off;
  }
}
服务器{
听80;
服务器名称~^(?.*)\.proxy\.myserver\.com$;
地点/{
重写^$scheme://$b break;
代理集头X-Real-IP$remote\u addr;
代理集头主机$scheme://$b;
代理集头请求URI$scheme://$b;
代理通行证http://localhost:3128;
代理_重定向关闭;
}
}
问题是,nginx会立即将此请求重定向到


有什么办法可以让它工作吗?

301重定向正是nginx使用重写规则应该做的:因为您在替换部分放置了$scheme://$superb,nginx将执行301,忽略“break”标志

如果替换字符串以http://开头,则将重定向客户端,并终止任何进一步的重写指令

你是想“重写”还是“重定向”?如果只是为了重写,可以删除该重写指令:

    rewrite ^ $scheme://$subdub break;
它将起作用,因为您的上游服务器可以依赖主机头来确定流量目标(虚拟主机)

另外发送到上游服务器的主机头错误。应该是

    proxy_set_header  Host $subdub;
$scheme不应放在主机头中