Configuring trusted proxies
When you deploy your application, you may be behind a load balancer (e.g. an AWS Elastic Load Balancing) or a reverse proxy (e.g. Nginx).
When a request goes through a proxy, the original request information will be made available by the proxy
via the standard Forwarded
header or the X-Forwarded-*
headers. This means, for instance, that the
real IP of the user will not be read from the client
of the request but from a standard Forwarded: for="..."
header
or an X-Forwarded-For
header.
By default, Expanse will not look for those headers, which means that if you are using a proxy, you will most likely get incorrect information about the client's IP address, whether the client is connecting via HTTPS, the client's port and the hostname being requested.
Trusting proxies
To trust a proxy, you need to configure the HTTP_TRUSTED_PROXIES
setting in your configuration file. This setting
is a list of IP addresses or CIDR ranges that should be trusted.
HTTP_TRUSTED_PROXIES=127.0.0.1,192.168.1.1
HTTP_TRUSTED_PROXIES=192.0.0.1,10.0.0.0/8
Trusting headers
Now that you have configured which proxies should be trusted, you need to configure which headers should be
trusted. By default, Expanse will trust the Forwarded
header and all X-Forwarded-*
headers. If you want to
specify specific headers to trust, you can do so by configuring the HTTP_TRUSTED_HEADERS
setting.
HTTP_TRUSTED_HEADERS=Forwarded
HTTP_TRUSTED_HEADERS=X-Forwarded-For,X-Forwarded-Proto,X-Forwarded-Port
Enabling the X-Forwarded-Host
header exposes the application
to HTTP Host header attacks.
Make sure the proxy really sends an X-Forwarded-Host
header.
For this reason, Expanse does not trust the X-Forwarded-Host
header by default.