The problem:
I have Amazon EC2 running an application. It functions without issue when there is only one instance and no load balancer.
But in my production environment, I have two identical instances running behind one load-balancer and when performing certain tasks, like a feature that generates a PDF and attaches it to an email, nothing happens at all, and when using Google Developer tools with the Network tab I get the error "504 Gateway Timeout" once the timeout hits (I have it set at 30 seconds).
My Database is external, on Amazon RDS.
I think... If I could force a client to stay connected to the initial server they logged in at, this problem would be solved, because it's my understanding that the 504 Gateway Timeout is happening when instance-1 tries to reach out to instance-2 to perform the task.
This happens ONLY WHEN using Load Balancing, but never when connecting straight to one of my two servers.
Load Balancer Settings:
- The load balancer has a CRECORD on my Registrar, so app.myapplication.com points to myloadbalancerDNSname.elb.amazonaws.com.
- The load balancer has 2 healthy instances, each in the same region but they are in different availability zones.
- The load balancer is using the same Security Groups as the Instances (allow ALL IPs on ports 22, 80, and 443).
- The load balancer has cross-zone load balancing turned on.
- CORS (in Amazon S3) is enabled to GET, POST, PUT, DELETE from * to * (I have no idea how this is associated with my instances but anyway I did it as the instructions said).
- The load balancer has listeners configured as such:
- Load Balancer Protocol:HTTP Load Balancer Port:80 Instance Protocol:HTTP Instance Port:80
- Load Balancer Protocol:HTTPS Load Balancer Port:443 Instance Protocol:HTTP Instance Port:80 (cipher chosen correctly per my Cert provider, and SSL fields 100% surely correct).
Any help would be very much appreciated.