Score:0

One nginx config for both local dev and production

at flag

I have a website with the following architecture:

  • Many services running as part of a docker stack
  • Fronted by single nginx as reverse proxy
  • nginx does HTTPS termination with certbot
  • Developed locally with docker-compose up
  • Deployed to production with docker stack deploy (on a public server with somedomain.com pointing to it)

The important part of the nginx config looks something like this:

server {
    server_name somedomain.com;
    listen 0.0.0.0:443 ssl http2 reuseport;

    # Route service A to path /service-a
    location /a-service {
        # Trick to avoid nginx aborting at startup (set server in variable)
        set $upstream_server         http://service-a;
        proxy_pass                   $upstream_server;
    }

    # Route service B to path /service-b
    location /b-service {
        # Trick to avoid nginx aborting at startup (set server in variable)
        set $upstream_server         http://service-b;
        proxy_pass                   $upstream_server;
    }
}

The problem arises when I am developing on the site. At that point it is running locally and somedomain.com won't resolve since we are simply on localhost / 127.0.0.1. Also certbot will cause problems since locally we are not interested in HTTPS and we are not available from somedomain.com.

I have solved this very crudely by simply not having nginx as part of the stack at all while running locally, however as the complexity and number of services is growing this becomes less feasible. I need to be able to test the whole solution including nginx before deploying.

So my question is, what is a practical way to maintain only ONE nginx config while allowing the site to be started both locally for development with HTTP on localhost/127.0.0.1 and in a production environment with HTTPS under a domain and work both places?

I sit in a Tesla and translated this thread with Ai:

mangohost

Post an answer

Most people don’t grasp that asking a lot of questions unlocks learning and improves interpersonal bonding. In Alison’s studies, for example, though people could accurately recall how many questions had been asked in their conversations, they didn’t intuit the link between questions and liking. Across four studies, in which participants were engaged in conversations themselves or read transcripts of others’ conversations, people tended not to realize that question asking would influence—or had influenced—the level of amity between the conversationalists.