Skip to content

Instantly share code, notes, and snippets.



Created Apr 2, 2015
What would you like to do?
# Fail hard and fast
set -eo pipefail
export ETCD_PORT=${ETCD_PORT:-4001}
export HOST_IP=${HOST_IP:-}
export ETCD=$HOST_IP:4001
echo "[nginx] booting container. ETCD: $ETCD"
# Loop until confd has updated the nginx config
until confd -onetime -node $ETCD -config-file /etc/confd/conf.d/nginx.toml; do
echo "[nginx] waiting for confd to refresh nginx.conf"
sleep 5
# Run confd in the background to watch the upstream servers
confd -interval 10 -node $ETCD -config-file /etc/confd/conf.d/nginx.toml &
echo "[nginx] confd is listening for changes on etcd..."
# Start nginx
/usr/sbin/nginx -g "daemon off;"
upstream example_pool {
{{ range getvs "/services/example/*" }}
server {{ . }};
{{ end }}
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
access_log /dev/stdout main;
location / {
proxy_pass http://example_pool;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# The name of the template that will be used to render the application's configuration file
# Confd will look in `/etc/conf.d/templates` for these files by default
src = "nginx.tmpl"
# The location to place the rendered configuration file
dest = "/etc/nginx/sites-enabled/app.conf"
# The etcd keys or directory to watch. This is where the information to fill in
# the template will come from.
keys = [ "/services/example" ]
# File ownership and mode information
owner = "root"
mode = "0644"
# These are the commands that will be used to check whether the rendered config is
# valid and to reload the actual service once the new config is in place
check_cmd = "/usr/sbin/nginx -t"
reload_cmd = "/usr/sbin/nginx -s reload"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment