This an amalgamation of the information found on the following pages:
I don’t have the confidence to submit this to the official docs, perhaps you do?
Before You Begin
Admin Requirements
If you want to run a network of blogs you should at least have a basic understanding of UNIX/Linux administration. A basic knowledge of WordPress development, PHP, HTML and CSS is recommended as well.
Setting up and running a multi-site installation is more complex than a single-site install. Reading this page should help you to decide if you really need a multi-site install, and what might be involved with creating one. If the instructions on this page make no sense to you, be sure to test things on a development site first, rather than your live site.
Server Requirements
Since this feature requires extra server setup and more technical ability, please check with your webhost and ask if they support the use of this feature. It is not recommended to try this on shared hosting.
You are given the choice between sub-domains or sub-directories in Step 4: Installing a Network. This means each additional site in your network will be created as a new virtual subdomain or subdirectory.
-
- Sub-domains — like
site1.example.com and site2.example.com
- Sub-directories — like
example.com/site1 and example.com/site2
At the time of writing I have not tested sub-directories with nginx.
It is also possible later, through use of a plugin such as WordPress MU Domain Mapping, to map individual sites to independent domain names.
- Sub-domain sites
- It works using wildcard subdomains. You must have this enabled in Nginx, and you must also add a wildcard subdomain to your DNS records. (See Step 2 how to set up.)
- Some hosts have already set up the wildcard on the server side, which means all you need to add is the DNS record.
- Some shared webhosts may not support this, so you may need to check your webhost before enabling this feature.
WordPress Settings Requirements
- Giving WordPress its own directory will not work in WordPress 3.0 with multisite enabled. It interferes with the member blog lookup.
- You cannot create a network in the following cases:
- “WordPress address (URL)” is different from “Site address (URL)”.
- “WordPress address (URL)” uses a port number other than ‘:80′, ‘:443′.
- You cannot choose Sub-domain Install in the following cases:
- WordPress install is in a directory (not in document root).
- “WordPress address (URL)” is
localhost.
- “WordPress address (URL)” is IP address such as 127.0.0.1.
- You cannot choose Sub-directory Install in the following cases:
- If your existing WordPress installation has been set up for more than a month, due to issues with existing permalinks. (This problem will be fixed in a future version.)
(See wp-admin/network.php for more detail)
Step 1: Backup Your WordPress
Your WordPress will be updated when creating a Network. Please backup your database and files.
Step 2: Setting Wildcard Subdomains
(If this is a Sub-directories Install, skip this step.)
Sub-domain sites work with the use of wildcard subdomains. This is a two-step process:
- Apache must be configured to accept wildcards.
- Find and edit up the
nginx.conf file.
- Check this line (I have listed the server’s ip address too because I used it for DB_HOST in wp-config.php):
server_name example.com 123.456.789.10;
- In the DNS records on your server, add a wildcard subdomain that points to the main installation. It should look like:
A *.example.com
External links:
Step 3: Allow Multisite
To enable the Network menu item, you must first define multisite in the wp-config.php file.
Open up wp-config.php and add this line above where it says /* That's all, stop editing! Happy blogging. */:
define('WP_ALLOW_MULTISITE', true);
Step 4: Installing a Network
This will enable the Network menu item to appear in the Tools menu. Visit Administration > Tools > Network to see the screen where you will configure certain aspects of our network.
Addresses of Sites in your Network
- You are given the choice between sub-domains or sub-directories (if none of the above applies). This means each additional site in your network will be created as a new virtual subdomain or subdirectory. you have to pick one or the other, and you cannot change this unless you reconfigure your install. See also Before you Begin.
- Sub-domains — like
site1.example.com and site2.example.com
- Sub-directories — like
example.com/site1 and example.com/site2
Network Details
- These are filled in automatically.
- Server Address
- The Internet address of your network will be
example.com.
- Network Title
- What would you like to call your network?
- Admin E-mail Address
- Your email address.
Double-check they are correct and click the Install button.
You may receive a warning about wildcard subdomains. Check Setting Wildcard Subdomains.
Warning! Wildcard DNS may not be configured correctly!
The installer attempted to contact a random hostname (13cc09.example.com) on your domain.
To use a subdomain configuration, you must have a wildcard entry in your DNS. This usually means adding a * hostname record pointing at your web server in your DNS configuration tool.
You can still use your site but any subdomain you create may not be accessible. If you know your DNS is correct, ignore this message.
Step 5: Enabling the Network
The rest of the steps are ones you must complete in order to finish. You are going to ignore the last message about adding to the .htaccess file!
- 0. First, back up your existing
wp-config.php.
- 1. Create a
blogs.dir directory under /wp-content/
- This directory is used to stored uploaded media for your additional sites and must be writable by the web server. They should be CHOWNed and CHMODed the same as your
wp-content directory.
- 2. Add the extra lines your WordPress installation generates into your
wp-config.php file.
- These lines are dynamically generated for you based on your configuration.
- Edit the
wp-config.php file while you are logged in to your sites admin panel.
- Paste the generated lines immediately above
/* That's all, stop editing! Happy blogging. */.
- Remove the earlier placed
define('WP_ALLOW_MULTISITE', true); line only if you wish to remove the Network menu in the admin area. You may choose to leave this to be able to access the .htaccess rules again..
- 3. Add the green lines to your nginx.conf file:
...
#access_log logs/host.access.log main;
location ~* ^.+\.(xml|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|swf)$
{
root /usr/share/nginx/html;
rewrite ^/files(/.*)$ /wp-content/blogs.php?file=$1 last;
expires 10d;
break;
}
location / {
root /usr/share/nginx/html;
index index.html index.htm index.php;
if (!-e $request_filename) {
rewrite ^.+/?(/wp-.*) $1 last;
rewrite ^.+/?(/.*\.php)$ $1 last;
rewrite ^(.+)$ /index.php?q=$1 last;
}
}
...
location ~ \.php$ {
rewrite ^/.*(/wp-.*/.*.php)$ $1;
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
...
4. Restart Nginx
- 5.Log in again.
- Once the above steps are completed and the new wp-config.php & nginx.conf files are saved, your network is enabled and configured. You will have to log in again. click “Log In” to refresh your Adminstration Panel. If you have problems logging back in, please clear your browser’s cache and cookies.
-
Step 6: Super Admin Settings
You will now see a new menu section called Super Admin. The menus contained in there are for adding and managing additional sites in your network. Your base WordPress install is now the main site in your network.
Go Super Admin > Options panel to configure network options, and then create sites and users.
Things You Need To Know
Here are some additional things you might need to know about advanced administration of the blog network.
WordPress Plugins
- WordPress Plugins now have additional flexibility, depending upon their implementation across the network.
- Site Specific Plugins: WordPress Plugins to be activated or deactivated by an individual blog owner are stored in the plugins directory. You need to enable the Plugins page for individual site administrators from Network > Options.
- Network Plugins: WordPress Plugins stored in the plugins directory can be activated across the network by the super admin.
- Must-Use Plugins: Plugins to be used by all sites on the entire network may also be installed in the mu-plugins directory as single files, or a file to include a subfolder. Any files within a folder will not be read. These files are not activated or deactivated; if they exist, they are used.
Categories and Tags
- Global terms are disabled in WordPress 3.0 by default. You can use the Sitewide Tags WordPress Plugin or other similar Plugins to incorporate global tags on the portal/front page of the site or on specific pages or blogs within the network to increase navigation based upon micro-categorized content.
.htaccess and Mod Rewrite
Unlike Single Site WordPress, which can work with “ugly” Permalinks and thus does not need Mod Rewrite, MultiSite requires its use to format URLs for your subsites. This necessitates the use of an .htaccess file, the format of which will be slightly different if you’re using SubFolders or SubDomains. The examples below are the standard .htaccess entries for WordPress SubFolders and SubDomains, when WordPress is installed in the root folder of your website. If you have WordPress in it’s own folder, you will need to change the value for RewriteBase appropriately.
SubFolder Example
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
# END WordPress
SubDomain Example
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# uploaded files
RewriteRule ^files/(.+) wp-includes/ms-files.php?file=$1 [L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule . index.php [L]
# END WordPress