diff --git a/docker-compose.yml b/docker-compose.yml --- a/docker-compose.yml +++ b/docker-compose.yml @@ -32,15 +32,6 @@ - "./nginx.conf:/etc/nginx/nginx.conf:ro" ports: - 5080:80 - depends_on: - - amqp - - flower - - swh-web - - swh-deposit - - swh-scheduler-api - - swh-storage - - swh-objstorage - - swh-idx-storage # Scheduler diff --git a/nginx.conf b/nginx.conf --- a/nginx.conf +++ b/nginx.conf @@ -10,11 +10,30 @@ sendfile on; keepalive_timeout 65; + # Built-in Docker resolver. Needed to allow on-demand resolution of proxy + # upstreams. + resolver 127.0.0.11 valid=30s; + server { - rewrite ^/(flower|rabbitmq)[^/]$ /$1/ permanent; + # Add a trailing slash to top level requests (e.g. http://localhost/flower) + + rewrite ^/([^/]+)$ /$1/ permanent; + + # In this pile of proxies, all upstreams are set using a variable. This + # makes nginx DNS-resolve the name of the upstream when clients request + # them, rather than on start. This avoids an unstarted container preventing + # nginx from starting. + # + # Variables need to be set as early as possible, as they're statements from + # the rewrite module and `rewrite [...] break;` will prevent these + # statements from being executed. + location /flower/ { + set $upstream "http://flower:5555"; + rewrite ^/flower/(.*)$ /$1 break; - proxy_pass http://flower:5555; + proxy_pass $upstream; + proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_redirect off; @@ -23,34 +42,49 @@ proxy_set_header Connection "upgrade"; } location /rabbitmq/ { + set $upstream "http://amqp:15672"; + rewrite ^/rabbitmq/(.*)$ /$1 break; - proxy_pass http://amqp:15672/; + proxy_pass $upstream; } location /scheduler { + set $upstream "http://swh-scheduler-api:5008"; + rewrite ^/scheduler/(.*)$ /$1 break; - proxy_pass http://swh-scheduler-api:5008; + proxy_pass $upstream; } location /storage { + set $upstream "http://swh-storage:5002"; + rewrite ^/storage/(.*)$ /$1 break; - proxy_pass http://swh-storage:5002; + proxy_pass $upstream; } location /indexer-storage { + set $upstream "http://swh-idx-storage:5007"; + rewrite ^/indexer-storage/(.*)$ /$1 break; - proxy_pass http://swh-idx-storage:5007; + + proxy_pass $upstream; } location /deposit { + set $upstream "http://swh-deposit:5006"; + rewrite ^/deposit/(.*)$ /$1 break; - proxy_pass http://swh-deposit:5006; + proxy_pass $upstream; + proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_redirect off; } location /objstorage { + set $upstream "http://swh-objstorage:5003"; + rewrite ^/objstorage/(.*)$ /$1 break; - proxy_pass http://swh-objstorage:5003; + proxy_pass $upstream; } location / { - proxy_pass http://swh-web:5004; + set $upstream "http://swh-web:5004"; + proxy_pass $upstream; } } }