Enabling https on a Uvicorn Python Application deployed to Azure
Heads up! This information might be outdated since it was last updated over a year ago. Please double-check the information before relying on it.
Like many services, Azure terminates SSL at the network load balancer. In plain English, your application needs to check the headers provided to it, to figure out if your user has connected via https.
If you’re using Uvicorn or another ASGI provider, you’ll need to include middleware, to check the X-Forwarded-Proto
and X-Forwarded-For
headers.
Thankfully, Uvicorn already provides a package you can import for this: uvicorn.middleware.proxy_headers.ProxyHeadersMiddleware
.
Import the full uvicorn.middleware.proxy_headers.ProxyHeadersMiddleware
package, specifying a specific trusted host to check for headers, or use a wildcard for all hosts.
For example, in a Starlette deployment you could include the library like so:
import uvicorn
# ...
Middleware(
uvicorn.middleware.proxy_headers.ProxyHeadersMiddleware, trusted_hosts="*"
)# Add the uvicorn middleware to the Starlette middleware classes
# ...