Configurare nginx come reverse proxy in Docker

nginx è un web server molto popolare, spesso utilizzato anche come reverse proxy per instradare il traffico verso altri container o servizi. In questo articolo vedremo come configurare Nginx in un container Docker per fare da reverse proxy a un'applicazione web.

1. Struttura del progetto

Organizziamo il progetto con la seguente struttura:


.
├── docker-compose.yml
├── nginx
│   └── nginx.conf
└── app
    └── Dockerfile

2. Creazione di un'applicazione di esempio

Per testare il reverse proxy, creiamo una semplice applicazione Node.js o Python. Ecco un esempio con Python e Flask:


# app/Dockerfile
FROM python:3.11-slim

WORKDIR /app
COPY . /app
RUN pip install flask

CMD ["python", "app.py"]

# app/app.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello from Flask app behind Nginx reverse proxy"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

3. Configurazione di Nginx

Creiamo il file nginx.conf per configurare Nginx come reverse proxy verso il container dell'applicazione:


# nginx/nginx.conf
events {}

http {
    server {
        listen 80;

        location / {
            proxy_pass http://app:5000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

4. File docker-compose.yml

Infine, usiamo Docker Compose per mettere insieme i container dell'applicazione e di Nginx:


# docker-compose.yml

services:
  app:
    build: ./app
    container_name: app
    expose:
      - 5000

  nginx:
    image: nginx:alpine
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - app

5. Avvio del progetto

Per avviare tutto il progetto, esegui:


docker-compose up --build

Ora, accedendo a http://localhost, dovresti vedere la risposta dell'app Flask, servita attraverso Nginx come reverse proxy.

Conclusione

In questo tutorial abbiamo visto come configurare Nginx in Docker per fungere da reverse proxy verso un'applicazione backend. Questa architettura è molto comune in ambienti di produzione e può essere estesa facilmente per supportare HTTPS, bilanciamento del carico, o routing verso più servizi.

Torna su