amazon-web-servicesamazon-ec2http-headersamazon-elastic-beanstalkelastic-load-balancer

AWS Elastic Load Balancer not Forwarding HTTP Headers to EC2 Instance


I'm currently running a Python Flask Application on Amazon Elastic Beanstalk. When I test the application, it all works fine locally (I used Postman to send the GET & POST requests). However, on AWS, it doesn't work because the request that gets to my EC2 instances (behind the load balancer) does not include the Authorization header. It seems like the load balancer strips off the header. Is there something I'm doing wrong here?

Here's a comparison of what I get when I print out the header locally and on Elastic Beanstalk.

Locally

[2017-07-04 13:18:14,650] [INFO] [common.decorators] Headers = Host: localhost:5000 Connection: keep-alive Content-Length: 151 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Cache-Control: no-cache Origin: chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop Content-Type: application/json Authorization: Bearer ad9fd4d9-6ce6-497b-855a-dcebebdad65b Postman-Token: xxxxx Accept: */* Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.8

Elastic Beanstalk:

[2017-07-04 17:27:03,813] [DEBUG] [common.decorators] Headers = Accept-Language: en-US,en;q=0.8 Accept: */* Host: dev.onetext.com X-Forwarded-For: 66.30.13.108 Content-Type: application/json Postman-Token: xxxxx Connection: keep-alive Accept-Encoding: gzip, deflate, sdch, br X-Forwarded-Proto: https Cache-Control: no-cache X-Forwarded-Port: 443 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36


Solution

  • Thanks to the comment added by @notionquest, I found the solution at https://forums.aws.amazon.com/thread.jspa?messageID=729128

    I solved this by adding a new file under the .ebextensions folder with the following content:

    files: "/etc/httpd/conf.d/wsgihacks.conf": mode: "000644" owner: root group: root content: | WSGIPassAuthorization On