The preserve_host property
When proxying, Janus's default behavior is to set the upstream request's Host header to the hostname of the API's elected upstream from theupstreams.targets property. The preserve_host field accepts a boolean flag instructing Janus not to do so.
For example, when the preserve_host property is not changed and an API is configured like this:
{
"name": "My API",
"hosts": ["service.com"],
"proxy": {
"listen_path": "/foo/*",
"upstreams" : {
"balancing": "roundrobin",
"targets": [
{"target": "http://my-api.com"}
]
},
"methods": ["GET"]
}
}A possible request from a client to Janus could be:
GET / HTTP/1.1
Host: service.comJanus would extract the Host header value from the the hostname of the API's elected upstream from the upstreams.target field, and would send the following request to your upstream service:
GET / HTTP/1.1
Host: my-api.comHowever, by explicitly configuring your API with preserve_host=true:
{
"name": "My API",
"hosts": ["example.com", "service.com"],
"proxy": {
"listen_path": "/foo/*",
"upstreams" : {
"balancing": "roundrobin",
"targets": [
{"target": "http://my-api.com"}
]
},
"methods": ["GET"],
"preserve_host": true
}
}And assuming the same request from the client:
GET / HTTP/1.1
Host: service.comJanus would preserve the Host on the client request and would send the following request to your upstream service:
GET / HTTP/1.1
Host: service.comLast updated
Was this helpful?