如何从Apache的迁移WordPress安装到Nginx的的Ubuntu VPS

介绍

WordPress是一个流行的平台,轻松地启动一个网站或博客。 它非常灵活,可以快速配置和修改,让您专注于您的内容,而不是大多数配置。

虽然WordPress可以配置为操作大多数Web服务器,一个流行的,也许默认,许多人的选择是Apache Web服务器。 Apache是​​强大的和良好的支持,但它有时遇到麻烦的资源利用率,当服务大量的客人。

Nginx是另一个Web服务器,由于它的易用性,灵活性和低资源使用率,已经迅速普及。 许多人开始选择Nginx over Apache来托管他们的WordPress安装因为这些原因。 虽然有许多资源如何与Nginx的安装WordPress ,迁移现有的安装,有时似乎是一个艰巨的任务。

在本指南中,我们将讨论如何在Ubuntu 12.04服务器上将现有的WordPress安装从Apache迁移到Nginx。 我们假设你已经安装的WordPress与Apache在Ubuntu 12.04下面这个指南 如果您以不同的方式安装它,您可能需要调整配置中的一些行。

安装Nginx和PHP5-FPM

我们需要做的第一件事是安装Nginx服务器。 这在Ubuntu的默认存储库中可用,所以我们可以使用apt-get:

sudo apt-get update
sudo apt-get install nginx

与Apache不同,Nginx做出了不包括核心PHP处理功能的设计选择。 相反,Nginx决定通过传递这些请求到一个专门的PHP处理程序,它可以保持其焦点,同时仍然解决问题。

用于执行与Nginx的PHP文件的标准选择是一个工具,叫做php5-fpm 我们需要安装这个包,以便我们的WordPress安装可以处理它依赖的PHP文件:

sudo apt-get install php5-fpm

所有必需的组件现在都已安装。 现在,我们可以开始配置我们的组件来接管Apache的真正工作。

配置PHP5-FPM

我们将从配置PHP处理程序开始,因为这是相对直接和容易。

首先,我们将需要在我们的php5-fpm配置文件中修改一个值。 立即打开:

sudo nano /etc/php5/fpm/php.ini

查找cgi.fix_pathinfo参数并修改它看起来像这样:

cgi.fix_pathinfo=0

这是一种安全措施。 如果此参数设置为“1”,php5-fpm将尝试通过查找请求的文件来提供PHP文件,然后如果没有找到完全匹配,它将尝试猜测并返回一个紧密匹配。

这是非常不安全的,因为它可以允许您的网站向外部用户暴露敏感信息。 对于php5-fpm来说,如果文件与请求的文件完全匹配,则返回更安全,否则返回错误给用户。 这是我们的修改完成。

保存并在完成后关闭此文件。

接下来,我们需要修改另一个PHP配置文件,以便我们的处理器能够正确连接到我们的Web服务器。

使用文本编辑器打开此文件:

sudo nano /etc/php5/fpm/pool.d/www.conf

寻找到的位置listen =指令定义。 我们将修改它以使用套接字与Web服务器通信。 将其修改为:

    listen = /var/run/php5-fpm.sock

完成后,保存并关闭文件。

要启用我们的更改,我们需要重新启动php5-fpm服务:

sudo service php5-fpm restart

创建Nginx服务器块配置

现在,我们准备配置我们的Nginx服务器块。 Nginx服务器块类似于Apache虚拟主机,因为它们描述特定站点的配置。

如Apache,Nginx的在Ubuntu配置通过网站sites-available目录,然后链接这些站点, sites-enabled为他们服务。 我们将修改默认配置文件,以便为我们的WordPress安装提供服务。

现在打开该文件:

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

在配置文件中,删除已经存在的信息。 我们将从头开始,以便我们可以讨论我们正在构建的文件中正在发生的事情。

首先,我们需要创建一个服务器块。 这是单个网站的基本组织单位。 当服务器启动或重新加载时,这些文件将合并到Nginx配置中。 它们继承默认值,并可以修改它们。

server {

}

首先,重要的是要知道每个Nginx指令必须以分号(;)结尾。 不包括这将导致Nginx误解该文件,这可能会导致服务器无法启动。

在服务器块中,我们指定此站点应侦听的端口以从用户获取连接。 默认情况下,到web浏览器的HTTP流量在端口80上提供,因此我们将告诉Nginx查找连接。

我们还要指定文​​档根目录,默认情况下存储我们的WordPress文件。

如果你按照上面的指导,WordPress的文件应位于/var/www目录。 如果你以另一种方式安装,你的WordPress的文件可能存储在/var/www/wordpress/home/wordpress/public_html或其他位置。 调整值root指令匹配您的配置。

server {
    listen 80;

    root /var/www;
}

接下来,我们将添加一个指令,告诉Nginx在请求目录时尝试提供哪些文件。 用于描述目录的文件称为目录索引。 与WordPress,该文件将被称为index.php 以HTML编写的其他索引文件可用作备用。

我们还需要指定我们的服务器将响应的域名。 虽然这可能不重要,如果WordPress是唯一的网站,我们已配置,包括此指令将允许我们添加其他网站,而不需要再次修改此文件。 我们可以通过命名在初始server_name后面的名称来包含其他匹配的名称(例如前面加“www”的网站):

server {
    listen 80;

    root /var/www;
    index index.php index.html index.htm;

    server_name your_domain.com www.your_domain.com;
}

我们放入服务器块的其余信息将进一步划分为位置块。 位置块允许我们指定特定的规则,当请求匹配某种模式时该做什么。

首先,我们将创建一个与根分区匹配的位置块。 这将适用于位于你的定义的文件夹中文件root指令。 此块将包含有关如何尝试提供文件的一般规则。

我们将添加的规则将告诉Nginx尝试查找与域名后面请求的确切资源匹配的文件。 如果它不成功,它应该尝试找到一个同名的目录。 如果这也不成功,它会将请求的资源传递给PHP脚本,这将尝试找到一个好的方法来处理请求。

在这个位置块之后,我们将定义一个块来实际处理将PHP脚本传递到我们的php5-fpm工具。 这使用我们在php5-fpm配置文件中定义的信息进行连接。

server {
    listen 80;

    root /var/www;
    index index.php index.html index.htm;

    server_name your_domain.com www.your_domain.com;

    location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

在这一点上,我们只是想收紧一些东西。 我们将为Nginx如何尝试提供favicon请求和robot.txt请求(由搜索引擎用于索引站点)创建一些规则。 我们不需要记录此信息的请求。

之后,我们有一个位置块,拒绝访问任何隐藏的文件夹(由Linux系统中的起始点表示)。 这将阻止我们服务可能已被用于Apache的配置,例如文件.htaccess文件。 从我们的用户保存这些文件是更安全的。

最后,我们防止在uploads或files目录中运行或访问任何PHP文件。 这可以防止我们的服务器执行恶意代码。

我们完成的文件应该如下所示:

server {
    listen 80;

    root /var/www;
    index index.php index.html index.htm;

    server_name your_domain.com www.your_domain.com;

    location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location ~ /\. {
        deny all;
    }

    location ~* /(?:uploads|files)/.*\.php$ {
        deny all;
    }

}

完成后,保存并关闭文件。 此文件应已被链接到sites-enabled目录,所以它应该是积极的,当我们开始Nginx的。

制作开关

目前,Apache正在端口80上提供我们的文件。这意味着Nginx不能绑定和侦听该端口。 我们需要停止Apache,然后才能启用Nginx来接管。

在某些情况下,如果涉及服务器上的其他内容,您可能希望保留Apache。 您可能有多个网站,并且只将一个网站转换到Nginx。 如果是这种情况,您需要在Apache配置中禁用对端口80的所有引用。

您需要检查的一些文件是:

/etc/apache2/ports.conf
/etc/apache2/apache2.conf
/etc/apache2/httpd.conf
/etc/apache2/sites-enabled/    ## Search all sites in this directory

如果您要继续使用Apache服务网站,最终不得不将Apache端口从80更改为其他类型,您将必须通过Nginx代理这些网站,以便从互联网访问它们。 这是本教程的范围之外,但你可以找到相关信息, 这篇文章

如果您仍然需要Apache运行以提供某些内容,则在配置文件中切换端口后,您可以在打开Nginx时重新加载Apache。 这将切换您的端口80内容到Nginx,同时允许Apache继续为其他内容的功能:

sudo service apache2 reload && sudo service nginx start

然而,如果你没有进一步需要Apache,并且你已经将所有的内容转换到Nginx,你可以在加载Nginx之前关闭Apache:

sudo service apache2 stop && sudo service nginx start

重要的是Apache要么放弃对端口80的控制,要么在启动Nginx之前完全停止。 不这样做可能导致您的Nginx初始化未完成,因为被告知要使用的端口不可用。

如果您的转换成功,并且您的内容都与Nginx一起提供,您可以卸载Apache和所有未使用的依赖项。

您可以通过键入以下内容找到这些:

dpkg --get-selections | grep apache
apache2                         install
apache2-mpm-prefork             install
apache2-utils                   install
apache2.2-bin                   install
apache2.2-common                install
libapache2-mod-auth-mysql       install
libapache2-mod-php5             install

然后,您可以通过键入以下内容卸载这些:

sudo apt-get remove apache2 apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common libapache2-mod-auth-mysql libapache2-mod-php5

您还可以通过键入以下内容来处理不再需要的依赖关系:

sudo apt-get autoremove

结论

你的WordPress现在应该起来并再次运行,这一次支持Nginx。 虽然Apache和Nginx以类似的方式运行,特别是当支持像WordPress这样的全功能前端时,Nginx通常可以用较少的资源执行相同的工作。

虽然这可能无法带来更快的网站,但当您的网站获得大量流量时,这一点变得非常重要。 使用较少的资源意味着您的Web服务器可以在负载较重的情况下继续正常运行。 如果您的内容重新发布并开始看到大量流量,这可能很重要。 Nginx将帮助你处理这个流量,而不分配额外的资源。

作者:Justin Ellingwood
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏