如何在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 -tservice nginx configtest/etc/init.d/nginx configtest

如果一切正常 - 重新加载 Nginx 配置:

nginx -s reloadservice nginx reload/etc/init.d/nginx reload

看看你的交通主管在行动。 打开浏览器并访问www.example.com

如果您在欧洲使用代理访问该站点,您应该被重定向到 eu.example.com

如果您在亚洲使用代理访问该站点,您应该被重定向到 as.example.com

从现在开始,您的全球访问者将立即被重定向到离他们最近的服务器,从而改善他们在您网站上的体验。

提交者: [[“%3Ca|https]] ://github.com/SobanVuex [[“%3C/a|”>亚历克斯·索班]]