J'ai configuré nginx comme proxy inverse pour quelques serveurs apache backend/upstream.
L'utilisation de la Base de données GeoLite de MaxMind, j'essaie de répartir les demandes entre les deux serveurs en fonction du code pays des clients.
Configuration de Nginx :
geo $geo {
default default;
include geo.conf;
}
upstream default.backend {
server 192.168.0.1:8080; #Server A
server 192.168.0.2:8080; #Server B
}
upstream DE.backend {
server 192.168.0.1:8080; #Server A
}
upstream US.backend {
server 192.168.0.2:8080; #Server B
}
server {
listen 80;
server_name myserver.com;
location / {
proxy_pass http://$geo.backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
J'essaie donc d'envoyer les clients allemands sur le serveur A, les clients américains sur le serveur B, et tous les autres clients qui ne correspondent pas aux codes de pays allemand ou américain sont répartis entre les serveurs A et B.
Toutefois, étant donné que les geo.conf
contient des codes pays pour de nombreux (tous les) autres pays, ces valeurs sont affectées à la variable $geo
par opposition à default
'.
Avec ma configuration actuelle, cela provoque des erreurs "502 Bad Gateway" pour toutes les requêtes qui ne sont pas DE ou US.
Journal des erreurs de Nginx :
2013/10/11 08:18:50 [error] 25017#0: *1 no resolver defined to resolve NL.backend, client: 85.17.131.209, server: myserver.com, request: "GET / HTTP/1.1", host: "myserver.com"
Journal d'accès Nginx :
85.17.131.209 - - [11/Oct/2013:08:18:50 -0700] "GET / HTTP/1.1" 502 574 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.63 Safari/537.31" "-"
Comment puis-je configurer nginx.conf
pour interpréter n'importe quelle valeur de code de pays IP à partir de geo.conf
qui n'est pas DE ou US comme default
et l'équilibrer en conséquence pour upstream default.backend
?