如何在Ubuntu14.04上使用Nginx设置WordPress多站点

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

介绍

WordPress 的多站点功能提供了从单个 WordPress 安装创建多个网站的能力。 每个站点都可以有一个单独的主题、插件集和内容集合(帖子和页面)。 这减少了维护和更新多个 WordPress 安装的开销,同时允许您托管多个彼此完全无关的站点。

WordPress 多站点有两种风格:子目录或子域。 在本教程中,我们将设置 WordPress 多站点以使用子域。 这意味着我们创建的网站将有一个子域网址,例如 http://wp-site.yourdomain.com。 这可以映射到外部域,例如 http://wp-site.net,以便每个站点看起来独立于外部。

先决条件

本教程要求用户具备以下知识:

我们将创建三个具有以下域名的 WordPress 站点:

  • 站点 1:

领域: 示例wp.com (Primary domain)
This is the site that is created when WordPress is installed.

  • 站点 2:

外部域: 购物网站
子域: 购物网站.example.com

  • 站点 3:

外部域: 公司网站.org
子域: companysite.example.com

第一个域是安装 WordPress 的主域名。 确保 为所有三个域 设置 DNS 以指向将托管 WordPress 的 Droplet 的 IP 地址。

第一步 - 设置 DNS 通配符记录

在本节中,我们将为 主域 添加 DNS 通配符记录,以便随时添加更多站点,而无需单独的 A 记录。 (或者,您可以为每个子域添加新的 A 记录。)

注意: 仅对 * 主域 (本教程中的 examplewp.com)必须这样做。

登录到您的 DigitalOcean 控制面板并导航到网络部分。 编辑主域并为此域创建通配符 A 记录 ,指向 Droplet 的 IP 地址。 通过在主机名输入框中输入星号 (*) 来创建通配符记录,如下面的屏幕截图所示。

如果您将域的 DNS 托管在其他地方,则应在此处设置通配符记录。

您现在应该看到的内容:

任何 random-sub-domain.examplewp.com 的 DNS 查询都应该返回您的 Droplet 的 IP 地址。

第二步 - 安装和配置 LEMP 堆栈

在本节中,我们将安装和配置 Nginx、MySQL 和 PHP。 有一篇关于 设置 LEMP 堆栈 的详细文章,如果您愿意,可以参考。 本节将用作快速设置。 在创建 Droplet 时,Select Image 部分的 Applications 选项卡下还有一个 LEMP on Ubuntu 14.04 图像。

更新存储库并安装 Nginx、MySQL、PHP5-FPM 和其他必要的 PHP 模块。

apt-get update
apt-get install -y nginx mysql-server php5-fpm php5-mysql php5-curl php5-mcrypt php5-gd

安装 MySQL 服务器时,系统会提示您输入 root 数据库用户的密码。 请输入强密码,不要留空。 您将输入两次密码。

为 Nginx 创建一个包含 WordPress 文件的文档根目录。 我们将在本教程中使用 /usr/share/nginx/wordpress

mkdir /usr/share/nginx/wordpress

我们将用我们自己的替换 Nginx 的默认虚拟主机,因此在 sites-enabled 目录中删除其符号链接。

rm /etc/nginx/sites-enabled/default

sites-available 目录中创建一个新的虚拟主机文件。 这个文件可以任意命名。 在我们的示例中,我们将其称为 wp-ms

nano /etc/nginx/sites-available/wp-ms

编辑此文件并放置以下配置。 根据您的环境编辑以红色突出显示的文本。 在 server_name 行中,您应该添加所有三个(或更多)多站点域,以及第一个域的通配符子域。

server {
    listen [::]:80 ipv6only=off;
    server_name examplewp.com *.examplewp.com shoppingsite.com companysite.org;

    root /usr/share/nginx/wordpress;
    index index.php index.html index.htm;

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

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

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

    access_log  /var/log/nginx/$host-access.log;
    error_log   /var/log/nginx/wpms-error.log;
}

如果此 Droplet 将仅托管此 WordPress 安装,则 listenserver_name 指令可以更改为以下内容:

listen [::]:80 default_server ipv6only=off;
server_name examplewp.com *.examplewp.com;

access_log 指令中使用 $host 变量会为每个域创建单独的日志文件,例如 examplewp.com-access.logshoppingsite.com-access .log。 无法将此类变量用于 error_log 指令,因此所有错误都记录在一个文件中。

保存此文件并在 sites-enabled 目录中创建此文件的符号链接。

ln -s /etc/nginx/sites-available/wp-ms /etc/nginx/sites-enabled/wp-ms

执行 Nginx 配置测试,如果返回 OK,则重新启动。

service nginx configtest
service nginx restart

第三步 - 为 WordPress 创建 MySQL 数据库和用户

在本节中,我们将为 WordPress 创建一个 MySQL 数据库和一个仅对该数据库具有权限的用户。

root 用户身份登录 MySQL 命令行。

mysql -u root -p

创建一个数据库。

CREATE DATABASE wordpress;

创建一个 MySQL 用户并授予此数据库的权限:

CREATE USER 'wordpress_user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress_user'@'localhost';

将单词 password 替换为强密码。 刷新权限并退出 MySQL 命令行。

FLUSH PRIVILEGES;
exit

记下这些细节,因为在第四步中将需要它们。

数据库名称: WordPress

数据库用户: wordpress_user
数据库密码: 密码

关于 MySQL 用户的更多信息可以在 这篇文章 中找到。

第四步 - 下载并安装 WordPress

在本节中,我们将下载最新版本的 WordPress 并进行安装。 这将用于我们的第一个站点 examplewp.com

下载并解压 WordPress。

wget http://wordpress.org/latest.tar.gz
tar -xf latest.tar.gz

将提取的文件移动到文档根目录中。

mv wordpress/* /usr/share/nginx/wordpress/

将所有权分配给用户 www-data。 这对于媒体上传和核心/插件/主题更新在 WordPress 中工作至关重要。

chown -R www-data:www-data /usr/share/nginx/wordpress

在浏览器中访问 主域 以开始 WordPress 安装。

http://examplewp.com/

如果需要,您可以在 URL 中添加“www”后缀。 单击 Create a Configuration File 按钮,然后单击 Let's go! 按钮。 填写数据库详细信息(使用第三步中的信息),然后单击提交

此时,WordPress 将与数据库建立连接以测试输入的凭据。 连接成功后,会出现 Run the install 按钮。 点击它。 填写 所需信息 表单以设置您的站点标题、用户名、密码和电子邮件,然后单击 安装 WordPress。 为安全起见,建议选择非通用用户名。

第五步 - 启用多站点并创建其他站点

在本节中,我们将启用 WordPress Multisite 并创建本文的 Prequisites 部分中提到的两个附加站点。

必须在 wp-config.php 文件中定义 PHP 常量 以启用 网络设置 页面。

编辑 wp-config.php 文件:

nano /usr/share/nginx/wordpress/wp-config.php

注释 /* That's all, stop editing! Happy blogging. */ 之前添加以下代码

/* Multisite settings */
define( 'WP_ALLOW_MULTISITE', true );

在本教程中,我们将多次编辑此文件。 随意在我们刚刚创建的 /* Multisite settings */ 部分中添加所有新行。

保存文件。 登录 WordPress 管理面板并导航到 工具 > 网络设置 。 选择Sub-domains选项,根据需要修改Network Title,然后点击Install

您将看到要添加到 wp-config.php.htaccess 文件中的两个代码块。 复制类似于以下内容的 wp-config.php 代码:

define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', true);
define('DOMAIN_CURRENT_SITE', 'examplewp.com');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);

编辑 wp-config.php 文件。

nano /usr/share/nginx/wordpress/wp-config.php

注释 /* That's all, stop editing! Happy blogging. */ 之前添加这些行 并保存。 .htaccess 显示的代码可以忽略,因为 Nginx 没有这个文件。

退出 WordPress 管理面板,然后重新登录。 从左上角的管理员 工具栏 ,导航到 我的站点 > 网络管理员 > 站点

单击 Add New 按钮打开 Add New Site 表单。 以下屏幕截图显示了我们示例中购物网站的填写详细信息。 输入的 站点地址 将构成该站点的子域。

单击添加站点,创建的站点将可以通过http://shoppingsite.examplewp.com访问。

重复这些步骤以创建第二个站点(在我们的示例中为 companysite.examplewp.com)。

您现在应该看到的内容:

以下三个 WordPress 网站:

他们每个人都有自己的内容、主题和活动插件集。

第六步 - 设置域映射

在本节中,我们将通过下载并启用 WordPress MU 域映射插件,使您能够为每个 WordPress 站点使用单独的域名。 这个插件允许 WordPress Multisite 的用户将他们的博客/站点映射到另一个域。

通过 SSH 登录到您的 Droplet 并下载 WordPress MU 域映射 插件。 先安装unzip命令,然后解压插件。

wget http://downloads.wordpress.org/plugin/wordpress-mu-domain-mapping.latest-stable.zip
apt-get install unzip
unzip wordpress-mu-domain-mapping.latest-stable.zip

将提取的文件移动到 WordPress 插件目录。

mv wordpress-mu-domain-mapping /usr/share/nginx/wordpress/wp-content/plugins/

将插件目录下的sunrise.php文件复制到wp-content目录下。

cp /usr/share/nginx/wordpress/wp-content/plugins/wordpress-mu-domain-mapping/sunrise.php /usr/share/nginx/wordpress/wp-content/

编辑 wp-config.php 文件并在 注释 /* That's all, stop editing! Happy blogging. */ 之前添加以下行

文件:/usr/share/nginx/wordpress/wp-config.php

define('SUNRISE', 'on');

保存此文件并返回到 Web 浏览器。 从 WordPress 工具栏导航到 我的站点 > 网络管理员 > 插件

单击WordPress MU域映射插件下的网络激活链接。 转到 设置 > 域映射 并对 域选项 进行如下更改:

  • 取消勾选远程登录
  • 检查永久重定向
  • 取消选中将管理页面重定向到站点的原始域

完成后单击保存。 这些设置将对子域(如 companysite.examplewp.com)的所有请求重定向到它们各自的外部域(如 companysite.org),包括管理页面(/wp-admin)。

在下一步中,我们将根据站点 ID 将域名映射到每个站点。 有很多方法可以找到站点的 ID,但为了便于管理,我们将创建一个简单的 WordPress 必备插件 ,它会在 Sites 页面上显示一个额外的 ID 列。

通过 SSH 登录到您的 Droplet 并创建一个 mu-plugins 目录。

mkdir /usr/share/nginx/wordpress/wp-content/mu-plugins

在此目录中创建一个 PHP 文件并粘贴以下代码:

nano /usr/share/nginx/wordpress/wp-content/mu-plugins/wpms_blogid.php

您可以完全复制此内容:

<?php
add_filter( 'wpmu_blogs_columns', 'do_get_id' );
add_action( 'manage_sites_custom_column', 'do_add_columns', 10, 2 );
add_action( 'manage_blogs_custom_column', 'do_add_columns', 10, 2 );

function do_add_columns( $column_name, $blog_id ) {
    if ( 'blog_id' === $column_name )
        echo $blog_id;
    return $column_name;
}

function do_get_id( $columns ) {
    $columns['blog_id'] = 'ID';
    return $columns;
}

Sites > All Sites 部分现在应该显示一个额外的 ID 列。

记下每个站点的 ID 值,然后转到 设置 > 域 页面。 输入站点 ID,后跟站点的外部域。 例如,由于 companysite 的 ID 为 3,因此在此页面上,Site ID 应为 3,域应为 companysite.org

如果您希望将站点 URL 设置为 www.companysite.org,可以添加“www”前缀。 对其他域重复这些步骤。 点击页面底部的【X6X】保存【X14X】。

您现在应该看到的内容:

每个站点都有自己的域名而不是子域; 即,在浏览器中输入 http://companysite.org 将打开 我的在线公司 站点。 您现在可以访问 http://shoppingsite.comhttp://companysite.org 来查看。 您应该会在页面的左上角看到站点标题的变化。

现在每个站点都可以通过自己的 WordPress 管理面板单独维护:

http://examplewp.com/wp-admin/
http://shoppingsite.com/wp-admin/
http://companysite.org/wp-admin/

核心/插件/主题的更新和插件/主题的安装应该从主域的网络管理页面完成:

http://examplewp.com/wp-admin/network/

进一步阅读