如何在Ubuntu 12.10上扩展Web应用程序

缩放Web应用程序是系统管理员利用多个服务器为单个Web应用程序提供服务的过程。了解如何在Ubuntu 12.10云服务器上执行此操作。

在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可以通过Web服务器本身来运行,但是在我们的示例中,我们将只使用它作为运行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; 
}

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

您可以创建任意数量的上游块,但它们必须是唯一命名的。

两个“服务器”行是重要的; 它们定义了我们实际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存储库来同步到每个服务器,这将是未来教程的主题。

您现在应该有一个工作的负载平衡配置。 和往常一样,欢迎任何反馈意见的评论!

作者:Jason Kurtz