Installing Drupal 6.4 On A Lighttpd Web Server (Debian Etch)
Version 1.0
Author: Falko Timme <ft [at] falkotimme [dot] com>
Last edited 09/02/2008
This guide explains how you can install Drupal 6.4 on a lighttpd web server on Debian Etch. Drupal comes with an .htaccess file with mod_rewrite rules (for Apache) that do not work on lighttpd. Without this .htaccess file it is not possible to have clean URLs in your Drupal installation. Fortunately there's a way to make lighttpd behave as if it could read the .htaccess file.
I do not issue any guarantee that this will work for you!
1 Preliminary Note
I have tested this on a Debian Etch server where lighttpd and PHP5 are already installed and working (e.g. like in this tutorial). I'll use the hostname www.example.com and lighttpd's default document root /var/www (where I will install Drupal) in this tutorial for demonstration purposes. Of course, you can use any other vhost as well, but you might have to adjust your lighttpd.conf.
2 Installing mod_magnet
I will use a file called drupal.lua that contains the rewrite rules needed by Drupal (e.g. for clean URLs). Lighttpd needs the module mod_magnet so that it can understand the drupal.lua file. Therefore we install mod_magnet...
apt-get install lighttpd-mod-magnet
... and enable it:
lighty-enable-mod magnet
Next we download the drupal.lua file:
cd /etc/lighttpd
wget http://nordisch.org/drupal.lua
(If the download link doesn't work for some reason, here's the content of the drupal.lua file:
-- little helper function
function file_exists(path)
local attr = lighty.stat(path)
if (attr) then
return true
else
return false
end
end
function removePrefix(str, prefix)
return str:sub(1,#prefix+1) == prefix.."/" and str:sub(#prefix+2)
end
-- prefix without the trailing slash
local prefix = '/drupal'
-- the magic ;)
if (not file_exists(lighty.env["physical.path"])) then
-- file still missing. pass it to the fastcgi backend
request_uri = removePrefix(lighty.env["uri.path"], prefix)
if request_uri then
lighty.env["uri.path"] = prefix .. "/index.php"
local uriquery = lighty.env["uri.query"] or ""
lighty.env["uri.query"] = uriquery .. (uriquery ~= "" and "&" or "") .. "q=" .. request_uri
lighty.env["physical.rel-path"] = lighty.env["uri.path"]
lighty.env["request.orig-uri"] = lighty.env["request.uri"]
lighty.env["physical.path"] = lighty.env["physical.doc-root"] .. lighty.env["physical.rel-path"]
end
end
-- fallthrough will put it back into the lighty request loop
-- that means we get the 304 handling for free. ;)
|
)
Because I want to install Drupal directly in the document root (/var/www) and not in a subdirectory, I open /etc/lighttpd/drupal.lua and change local prefix = '/drupal' to local prefix = '':
vi /etc/lighttpd/drupal.lua
[...]
-- prefix without the trailing slash
local prefix = ''
[...]
|
Next I open /etc/lighttpd/lighttpd.conf and change the values of index-file.names and url.access-deny and add a line for magnet.attract-physical-path-to:
vi /etc/lighttpd/lighttpd.conf
[...]
## files to check for if .../ is requested
#index-file.names = ( "index.php", "index.html",
# "index.htm", "default.htm" )
index-file.names = ( "index.php" )
## Use the "Content-Type" extended attribute to obtain mime type if possible
# mimetype.use-xattr = "enable"
#### accesslog module
accesslog.filename = "/var/log/lighttpd/access.log"
## deny access the file-extensions
#
# ~ is for backupfiles from vi, emacs, joe, ...
# .inc is often used for code includes which should in general not be part
# of the document-root
#url.access-deny = ( "~", ".inc" )
url.access-deny = ( "~", ".inc", ".engine", ".install", ".module", ".sh", "sql", ".theme", ".tpl.php", ".xtmpl", "Entries", "Repository", "Root" )
magnet.attract-physical-path-to = ( "/etc/lighttpd/drupal.lua" )
[...]
|
Finally I restart lighttpd:
/etc/init.d/lighttpd restart
Lighttpd is now ready for Drupal 6.4.
Installing Drupal 6.4 On A Lighttpd Web Server (Debian Etch) - Page 2
Recent comments
6 hours 58 min ago
11 hours 48 min ago
16 hours 36 min ago
18 hours 57 min ago
19 hours 14 min ago
19 hours 25 min ago
23 hours 26 min ago
1 day 12 min ago
1 day 2 hours ago
1 day 9 hours ago