Just to make sure, 1. if preserve_host is false, and upstream_host is empty, then we use the node's host; 2. if preserve_host is false, and upsteam_host is not empty, then we use the upstream_host users entered; 3. if preserve_host is true, no matter upstream_host is empty or not, we use the client's host;
Are they correct? Best Regards! @ Zhiyuan Ju <https://github.com/juzhiyuan> Zexuan Luo <spacewan...@apache.org> 于2021年3月22日周一 上午9:46写道: > So now the solution is introducing two arguments: > 1. upstream_host to allow the user to specify they host if the host is > neither passed by the client nor the node/server_name > 2. preserve_host (default to false) to control if we preserve the host or > not. > > Zexuan Luo <spacewan...@apache.org> 于2021年3月22日周一 上午9:32写道: > > > > I think about it again. > > > > { > > "upstream_host": "httpbin.org", > > "type":"roundrobin", > > "service_name": "httpbin.org" > > ... > > > } > > > > and > > > > { > > "type":"roundrobin", > > "service_name": "httpbin.org" > > ... > > } > > are different. > > > > However, > > the DNS discovery is not just selecting the upstream via the hostname. > > It also allows you to specify different DNS resolvers for the > > discovery. For example, you can use the company's resolver for regular > > usage (like http-logger's target) but use a consul's DNS resolver for > > the discovery. > > > > And the discovery way returns multiple nodes and load balance it > > according to the `type`, while specifying a domain in the nodes > > returns a node randomly. > > > > YuanSheng Wang <membp...@apache.org> 于2021年3月21日周日 下午6:23写道: > > > > > > > I think the first type is not necessarily as we already have dns > > > discovery. > > > > > > > > We can use: > > > > > > > > ``` > > > > { > > > > "upstream_host": "httpbin.org", > > > > "type":"roundrobin", > > > > "service_name": "httpbin.org" > > > > ... > > > > } > > > > ``` > > > > > > I do not think this is the best way. > > > It was designed like this before there was no `upstream.pass_host` > field. > > > Although it works, it is not user-friendly. > > > > > > When modifying it later, two places need to be modified. For users, > both > > > the upstream address and host should be maintained in one place. > > > > > > For case 1, I think this style is easy to understand and maintain. > > > (if he/she want to change the address, just update `upstream_host`) > > > > > > ```1 > > > { > > > "upstream_host": "httpbin.org" # send request to `httpbin.org` > with > > > same host name > > > } > > > ``` > > > > > > > > > On Fri, Mar 19, 2021 at 7:20 PM Zexuan Luo <spacewan...@apache.org> > wrote: > > > > > > > I think the first type is not necessarily as we already have dns > discovery. > > > > > > > > We can use: > > > > > > > > ``` > > > > { > > > > "upstream_host": "httpbin.org", > > > > "type":"roundrobin", > > > > "service_name": "httpbin.org" > > > > ... > > > > } > > > > ``` > > > > > > > > YuanSheng Wang <membp...@apache.org> 于2021年3月19日周五 下午6:55写道: > > > > > > > > > > I think we can make the `upstream.node` and `upstream.type` > optional. > > > > > We can support those three ways: > > > > > > > > > > ```1 > > > > > { > > > > > "upstream_host": "httpbin.org" # send request to `httpbin.org` > with > > > > > same host name > > > > > } > > > > > ``` > > > > > > > > > > or > > > > > > > > > > > > > > > ```2 > > > > > { > > > > > "upstream_host": "httpbin.org", > > > > > "type":"roundrobin", > > > > > "nodes": {"foo.com:80": 100}, # send request to `foo.com` > with host > > > > > name `httpbin.org` > > > > > } > > > > > ``` > > > > > > > > > > or > > > > > > > > > > ```3 > > > > > { > > > > > "type":"roundrobin", > > > > > "nodes": {"foo.com:80": 100}, # send request to `foo.com` > with > > > > current > > > > > request host > > > > > } > > > > > ``` > > > > > > > > > > What do you think? > > > > > > > > > > > > > > > On Thu, Mar 18, 2021 at 1:07 PM Zhiyuan Ju <juzhiy...@apache.org> > wrote: > > > > > > > > > > > And we need a plan to do some changes on APISIX IMO, anyone > would like > > > > to > > > > > > take this issue? > > > > > > > > > > > > Zhiyuan Ju <juzhiy...@apache.org>于2021年3月18日 周四下午1:06写道: > > > > > > > > > > > > > Yep > > > > > > > > > > > > > > Chao Zhang <zchao1...@gmail.com>于2021年3月18日 周四下午1:04写道: > > > > > > > > > > > > > >> I think the point that put forward by Ju is same with what I > > > > proposed :) > > > > > > >> > > > > > > >> Chao Zhang > > > > > > >> https://github.com/tokers > > > > > > >> > > > > > > >> On March 18, 2021 at 11:55:14 AM, Ming Wen ( > wenm...@apache.org) > > > > wrote: > > > > > > >> > > > > > > >> chao zhang's idea is good for me. > > > > > > >> what do you think? > > > > > > >> > > > > > > >> Thanks, > > > > > > >> Ming Wen, Apache APISIX PMC Chair > > > > > > >> Twitter: _WenMing > > > > > > >> > > > > > > >> > > > > > > >> Zhiyuan Ju <juzhiy...@apache.org> 于2021年3月18日周四 上午11:49写道: > > > > > > >> > > > > > > >> > Any conclusion and plan here? > > > > > > >> > > > > > > > >> > There has 1 related PR[1]. > > > > > > >> > > > > > > > >> > [1] https://github.com/apache/apisix-dashboard/pull/1603 > > > > > > >> > > > > > > > >> > Best Regards! > > > > > > >> > @ Zhiyuan Ju <https://github.com/juzhiyuan> > > > > > > >> > > > > > > > >> > > > > > > > >> > Zhiyuan Ju <juzhiy...@apache.org> 于2021年3月17日周三 下午11:22写道: > > > > > > >> > > > > > > > >> > > yep, after going through Tyk & Kong, I would agree to use > > > > > > >> `preserve_host` > > > > > > >> > > to replace the current 3 opinions. > > > > > > >> > > > > > > > > >> > > Best Regards! > > > > > > >> > > @ Zhiyuan Ju <https://github.com/juzhiyuan> > > > > > > >> > > > > > > > > >> > > > > > > > > >> > > Ming Wen <wenm...@apache.org> 于2021年3月17日周三 下午5:44写道: > > > > > > >> > > > > > > > > >> > >> nice! > > > > > > >> > >> +1 > > > > > > >> > >> > > > > > > >> > >> Chao Zhang <zchao1...@gmail.com>于2021年3月17日 周三下午3:12写道: > > > > > > >> > >> > > > > > > >> > >> > Why not just use one option, "Preserve Client Host”, by > > > > default > > > > > > >> it’s > > > > > > >> > >> > closed, which means the Host header will be rewrite to > the > > > > > > Upstream > > > > > > >> > >> host; > > > > > > >> > >> > When it’s opened, the client host will inherited > > > > > > >> > >> > when proxying to upstream. > > > > > > >> > >> > > > > > > > >> > >> > Chao Zhang > > > > > > >> > >> > https://github.com/tokers > > > > > > >> > >> > > > > > > > >> > >> > On March 17, 2021 at 2:49:50 PM, Ming Wen ( > > > > wenm...@apache.org) > > > > > > >> wrote: > > > > > > >> > >> > > > > > > > >> > >> > I think there should be only two options: preserve and > use > > > > > > upstream > > > > > > >> > >> host, > > > > > > >> > >> > the default is the latter > > > > > > >> > >> > > > > > > > >> > >> > JunXu Chen <chenju...@apache.org>于2021年3月17日 > 周三下午1:46写道: > > > > > > >> > >> > > > > > > > >> > >> > > Hi, Community, > > > > > > >> > >> > > > > > > > > >> > >> > > Currently we use `pass_host` to mark how to process > the > > > > > > upstream > > > > > > >> > >> > request’s > > > > > > >> > >> > > Host header. > > > > > > >> > >> > > > > > > > > >> > >> > > It can be one of [`pass`, `node`, `rewrite`], the > default > > > > > > option > > > > > > >> is > > > > > > >> > >> > `pass`. > > > > > > >> > >> > > pass: Pass the client's host transparently to the > upstream; > > > > > > >> > >> > > node: Use the host configured in the node of > upstream; > > > > > > >> > >> > > rewrite: Use the value of the configuration > upstream_host. > > > > > > >> > >> > > > > > > > > >> > >> > > Referring to nginx(proxy_pass), tyk and kong, we > found that > > > > > > their > > > > > > >> > >> default > > > > > > >> > >> > > behavior is not to preserve the client's request > Host, but > > > > to > > > > > > set > > > > > > >> > the > > > > > > >> > >> > > upstream request’s Host header to the hostname > specified > > > > in the > > > > > > >> > >> > > upstream(service) by default. > > > > > > >> > >> > > > > > > > > >> > >> > > issues: > > > > > > >> > >> > > > > > > > > >> > >> > > 1. `pass_host` is not easy to understand, I think we > could > > > > use > > > > > > >> > >> > > `preserve_host` or `preserve_host_header` instead. > > > > > > >> > >> > > > > > > > > >> > >> > > 2. We should also be the same behavior as nginx, tyk > and > > > > kong, > > > > > > >> not > > > > > > >> > >> > preserve > > > > > > >> > >> > > the client's request Host by default if the hostname > has > > > > been > > > > > > >> > >> specified > > > > > > >> > >> > in > > > > > > >> > >> > > the upstream. > > > > > > >> > >> > > > > > > > > >> > >> > > What is your opinion? Thanks! > > > > > > >> > >> > > > > > > > > >> > >> > -- > > > > > > >> > >> > Thanks, > > > > > > >> > >> > Ming Wen, Apache APISIX PMC Chair > > > > > > >> > >> > Twitter: _WenMing > > > > > > >> > >> > > > > > > > >> > >> -- > > > > > > >> > >> Thanks, > > > > > > >> > >> Ming Wen, Apache APISIX PMC Chair > > > > > > >> > >> Twitter: _WenMing > > > > > > >> > >> > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > > -- > > > > > > > 来自 琚致远 > > > > > > > > > > > > > -- > > > > > > 来自 琚致远 > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > *MembPhis* > > > > > My GitHub: https://github.com/membphis > > > > > Apache APISIX: https://github.com/apache/apisix > > > > > > > > > > > > > -- > > > > > > *MembPhis* > > > My GitHub: https://github.com/membphis > > > Apache APISIX: https://github.com/apache/apisix >