Amazon Elastic load balancer is not populating x-forwarded-proto header
It sounds like your ELB listeners might be configured for TCP instead of HTTP. Configured for TCP, it will not add X-Forwarded-Proto or X-Forwarded-For.
Send http and https requests to two different ports. If the request comes through on the http port, you would be safe to redirect it.