如何在Ubuntu12.10上扩展Web应用程序

来自菜鸟教程
跳转至:导航、​搜索

在 Ubuntu 上扩展 Web 应用程序

扩展 Web 应用程序是 Web 管理员必须做的最令人兴奋的事情之一。 扩展是系统管理员利用多个服务器为单个 Web 应用程序提供服务的过程。

大多数扩展涉及分离您的 Web 服务器和数据库,并为每个方面添加冗余系统。

本文将通过添加冗余 Web 服务器,引导您完成将应用程序从单个服务器变为两个服务器的步骤。

两台服务器(将被称为“服务器 A”和“服务器 B”)将是您的 Web 服务器,并将使用 nginx 进行负载平衡。

在本教程的所有示例中,将应用以下服务器到 IP 映射:

服务器 A:1.1.1.1

服务器 B:2.2.2.2

服务器 A 和 B 将使用名为 nginx 的程序进行负载平衡。 Nginx 可以通过网络服务器本身运行,但在我们的例子中,我们只会将它用于运行 apache 的两台服务器之间的负载平衡器。

第 1 步 - 在服务器 A 上配置 Nginx

以下步骤将导致服务器 A 和服务器 B 共享来自网站流量的负载。

我们要做的第一件事是在服务器 A 上安装 nginx,以进行负载平衡。

 
sudo apt-get install nginx php5-fpm

安装后,我们需要对其进行一些配置。 我们需要编辑 /etc/nginx/sites-enabled/default 并告诉 nginx 我们的网站实际托管的 IP 地址和端口号。

继续并打开该文件:

sudo nano /etc/nginx/sites-enabled/default

我们可以使用上游块来做到这一点。 此处显示了一个示例上游块,并在下面逐行解释。 在以下一组示例中,

upstream nodes {
    ip_hash; 
        server 1.1.1.1:8080 max_fails=3 fail_timeout=30s;
    server 2.2.2.2:8080 max_fails=3 fail_timeout=30s; 
}

第一行定义了一个上游块并将其命名为“节点”,最后一行关闭该块。

您可以根据需要创建任意数量的上游块,但它们必须具有唯一的名称。

两条“服务器”线是重要的; 它们定义了我们实际的 Web 服务器正在侦听的 IP 地址和端口号。

请记住,此 IP 地址可以是我们正在运行 nginx 的同一台服务器的 IP 地址。

不管是不是这样,建议您使用 80 以外的端口。

建议使用默认 HTTP 端口以外的端口,因为您希望最终用户很难意外发现用于 Web 服务器负载平衡的任何单个服务器。

防火墙也可以用作预防措施,因为与上游中任何服务器的所有 Web 连接都源自运行 nginx 的服务器的 IP 地址。 本文稍后将探讨增强 Web 服务器安全性的步骤。

我们要做的下一件事是配置 nginx,以便它响应并转发对特定主机名的请求。 我们可以使用包含 proxy_pass 行的虚拟主机块来完成这两个任务。

请参阅下面的示例和说明。

server {
        listen   1.1.1.1:80;

        root /path/to/document/root/;
        index index.html index.htm;

        server_name domain.tld www.domain.tld;

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }

        location / {
                proxy_pass http://nodes;
        }
}

此配置有几个关键部分,包括“listen”行、“server_name”行和“location”块。

确保编辑文档根目录以指向您的站点

前两个是标准配置元素,分别指定我们的 Web 服务器正在侦听的 IP 地址和端口,但它是最后一个元素,“位置”块,它允许我们对服务器进行负载平衡。

由于服务器 A 将用作用户将连接到的端点和负载平衡服务器之一,因此我们需要创建第二个虚拟主机块,在非标准端口上侦听传入连接。

server {
        listen   127.0.0.1:8080; 

         root /path/to/document/root/;
        index index.html index.htm index.php;

        server_name domain.tld www.domain.tld;

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }
}

完成后,重新加载 nginx:

sudo service nginx reload

第 2 步 - 在服务器 B 上配置 nginx

我们需要在服务器 B 上设置一个类似的虚拟主机块,这样它也会响应对我们域的请求。 它看起来与我们在服务器 A 上的第二个服务器块非常相似。

server {
        listen   2.2.2.2:8080; 

        root /path/to/document/root/;
        index index.html index.htm index.php;

        server_name domain.tld www.domain.tld;

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }
}

在第二台服务器上重新加载 nginx:

sudo service nginx reload

这是我们需要在此服务器上进行的唯一配置!

处理负载平衡的 Web 服务器时的缺点之一是服务器之间的数据可能不同步。

这个问题的解决方案可能是使用 git 存储库来同步到每个服务器,这将是未来教程的主题。

您现在应该有一个有效的负载平衡配置。 与往常一样,欢迎在评论中提供任何反馈!

通过杰森库尔茨