Wednesday, November 29, 2017

load balancing - nginx geo location module configuration using geo database?

I've setup nginx as a reverse proxy for a couple of apache backend/upstream servers.



Using the GeoLite database from MaxMind, I'm trying to loadbalance requests between the two servers dependent on the clients country code.



Nginx Configuration:



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;
}


So I'm trying to send any German clients to server A, and US clients to server B, and any other clients not matching German or US country codes to be loadbalanced between servers A & B.



However, since geo.conf contains country codes for many (all) other countries, these values are being set to the variable $geo, as opposed to the 'default' value.



With my current configuration this causes '502 Bad Gateway' errors with all requests that aren't DE or US.




Nginx error log:



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"


Nginx access log:



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" "-"



How can I configure nginx.conf to interpret any IP country code value from geo.conf that's not DE or US as default, and loadbalance it accordingly to upstream default.backend?

No comments:

Post a Comment

linux - How to SSH to ec2 instance in VPC private subnet via NAT server

I have created a VPC in aws with a public subnet and a private subnet. The private subnet does not have direct access to external network. S...