nginx地理位置模块configuration使用地理数据库?

我已经将nginx设置为一对apache后端/上游服务器的反向代理

使用来自MaxMind的GeoLite数据库 ,我试图根据客户国家代码来调整两个服务器之间的请求。

Nginxconfiguration:

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

因此,我试图将任何德国客户端发送到服务器A,美国客户端发送到服务器B,以及任何其他不匹配德国或美国国家代码的客户端在服务器A和B之间进行负载平衡。

但是,由于geo.conf包含许多(所有)其他国家/地区的国家/地区代码,因此将这些值设置为variables$geo ,而不是“ default ”值。

用我目前的configuration,这会导致所有非DE或US请求的“502 Bad Gateway”错误。

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" 

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

如何configurationnginx.conf来解释geo.conf中不是DE或US的任何IP国家/地区代码值,并相应地将其geo.confupstream default.backend

geo内部指定的默认值只能指定一个根本不在数据库中的IP地址的默认值。 所以$geo将始终有数据库中存在的任何国家代码。 所以default这里没有为你做任何事情。

为了处理这个问题,另外使用map

 map $geo $backend { default default; US US; DE DE; }