如何在Debian或Ubuntu上使用Nginx作为全球流量总监
介绍
随着客户群的增长,服务器与客户之间的距离也会增加。 我们都知道,如果您的服务器负载增加,您就会扩展。 但是当距离是问题时怎么办?
解决方案很简单:在离您的客户群更近的地理位置安装服务器,并根据他们的位置指导他们。 但是我们如何在具有成本效益的同时轻松做到这一点呢?
在本指南中,我们将配置 Nginx 以检测客户并将其重定向到指向更适合地理位置的服务器的子域。
先决条件
要完成本指南,您需要拥有 sudo
权限的用户。 您还需要知道如何在不同区域创建服务器。
假设
为了便于阅读,本文做了一些假设。
- 您的域名是
www.example.com
- 您的主服务器在美国
- 您想为欧洲和亚洲安装 GTD
- 您的服务器 IP 如下: US:
1.1.1.1
EU:1.1.1.2
AS:1.1.1.3
子域和 DNS 配置
选择子域完全取决于您。 对于本教程,我们使用 eu.example.com
表示欧洲,使用 as.example.com
表示亚洲。
对于这些子域中的每一个,在您的 DNS 配置中添加一个 A record
以及该区域的服务器 IP:
eu.example.com
-1.1.1.2
as.example.com
-1.1.1.3
它应该看起来像这样:
安装 Nginx 和 GeoIP
要将 Nginx 与 GeoIP 模块一起使用,您有两种选择:1) 使用预编译包(只有 -full 和 -extra 有 GeoIP 模块)或 2) 使用 --with-http_geoip_module
配置参数编译您的 nginx – 在这种情况下,您还需要 geoip-dev 库。
让我们使用已经可用的存储库包。
sudo apt-get update sudo apt-get install nginx-full geoip-database
现在 Nginx 和 GeoIP 二进制文件都可用。 但还有一件事:GeoIP 的城市数据库包含地区信息。 您需要手动下载并安装它。
wget -N http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz gunzip GeoLiteCity.dat.gz mv GeoLiteCity.dat /usr/share/GeoIP/
配置 Nginx 和你的虚拟主机
在这里,我们将告诉 Nginx GeoIP 数据库文件在哪里。 在我们的虚拟主机中,我们将配置 Nginx 如何根据他们的 geoip 信息响应请求。
使用您喜欢的编辑器打开 nginx.conf
(默认为 /etc/nginx/nginx.conf
)。 添加行 geoip_city /usr/share/GeoIP/GeoLiteCity.dat;
。 您的 nginx.conf
将如下所示:
http { geoip_city /usr/share/GeoIP/GeoLiteCity.dat; ... }
保存。
现在让我们编辑您的虚拟主机(默认 /etc/nginx/sites-available/default
)。 在里面我们需要创建一个 map
并将子域添加到 server_name
指令。
Nginx 中的 map
允许我们根据 $geoip_city_continent_code
的值设置变量 $closest_server
。 您可以在 Nginx 的文档中阅读有关 Map 模块 的更多信息。
map $geoip_city_continent_code $closest_server { default www.example.com; EU eu.example.com; AS as.example.com; }
接下来,我们将基于位置的子域添加到 $server_name
指令:
server { server_name example.com www.example.com eu.example.com as.example.com; ... }
该过程的最后一部分是在您的虚拟主机中创建一个条件,将访问者重定向到最近的服务器。 将以下条件添加到您的配置中:
server { ... if ($closest_server != $host) { rewrite ^ $scheme://$closest_server$request_uri break; } ... }
完成所有更改后,您的虚拟主机文件将如下所示:
map $geoip_city_continent_code $closest_server { default www.example.com; EU eu.example.com; AS as.example.com; } server { server_name example.com www.example.com eu.example.com as.example.com; if ($closest_server != $host) { rewrite ^ $scheme://$closest_server$request_uri break; } ... }
对要配置的每个服务器重复此步骤。 这样,您的所有服务器都将充当流量主管。
运行一些测试
完成所有这些步骤后,最后一个是测试您所做的工作。 使用 Nginx 时,请始终在应用前测试新配置。
Nginx 提供了一个选项来测试其配置文件,而不影响当前运行的 Nginx。 您可以通过运行以下命令之一来做到这一点:
nginx -t
、service nginx configtest
或 /etc/init.d/nginx configtest
如果一切正常 - 重新加载 Nginx 配置:
nginx -s reload
、service nginx reload
或 /etc/init.d/nginx reload
看看你的交通主管在行动。 打开浏览器并访问www.example.com
:
如果您在欧洲使用代理访问该站点,您应该被重定向到 eu.example.com
:
如果您在亚洲使用代理访问该站点,您应该被重定向到 as.example.com
:
从现在开始,您的全球访问者将立即被重定向到离他们最近的服务器,从而改善他们在您网站上的体验。