It seems that Elastic Beanstalk has changed and the commonly recommended approach/hack of overwriting #etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf
doesn't work any more. Nor does creating any file in /tmp/deployment/config.
The solution I found was to overwrite /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf
directly, using a container_commands directive, since these commands are executed after the Elastic Beanstalk install creates it's version of the nginx config.
From http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#linux-container-commands:
They [container_commands] run after the application and web server have been set up and the application version file has been extracted, but before the application version is deployed.
I did this in three steps within .ebextensions:
Create my version of the nginx config file.
Create a script to overwrite the standard config file with my own.
Run the script.
The first two steps happen earlier in the install process, while the last uses container_commands so as described previous happens late in the install.
Here's the files I used:
File .ebextensions/install_nginx_config_01.config:
(Note that the indenting is important)
#
# STEP 1 - Create the nginx config file
#
files:
"/tmp/my.nginx.conf" :
mode: "000755"
owner: root
group: root
content: |
# This file was overwritten during deployment
# by .ebextensions/install_nginx_config_03.config
upstream nodejs {
server 127.0.0.1:3000;
keepalive 256;
}
server {
listen 8080;
location / {
proxy_pass http://nodejs;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
gzip on;
gzip_comp_level 4;
gzip_types text/html text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
}
File .ebextensions/install_nginx_config_02.config:
#
# STEP 2 - Create a script that will overwrite the Nginx config
#
files:
"/tmp/install-nginx-config.sh" :
mode: "000755"
owner: root
group: root
content: |
#!/bin/sh
cp /tmp/my.nginx.conf /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf
File .ebextensions/install_nginx_config_03.config:
#
# STEP 3 - Run the script to overwrite the nginx config template.
#
container_commands:
01_runmyshellscript:
command: "/tmp/install-nginx-config.sh"