Seb*_*ian 5 rewrite nginx squid proxypass
我想实现以下目标:
请求主持人:
http://example.com.proxy.myserver.com
应该改写成
并通过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;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,nginx会立即将此请求重定向到http://example.com
任何想法如何让这个工作?
301 重定向正是 nginx 对该重写规则所做的事情:因为您将 $scheme://$subdub 放在替换部分,nginx 将执行 301,忽略该“break”标志。
如果替换字符串以 http:// 开头,则客户端将被重定向,并且任何进一步的重写指令都会终止。
您想“重写”还是“重定向”?如果只是为了重写,您可以删除该重写指令:
rewrite ^ $scheme://$subdub break;
Run Code Online (Sandbox Code Playgroud)
它会起作用,因为您的上游服务器可以依赖 HOST 标头来确定流量目标(虚拟主机)。
此外,您发送到上游服务器的主机标头也是错误的。它应该是
proxy_set_header Host $subdub;
Run Code Online (Sandbox Code Playgroud)
$scheme 不应放在 Host 标头中。
| 归档时间: |
|
| 查看次数: |
3442 次 |
| 最近记录: |