We have already supported custom upstream_host now.

Ming Wen <wenm...@apache.org> 于2021年3月22日周一 下午12:19写道:
>
> do we really need to support custom upstream_host?
>
> Thanks,
> Ming Wen, Apache APISIX PMC Chair
> Twitter: _WenMing
>
>
> Zexuan Luo <spacewan...@apache.org> 于2021年3月22日周一 上午11:42写道:
>
> > Agree.
> >
> > Zhiyuan Ju <juzhiy...@apache.org> 于2021年3月22日周一 上午9:51写道:
> > >
> > > 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
> > > >
> >

Reply via email to