You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@trafficserver.apache.org by Jeremy Payne <jp...@gmail.com> on 2016/04/19 20:42:09 UTC

Re: How to set the Host header of the request to the origin server in hierachical caching

So to be clear,  the important piece changed here was to change the HOST of
the destination URL. The HOST header was not changed.
The HOST header plays no significant role other than setting the value of
the HOST in the destination URL.

With your rule in place the GET to the parent should look like the below.

GET http://example.com/blah HTTP/1.1
HOST: example.com






On Wed, Mar 9, 2016 at 12:22 AM, Hiroaki Nakamura <hn...@gmail.com>
wrote:

> Hi Jeremy,
> Thanks for your reply.
>
> Now I solved the problem. I believe we need to set the Host header manually
> on the child cache, not the parent cache.
>
> My current settings are something like below:
>
> # child remap.config
> map http://example.com/ http://origin.example.com/
>
> # child parent.config
> dest_domain=. parent="parent1.example.com:80; parent2.example.com:80"
> round_robin=consistent_hash
>
> # child plugin.config
> header_rewrite.so header_rewrite.config
>
> # child header_rewrite.config
> cond %{SEND_REQUEST_HDR_HOOK}
> set-destination HOST %{HEADER:Host}
>
> # parent remap.config
> map http://example.com/ http://origin.example.com/
>
> Thanks all for your help!
> Hiroaki
>
> 2016-03-09 12:13 GMT+09:00 Jeremy Payne <jp...@gmail.com>:
> > at the parent layer, you will have to re-set the HOST header upon origin
> > communication.
> >
> > you can use the header rewrite plugin or the lua plugin to do this.
> >
> > header_rewrite:
> >
> >
> https://trafficserver.readthedocs.org/en/6.0.x/reference/plugins/header_rewrite.en.html
> >
> > ts_lua:
> >
> >
> https://trafficserver.readthedocs.org/en/6.0.x/reference/plugins/ts_lua.en.html
> >
> > function send_request()
> >     ts.server_request.header['Host'] = 'example.com'
> > end
> >
> > function do_remap()
> >     ts.hook(TS_LUA_HOOK_SEND_REQUEST_HDR, send_request)
> >     return 0
> > end
> >
> >
> >
> > On Tue, Mar 8, 2016 at 8:47 PM, Hiroaki Nakamura <hn...@gmail.com>
> wrote:
> >>
> >> Thanks for replies.
> >> However I still cannot solve the issue.
> >>
> >> I reviewed my settings and found out I already had set
> >> proxy.config.url_remap.pristine_host_hdr to 1
> >> in both the child and the parent cache.
> >>
> >> I set all these configs to 1 in both the child and the parent cache.
> >> CONFIG proxy.config.url_remap.remap_required INT 1
> >> CONFIG proxy.config.url_remap.pristine_host_hdr INT 1
> >> CONFIG proxy.config.reverse_proxy.enabled INT 1
> >>
> >> My remap and parent configs were like this:
> >>
> >> child remap.config
> >> map http://example.com/ http://origin.example.com/
> >>
> >> child parent.config
> >> dest_domain=. parent="parent1.example.com:9090;
> >> parent2.example.com:9090" round_robin=consistent_hash
> >>
> >> parent remap.config
> >> map http://origin.example.com/ http://origin.example.com/
> >>
> >> I changed parent remap.config like
> >> map http://example.com/ http://origin.example.com/
> >>
> >> Still I got the Header value origin.example.com in the request to the
> >> origin server.
> >>
> >> Also I add %<{Host}cqh> to the logs_xml.config of the child and the
> >> parent cache.
> >> And I found out the Host value is origin.example.com, not example.com
> in
> >> the
> >> parent cache proxy log.
> >> In the child cache proxy log, the Host value is example.com, which is
> >> correct.
> >>
> >> So I think the child cache does not preserve the host header.
> >> I'm using trafficserver version 6.1.1 on CentOS 7.
> >> And my proxy chain is like below.
> >>
> >> nginx -> ATS child -> ATS parent
> >>
> >> Regards,
> >> Hiroaki
> >>
> >> 2016-03-09 7:05 GMT+09:00 Leif Hedstrom <zw...@apache.org>:
> >> >
> >> > On Mar 8, 2016, at 2:46 PM, Jeremy Payne <jp...@gmail.com> wrote:
> >> >
> >> > The parent remap would then have to match on:
> >> >
> >> > map http://origin.example.com/ http://origin.example.com/
> >> >
> >> > Last time I checked this is how it worked. I know there was talks of
> >> > having
> >> > a parent.config option which forced the child to send a relative URL
> >> > request. Instead of the full URL GET currently sent to the parent.
> >> >
> >> >
> >> >
> >> > That used to be an option in the remap configuration setting, but was
> >> > removed (because it was crippled). John Rushford is working on a
> >> > replacement
> >> > for this feature, such that parent request follow normal (“origin”)
> >> > request
> >> > semantics, and not the way parent proxying works today. I’m hoping
> that
> >> > it’ll be configurable per rule in parent.config  (and not a global
> >> > setting
> >> > as it was before). Alternatively, maybe it could be an overridable
> >> > records.config setting.
> >> >
> >> > That much said, I believe Jeremy is right, in that pristine host
> headers
> >> > don’t apply to parent selection. It looks like parent selection
> happens
> >> > right after remapping, and it does not consider pristine host headers.
> >> > John
> >> > and Phil, can you confirm?
> >> >
> >> > Note that the parent.config selection happens on the remapped host
> name
> >> > (I’m
> >> > pretty sure, I’m sure someone will correct me :).
> >> >
> >> > Cheers,
> >> >
> >> > — Leif
> >> >
> >
> >
>