Tout d'abord, un peu de load balancing, avec des conditions un peu différentes.

upstream myApp {
    server 192.168.0.3:80 weight=2;
    server 192168.0.4:80;
}

upstream myApp2 {
    ip_hash;
    server 192.168.0.5:80;
    server 192.168.0.6:80;
}

upstream myApp3 {
    server 192.168.0.7:80;
    server 192.168.0.8:80;
    server 192.168.0.9:80 backup;
}

server {
    location /truc {
        proxy_pass http://myApp1;
    }
    location /machin {
        proxy_pass http://myApp2;
    }
    location /bidule {
        proxy_pass http://myApp3;
    }
}

- myApp1, on déclare 2 serveurs, dont le premier va prendre 2 fois plus de requêtes que le deuxième.
- myApp2: on utilise des sessions php, ou autre systeme rendant le client dépendant du serveur. on utilise donc le module ip_hash pour que le client arrive toujours sur le même serveur.
- myApp3: utilise seulement 2 serveurs en load-balancing. Et si tous les 2 sont tombés, alors il passe au troisième.

On utilise ici la commande "location" qui permet de filtrer suivant l'url demandée, pour un meme site.
On peut également filtrer suivant le nom de domaine, en déclarant autant de fois la section "server" avec la directive "server_name"
Et une troisième manière de filtrer: suivant les paramètres passés dans l'url (le query string)

server {
    location /page.php {
        if ($query_string ~ "argument=valeur") {
            proxy_pass http://myApp2;
            break;
        }
        proxy_pass http://myApp1;
    }
}


Ici, on dit que si la page demandée est page.php, et que dans les arguments, on a argument=valeur, alors on le passe à myApp2.
sinon, c'est par défaut qu'il sera passé à myApp1.
C'est pas très élégant, me direz vous :D mais au besoin ça peut être utile ;)

Enfin, une dernière chose à savoir si on utilise NginX en backend.
Il verra par défaut comme adresse IP de provenance celle du proxy, et non celle du client réel.
Pour apache, on installe le mode rpaf et ça roule.
Ici, 2 lignes dans le fichiers de config suffisent :

server {
    set_real_ip_from 1.2.3.4;
    real_ip_header X-Real-Ip;
}

On indique ici que quand la connection provient du frontend ayant l'ip 1.2.3.4, alors on utilise le header X-Real-Ip (défini sur le frontend) comme ip du client ;)