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.com
Janus 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.com
However, 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.com
Janus would preserve the Host on the client request and would send the following request to your upstream service:
GET / HTTP/1.1
Host: service.com