Nginx config file overwritten during Elastic Beanstalk deployment?
I need to add p3p headers to the static resource location on a standard Nodejs & Nginx Elastic Beanstalk.
I’ve created an
ebextension script as explained on this question. The script uses set to add a
add_header directive under the
alias line, which is under the static location directive. It runs on the
The script not only modifies the file, it also copies it to a "safe" location, i.e. /home/ec2-user. According to
/var/log/cfn-init.log, the script runs correctly. As evidence, the copy of the modified file shows the additional header at the right place. But the
/etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf file does not have this modification.
I can only deduce that although my script runs fine, something else later in the deployment process overwrites it. Which is strange, because according to documentation container commands are run after the application and web server have been set up, so I don’t see what does it.
So ho/what is overwriting this file and how can I prevent that?
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.
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:
(Note that the indenting is important)
# # 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
# # STEP 3 - Run the script to overwrite the nginx config template. # container_commands: 01_runmyshellscript: command: "/tmp/install-nginx-config.sh"
Answered By – Philip Callender