如何在 Ubuntu VPS 上将 WordPress 安装从 Apache 迁移到 Nginx

金钱(警告)

** 状态:** 被贬值

如果您目前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议升级或迁移到支持的 Ubuntu 版本:

** 原因:** Ubuntu 12.04 已于 2017 年 4 月 28 日到期(EOL)并且不再收到安全补丁或更新。

** 相反,请参阅:** 此指南可能仍然有用作为参考,但可能不会在其他Ubuntu版本上工作. 如果可用,我们强烈建议使用为您正在使用的Ubuntu版本撰写的指南。

介绍


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

虽然WordPress可以配置为在大多数网页服务器上运行,但对于许多人来说,一个受欢迎的,也许是默认的选择是Apache网页服务器。

Nginx,另一个网页服务器,由于其易用性,灵活性和资源使用率低,以快速的速度获得了普及。 许多人开始选择 Nginx 超过 Apache 来托管他们的 WordPress 安装,因为这些原因。 虽然在 如何使用 Nginx 安装 WordPress上有很多资源,但迁移现有安装有时看起来很困难。

在本指南中,我们将讨论如何在 Ubuntu 12.04 服务器上将现有的 WordPress 安装从 Apache 迁移到 Nginx. 我们假定您在 Ubuntu 12.04 上安装了 WordPress 与 Apache 以下 本指南

安装 Nginx 和 PHP5-FPM


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

1sudo apt-get update
2sudo apt-get install nginx

与Apache不同的是,Nginx的设计选择不包括核心PHP处理功能,相反,Nginx决定通过将这些请求传递给专用的PHP处理器,它可以保持专注,同时解决问题。

使用 Nginx 執行 PHP 檔案的標準選擇是名為「php5-fpm」的工具,我們需要安裝此套件,以便我們的 WordPress 安裝可以處理它所依賴的 PHP 檔案:

1sudo apt-get install php5-fpm

现在,我们可以开始真正的工作,配置我们的组件来接管Apache。

配置 PHP5 FPM


我们将从配置PHP处理器开始,因为这是相对直接的和简单的。

首先,我们需要在我们的 php5-fpm 配置文件中修改一个值。

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

查找 cgi.fix_pathinfo 参数,并将其修改为这样:

1cgi.fix_pathinfo=0

如果这个参数被设置为1,php5-fpm将试图通过搜索所需的文件来服务PHP文件,然后尝试猜测并返回密切的匹配,如果没有找到确切的匹配。

这是非常不安全的,因为它可以允许您的网站暴露敏感信息给外部用户. 它是更安全的,以 php5-fpm 返回文件,如果它完全匹配所请求的文件,否则返回错误的用户。

保存并关闭此文件,当你完成。

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

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

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

查找定义倾听指令的位置,我们将修改此,以便使用接口与 Web 服务器进行通信。

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

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

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

1sudo service php5-fpm restart

创建 Nginx 服务器区块配置


现在,我们已经准备好配置我们的 Nginx 服务器块, Nginx 服务器块与 Apache 虚拟主机相似,因为它们描述了特定网站的配置。

像Apache一样,Ubuntu上的Nginx通过一个网站可用目录来配置网站,然后将这些网站链接到网站可用来服务它们。

现在就打开这个文件:

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

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

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

1server {
2
3}

首先,重要的是要知道每一个 Nginx 指令都必须以半列(;)结束,如果不包含此项指令,则会导致 Nginx 误解文件,这可能会导致服务器无法启动。

在服务器块中,我们指定该网站应该听到哪个端口来获得用户的连接. 默认情况下,到网页浏览器的 HTTP 流量在端口 80 上提供,所以我们会告诉 Nginx 寻找连接。

我们还想指定文档根,我们的WordPress文件默认存储在那里。

如果您遵循上述指南,WordPress文件应位于/var/www目录中。如果您以其他方式安装,您的WordPress文件可能会存储在/var/www/wordpress,/home/wordpress/public_html或其他位置。调整指令的值以匹配您的配置。

server {
    listen 80;

    root /var/www;
}

接下来,我们将添加一条指令,告诉 Nginx在请求目录时要尝试服务哪些文件. 用于描述目录的文件称为目录索引. 在WordPress中,这个文件将被称为index.php。 其他在HTML中写的索引文件可以用作反馈。

虽然如果WordPress是我们配置的唯一网站,这可能并不重要,包括本指令将允许我们添加其他网站而不会再次修改此文件。

server {
    listen 80;

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

    server_name your_domain.com www.your_domain.com;
}

我们在服务器块中放置的剩余信息将进一步分区为位置块,位置块允许我们指定具体的规则,当请求匹配特定模式时该怎么做。

首先,我们将创建一个与根分区匹配的位置块,这将适用于您用指令定义的文件夹中的文件。

我们将添加的规则会告诉 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系统中的起始点表示)。

最后,我们防止任何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;
    }

}

当你完成时,保存并关闭文件. 此文件应该已经链接到网站启用目录,所以当我们启动 Nginx 时,它应该是活跃的。

让交换机


目前,Apache正在在端口80上服务我们的文件,这意味着 Nginx 无法绑定并聆听该端口,我们需要在允许 Nginx 接管之前停止Apache。

在某些情况下,如果 Apache 参与服务器上的其他内容,您可能有多个网站,并且只将一个网站迁移到 Nginx. 如果是这样,您需要在您的 Apache 配置中禁用所有引用端口 80。

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

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

如果你要继续使用Apache服务网站,并最终需要将Apache端口从80更改为其他东西,你将不得不通过Nginx代理这些网站,以便它们可以从互联网上访问。

如果您仍然需要运行 Apache 来服务某些内容,在您在配置文件中切换端口后,您可以在打开 Nginx 时简单地重新加载 Apache。

1sudo service apache2 reload && sudo service nginx start

但是,如果您不再需要 Apache,并且已将所有内容转移到 Nginx,您可以在下载 Nginx 之前关闭 Apache:

1sudo service apache2 stop && sudo service nginx start

重要的是,Apache要么放弃对端口80的控制,要么在启动 Nginx 之前完全停止。

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

你可以通过键入找到这些:

1dpkg --get-selections | grep apache

1apache2 install
2apache2-mpm-prefork install
3apache2-utils install
4apache2.2-bin install
5apache2.2-common install
6libapache2-mod-auth-mysql install
7libapache2-mod-php5 install

然后您可以通过键入类似的东西来卸载这些:

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

您还可以通过键入来处理不再需要的依赖性:

1sudo apt-get autoremove

结论


虽然Apache和Nginx都以类似的方式运作,特别是当支持像WordPress这样的全功能前端时,Nginx通常可以用更少的资源完成相同的工作。

虽然这可能不一定会导致一个更快的网站,但当您的网站收到大量流量时,它变得非常重要。使用更少的资源意味着您的Web服务器可以在较重的负载下继续运作。

By Justin Ellingwood
Published At
Categories with 技术
comments powered by Disqus