How do I customize nginx on AWS elastic beanstalk to loadbalance Meteor?
With a LOT of help from AWS paid support, I got this working. The reality is I was not far off it was down to some SED syntaxt.
Here's what currently works (Gist):
option_settings: - option_name: AWS_SECRET_KEY value: <SOMESECRET> - option_name: AWS_ACCESS_KEY_ID value: <SOMEKEY> - option_name: PORT value: 8081 - option_name: ROOT_URL value: <SOMEURL> - option_name: MONGO_URL value: <SOMEMONGOURL> - option_name: MONGO_OPLOG_URL value: <SOMEMONGOURL> - namespace: aws:elasticbeanstalk:container:nodejs option_name: ProxyServer value: nginx option_name: GzipCompression value: true - namespace: aws:elasticbeanstalk:container:nodejs:staticfiles option_name: /public value: /public container_commands: 01_nginx_static: command: | sed -i '/\s*proxy_set_header\s*Connection/c \ proxy_set_header Upgrade $http_upgrade;\ proxy_set_header Connection "upgrade";\ ' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf
In addition to this you need to got into your Load balancer and change the Listener from HTTP to TCP:
described here: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.elb.html).
Have you checked out Meteor WebSocket handshake error 400 with nginx? I think their configuration might be a bit different from yours. I'm in the same boat as you, trying to get this exact same set up working.
This no longer works. I posted more here https://solitaired.com/websockets-elastic-beanstalk but the jist is create a file in .ebextensions
(called websockets.config
for example) with the following:
files: "/etc/nginx/conf.d/websockets.conf": content: | proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";