This tutorial shows how to set up the Drupal content management system on Nginx with SEO-friendly pretty links (CURLs, FURLs, whatever they’re called this week).
There have been a host of requests for this guide so here it is. In the next how-to we’ll take this further with the addition of multiple Drupal sites, all powered from the same single Drupal installation.
The procedure now is to create the database and domain zone, edit a new virtual host file with a symlink to Nginx, setup the directory structure, download the Drupal platform, run its installer and tweak the URL and caching options.
Cracking on …
Setup Unmanaged VPS: The Ubuntu-Nginx Guide
Take your virtual private server from zero to hero
.. from blank box to cute-as server ..
with this easy-to-follow copy/paste guide.
22+ parts with video, here’s the index.
One pre-requisite: throughout this guide I refer to the domain domain.com. Be careful to replace that with yourOwnDomain.tld.
Create the Drupal Database
Follow Create a MySQL Database from the Terminal/Command Line.
Add a New Domain Zone
Follow Add a Domain Zone to Your VPS.
Create the Drupal Site’s Virtual Host File
This is your site configuration file or vhost, making it play nice with the Nginx web server. Create it using the nano text editor:-
.. pasting this within (replacing the seven instances of domain.com with YOURdomain.tld):-
Nginx Rewrite Syntax for Drupal Clean URLs
In case you were wondering, the code above that gives you the all-important, SEO-friendly CURLs is located in the site root’s location block (.. location / ..):-
Make a Symbolic Link (symlink)
In a more basic Nginx setup we could add a site configuration to the main Nginx config file, nginx.conf. But that can get pretty messy, especially when we have a bunch of sites to administer. Instead, therefore, we create individual site configuration files – better known as virtual host files or vhosts – as we’ve done above. Then we link these to the nginx.conf file by way of a kind of shortcut – better known as a symbolic link or symlink. So now you know.
Let’s create a symlink for this Drupal site:-
Restart Nginx
And restart the web server so that it recognises our changes:-
Download Drupal into an Nginx-Compatable Directory Structure
First we’ll assume Super User (or root) priviledges:-
.. giving your password, as prompted.
Now to create the new site’s directory structure:-
.. and head to the directory:-
Download the latest Drupal release. If it’s not the latest, no worries, you can upgrade from within the Drupal application once it’s set up. Or check for the latest here. Retrieve the zipped file like so:-
I’m using Drupal 7 here but this Nginx connection works equally well with Drupal 6.
.. and unzip it:-
.. removing the zipped file:-
Change the name of the unzipped Drupal folder to public (the root web folder):-
Prepare Drupal’s Settings.php File
Among other things, Drupal’s settings.php file provides your MySQL database details to the platform.
Firstly, we’ll copy it from default.settings.php, leaving the original intact:-
And set some temporary permissions:-
And give Nginx access to Drupal’s settings file and the complete directory structure:-
Run the Drupal Installer
In a browser, surf to http://domain.com
Following the prompts, here’s a summary of what’s required ..
Standard Install with commonly used features pre-configured. Most will want this.
Minimal Start with only a few modules enabled. If you know Drupal well and want to choose your own content types, choose this.
Click Save and Continue.
Choose Language This screen offers English. Want more choices? Read this.
Click Save and Continue.
Database Configuration Add your MySQL database details.
.. you’ll need the new db name, your username and password.
Click Save and Continue.
Revert Temporary Permissions
Don’t omit to do this:-
.. and exit Super User status (leave root):-
Configure Site
Add some site information, an administrator name (Security Tip: don’t use ‘admin’!) and password and locale settings. Pretty straightforward stuff.
Click Save and Continue.
Start Drupal’s Clean URLs
We already did the donkey work with that simple rewrite rule in the virtual host. Now we’ll enable that. Goto:-
.. ensure Enable Clean URLs is checked and click Save Configuration.
Setup Drupal Caching
Goto:-
.. and under Caching, check Normal (recommended) and Save Configuration.
There are plenty more options to look at but that’s the key stuff for Drupal with Nginx. If you’re after the procedure for setting up multiple sites (individual domains) on Nginx, all working from the same Drupal installation, like I said above, it’ll be published a couple of days after this post.
Have fun!
Setup Unmanaged VPS: The Ubuntu-Nginx Guide
Take your virtual private server from zero to hero
with this easy-to-follow copy/paste guide.
“My local PC runs Windows” Show me for Linux/Mac
“My local machine is Linux/Mac” Show me for Windows
22+ parts with video, here’s the index ..
-
Setup Unmanaged VPS: The Ubuntu-Nginx Guide
Introducing vpsBible’s how-to guide for setting up a super-charged unmanaged VPS featuring Ubuntu and Nginx.
-
VPS (Virtual Private Server) vs Shared vs Dedicated
Before getting stuck in, let’s compare the web host types in detail and weigh up the differences between managed & unmanaged VPS.
-
Set Up a VPS Linux Distribution
Opening a VPS hosting account, we’ll choose, configure & launch a Linux server ‘distribution’.
-
Set Up Command Line Interface (CLI) using PuTTY
Now we’ve got a server to play with, we’ll connect to it, using the ’ssh’ protocol for a super-secure link.
-
Create a Linux User & Set Permissions
Initially you’ve logged into your remote Linux machine as ‘root’. We’ll add you as a user now, with root or SuperUser permissions.
-
Encrypt Data with OpenSSH & Auto-Login with PuTTY
Now we can use ‘authentication keys’ to shore up our connection while simplifying login to an automated, password-free yet secure process.
-
Harden the Secure Shell (SSH) & Create a Firewall
The final security step: galvanizing the OpenSSH protocol and setting up an ‘iptables’ firewall. Now the server is rock ruddy solid.
-
Edit bashrc for User-Friendly Linux, plus System Updates
We use the terminal a whole lot so let’s cut ourselves a break and create some command shortcuts, then update the server.
-
Add a Domain Zone to Your VPS
To make your server aware of yourDomain.com you’ll need a few ‘DNS’ records. Damn this is simple I’m practically asleep!
-
Prepare Linux Server for Email with Postfix
In order to send and receive email from our web applications we’ll install some software and tweak the ‘RDNS’ record.
-
Install PHP5 & MySQL – The One-Stop FastCGI Index Page
Add PHP5 & MySQL, but which FastCGI method is best? Here’s the benchmarking, 4 ways to install/compile, add caching modules & more.
-
Nginx (better than Apache) Web Server
Let’s install this supersonic web server, tweaking its file structure & adding default configuration files.
-
Setup FileZilla for Secure FTP (SFTP)
There’s FTP, and then there’s ‘Secure FTP’. We’ll set up FileZilla using SFTP – and those authentication keys – for secure file transfers.
-
Serve Multiple Sites & Blogs with Virtual Hosts
We want a website folder structure, some permissions, some site-specific configuration files and, hey, we’ll hook up ‘FastCGI’.
-
Adding Sub-Domains with Nginx
Need a sub-domain? If you do, here’s how to add subDomain.yourSite.com with an ‘A record’ and a configuration file.
-
Integrate A CMS Like WordPress, WP MU, Drupal etc
For those of you wanting to use a specific content framework, such as a CMS, blogging or forum software, pop in here and we’ll sort that out.
-
Google Apps for Domain-Specific Email
GA’s free Standard Edition for catchall webmail – POP-ping or IMAP-ped to your desktop client – saves precious server resources for your webs.
-
Moving Day! How to Move Your Blog or Site
Nearly there. Here’s the web site or blog migration guide, relocating to your VPS with minimal or no downtime.
Manage Unmanaged VPS: Ubuntu-Nginx Administration
Already set it up? We’d best maintain it then.
Toggle to the .. Ubuntu-Nginx Admin Index
Manage Unmanaged VPS: Ubuntu-Nginx Administration
Maintain your virtual private server with ..
.. cheatsheets, tutorials, tips & guides.
Head back to the .. Ubuntu-Nginx Installation Index
-
Nginx Control Panel: Here’s the Deal
You’re migrating shared-to-VPS and want a GUI like cPanel? No you don’t, not after you read this! What’s more, you don’t need one either.
-
Nginx Control Panel Workarounds
For every control panel module there’s an equivalent (and faster) terminal command. Let’s compare these.
-
Upgrade to Nginx Latest Version with ZERO Downtime
Keep Nginx up-to-date – and optimized for security. This guide shows precisely how *with no missed server requests*.
-
Compile an Advanced Nginx Module Configuration
Need special web server functions? Here’s how to install or upgrade Nginx with bespoke required modules & parameters.
-
Add Web Sites Nginx Cheatsheet
Once you’ve set up your first site, adding more gets easier. Especially when you refer to this. (Let’s face it, I’m just too good to you.)
-
Adding Sub-Domains with Nginx
Rather than add somesite.tld, maybe you want some.subsite.tld? Here’s how to set your A record using a DNS manager and the vhost file for Nginx.
-
Add/Delete MySQL Database from Command Line
Need a database? Want to bin an old db? This tutorial shows you how using the terminal command line console whatnot.
-
Configure phpMyAdmin for Nginx to Maintain MySQL
Rather than have to crunch databases via the command line, we can make life easier by adding this splendid tool to manage them.
-
Backup/Export MySQL DB with CLI & mysqldump
Here’s how to backup a database from the command line using the handy mysqldump utility.
-
Import MySQL Database using Command Line
Import data to a new database with this simple mysqldump guide .. great for reinstating an old backed-up db, for instance.
-
Batch Replace/Delete Data in MySQL Database
Change repetitive db data with a single command. Rather than manually find & alter each instance, isolate the lot & update multiple content.
-
LOST a MySQL Password? How to RESET it
Lost your MySQL password? That’s a bit of a bummer .. or it would be if you didn’t have this new password setup guide, huh.
-
Backup or Upload with Secure Copy SCP (Linux to Linux)
Never mind FTP m8! Save time and download/upload your files using encrypted SCP (secure copy), the #1 Linux-Linux file transfer solution.
-
Backup or Upload with PuTTY PSFTP (Windows/Linux)
Equivalent to the above, how to transfer your files if you’re unlucky enough to be running Windows for your local PC. Not that I’m biased.
-
*USEFULLY* Park A Spare Domain with Nginx
Got a spare domain name sat around doing nothing? Put it to some use, have it point its traffic at your primary domain. Here’s the deal ..
-
Password Protect Nginx Web Files/Directories
Maybe you want a hidden website directory, say, for projects, or are developing a site and want it off-limits ’till launch day. Top tip ..
-
Redirect Web Pages with Nginx Rewrite Rule
Here’s the syntax to point a site or blog to another domain. That way, for instance, traffic from a passive site benefits an active one.
-
Nginx Error & Access Logs
Need to troubleshoot some error, or want to find out who’s trying to hack your site? Here’s a start .. those tell-tale logs.
-
Subversion for Easy CMS Updates ie WordPress/Drupal/etc
A brief introduction to install and know about the power of Subversion, the version control system to keep scripts and platforms up-to-date.
-
You Tell Me …
Something missing? Probably. Let me know what you’d like included. And if it’s listed below, shout out anyhow and I’ll try to bump it.
Nginx Admin: In the Works ..
This lot’s marked for addition already:-
- Setup or Edit DNS using Bind
- Network Tools Troubleshooting Guide
- The Comprehensive Permissions Guide
- Configuring Nginx Rewrites
- Custom Website Error Page
- Setting up Cron Jobs
- Rsync for Incremental Remote-to-Local Backup
- Cron & Rsync for Automatic Backup
- Cron & mysqldump for Auto DB Backup
- Safeguard Bandwidth with Hotlink Protection
- Block Access with Nginx’ IP Deny
Got a Question? Want to Comment?
This site has no comments system. We've got a better system!
Please use the link at the top of the post and goto this topic's forum thread:-
- to help build community
- for a superior knowledge base
- to keep info in one place, not diluted between forum & comments.
For those posts ported from Guvnr.com (pre-Feb/2010), archive comments remain.
Handy info from these comments is in the process of being ported to the forum and attributed to the original author.
If you think this idea sucks, let me know.
Thank you.























Setup MULTIPLE SITES on DRUPAL 7 with NGINX & Clean URLs: VPS BIBLE - vpsBible March 18th, 2010 at 6:05 pm
[...] Setup Drupal on Nginx, Caching with Pretty Links we created our first Drupal site. Now let’s go to town and add a bunch more – ie, [...]
Configure Nginx with Your Content Management System - vpsBible April 1st, 2010 at 6:12 am
[...] Setup Drupal on Nginx, Caching with Pretty Links [...]