docker, nginx,

Route requests between Docker Compose services via Nginx

Jun 16, 2023 · 1 min read · Post a comment

Let’s say you have to route requests from Service A to Service B via a Nginx server being part of a Docker Compose service too. Here’s a guide on how you could start at least.

Prerequisites

  • Docker
  • Docker Compose

Solution

Step 1. Set up the Nginx service in your Docker Compose file. Make sure to define the ports for Nginx to listen on. For instance:

version: "3.9"

services:
  nginx:
    image: nginx
    ports:
      - 80:80

Step 2. Configure the Nginx service to act as a reverse proxy by creating an Nginx configuration file. You can create a new file called nginx.conf (or any name you prefer) in the same directory as your Docker Compose file. Here’s an example:

server {
    listen 80;
    server_name nginx;

    location / {
        proxy_pass http://service_b:9000;  # Assuming Service B listens on port 9000
    }
}

Step 3. Mount the Nginx configuration file to the Nginx service in your Docker Compose file. Add the volumes section to the Nginx service definition:

services:
  nginx:
    image: nginx
    ports:
      - 80:80
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf

Step 4. Service A, you can use an environment variable to specify the endpoint to Service B. Let’s assume you have an environment variable named SERVICE_B_URL in Service A. You can set its value to http://nginx, which corresponds to the hostname of the Nginx service in the Docker network.

services:
  service_a:
    environment:
      - SERVICE_B_URL=http://nginx

Just make sure to adjust the port numbers and service names as per your specific setup.

Conclusion

In case you face any issues, feel free to leave a comment below and if you find this tutorial useful, follow our official channel on Telegram.