如何在 Lighttpd 服务器上使用 W3 Total Cache 设置 WordPress

介绍


本文将向您展示如何使用流行的缓存插件 W3 Total Cache 在 Lighttpd 网页服务器上设置 WordPress. 假设您已经设置了 LLMP 堆栈并有 PHP 与 Lighttpd 一起工作. 我们将进行大量的手动配置,以使 minify 和页面缓存与 Lighttpd 一起工作,因为 W3 Total Cache不支持这个网页服务器(与 Apache 和 Nginx 一样)。

允许所需的模块


WordPress 需要 permalinks 的「mod_rewrite」,但此模块在 Lighttpd configurationp 文件中被评论。

1nano /etc/lighttpd/lighttpd.conf
2
3server.modules = (
4        "mod_access",
5        "mod_alias",
6        "mod_compress",
7        "mod_redirect",
8#       "mod_rewrite",
9)

改变

1#       "mod_rewrite",

1"mod_rewrite",

我们还需要访问日志为我们的网站,所以启用 accesslog模块。

1lighttpd-enable-mod accesslog

创建虚拟主机


为 WordPress 网站添加虚拟主机 - 请确保用自己的域名更换 example.com

1nano /etc/lighttpd/lighttpd.conf
2
3$HTTP["host"] =~ "(^|www\.)example.com$" {
4    server.document-root = "/var/www/example.com"
5    accesslog.filename = "/var/log/lighttpd/example.com-access.log"
6    server.error-handler-404 = "/index.php"
7}

error-handler-404 设置为 index.php 就足以让 permalinks 工作。

1service lighttpd force-reload

下载和安装WordPress


在将WordPress下载到VPS之前,您将创建一个MySQL数据库和一个拥有该数据库权限的用户。

1echo "CREATE DATABASE wordpress" | mysql -u root -p
2echo "GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost' IDENTIFIED BY 'S3cRet_pass'" | mysql -u root -p

用你自己的值代替 wpuserS3cRet_pass。下载最新版本的WordPress。

1wget http://wordpress.org/latest.tar.gz

将文件提取到虚拟主机的 document-root中,您现在将有一个名为wordpress的目录,在这个位置重新命名为您的域名,以匹配 server.document-root指令的值。

1cd /var/www
2tar -xf ~/latest.tar.gz
3mv wordpress example.com

将该目录中的所有文件的所有权更改为www-data

1chown www-data:www-data -R example.com/

打开浏览器,输入您的域名并完成WordPress的安装,我们必须启用并选择一个永久链接结构,但在此之前,我们有一个问题要解决:WordPress在启用Lighttpd上失败的Permalink之前对Apache mod_rewrite进行检查,所以我们必须强迫WordPress启用Permalink。

创建一个 必须使用插件目录。

1mkdir /var/www/example.com/wp-content/mu-plugins

在里面创建一个文件

1nano /var/www/example.com/wp-content/mu-plugins/rewrite.php

如下代码。

1<?php
2add_filter( 'got_rewrite', '__return_true' );

關閉的 PHP 標籤 ?> 已故意省略。

WordPress Permalinks

登录到 wp-admin,导航到设置 >永久链接并选择一个永久链接结构。

如何设置 W3 Total Cache 插件


将此插件配置为 lighttpd 是不同的,因为 W3TC 仅支持 Apache 和 Nginx,所以我们将手动进行大部分配置。 安装此插件从 Plugins > Add New,激活它并停留在这里。

编辑 lighttpd 配置文件,并为 minification和页面缓存添加重写指令。

 1nano /etc/lighttpd/lighttpd.conf
 2
 3$HTTP["host"] =~ "(^|www\.)example.com$" {
 4    server.document-root = "/var/www/example.com"
 5    accesslog.filename = "/var/log/lighttpd/example.com-access.log"
 6    server.error-handler-404 = "/index.php"
 7
 8    #Rewrite rules for minified files
 9    url.rewrite-if-not-file = (
10        "^/wp-content/cache/minify/(.+\.(css|js))$" => "/wp-content/plugins/w3-total-cache/pub/minify.php?file=$1"
11    )
12
13    #Rewrite rules for page cache enhanced
14    #This is to prevent page cache rules from messing up minify rules
15    $HTTP["url"] !~ "(.+\.(css|js|xml|html))" {
16
17    #Bypass cache if the request contains any of these cookies
18    $HTTP["cookie"] !~ "(comment_author|wp\-postpass|w3tc_logged_out|wordpress_logged_in|wptouch_switch_toggle)" {
19
20    #Bypass cache for POST requests
21    $HTTP["request-method"] != "POST" {
22
23    #Bypass cache if query string isn't empty
24    $HTTP["querystring"] !~ "(.*)" {
25        url.rewrite-if-not-file = (
26            "(.*)" => "/wp-content/cache/page_enhanced/example.com/$1/_index.html"
27        )
28    }
29    }
30    }
31    }
32}

/wp-content/cache/page_enhanced/example.com/$1/_index.html 路径中替换 example.com 以使用您安装 WordPress 的确切域名。

保存文件并重新加载lighttpd

1service lighttpd force-reload

进入WordPress管理面板(wp-admin),导航到 ** Plugins > Add New**,搜索并安装插件。

Installing W3 Total Cache

激活插件并返回 SSH 控制台,而不改变任何设置。

W3 Total Cache 插件的浏览器缓存模块会从页面缓存和 minify 缓存中创建 gzip 文件,这将根据接受编码请求标题向用户提供,但 lighttpd 可以用 mod_compress 模块压缩飞行上的内容,所以我们会禁用此选项。

使用 sed命令,找到并更换配置条目。

1cd /var/www/example.com/
2sed -i "s/'browsercache.cssjs.compression' => true/'browsercache.cssjs.compression' => false/" wp-content/w3tc-config/master.php
3sed -i "s/'browsercache.html.compression' => true/'browsercache.html.compression' => false/" wp-content/w3tc-config/master.php
4sed -i "s/'browsercache.other.compression' => true/'browsercache.other.compression' => false/" wp-content/w3tc-config/master.php
5sed -i "s/'browsercache.cssjs.compression' => true/'browsercache.cssjs.compression' => false/" wp-content/cache/config/master.php
6sed -i "s/'browsercache.html.compression' => true/'browsercache.html.compression' => false/" wp-content/cache/config/master.php
7sed -i "s/'browsercache.other.compression' => true/'browsercache.other.compression' => false/" wp-content/cache/config/master.php

微型化


此选项已知破坏了主题和插件的设计,所以只使用它,如果你知道它会为你工作。

在启用此选项之前,Auto Minify Test必须被禁用,这是因为插件需要一组重写规则,以便成功完成 Minify Auto 测试.虽然我们可以尝试将它们转换为 lighttpd (从.htaccess 或 nginx.conf) 它不值得时间,因为自动缩小在网站上工作,即使没有这些测试。

1cd /var/www/example.com/
2sed -i "s/'minify.auto.disable_filename_length_test' => false/'minify.auto.disable_filename_length_test' => true/" wp-content/w3tc-config/master.php
3sed -i "s/'minify.auto.disable_filename_length_test' => false/'minify.auto.disable_filename_length_test' => true/" wp-content/cache/config/master.php

回到 wp-admin 中,导航到 **性能 > 一般设置 ** 并启用 minify。

Enable Minify

在浏览器中打开您的WordPress网站,并在 ****部分查看,您会发现像这样的小型CSS和JS:

 1<!DOCTYPE html>
 2<!--[if IE 7]>
 3<html class="ie ie7" lang="en-US">
 4<![endif]-->
 5<!--[if IE 8]>
 6<html class="ie ie8" lang="en-US">
 7<![endif]-->
 8***
 9<html lang="en-US">
10***
11<head><link rel="stylesheet" type="text/css" href="http://example.com/wp-content/cache/minify/000000/M9AvKU_NK6ksycgsKklNzdNPy88rKdZPT81LLcpMzs8r1jFAV1FcUpmTCgA.css"media="all" />
12<script type="text/javascript" src="http://example.com/wp-content/cache/minify/000000/M9bPKixNLarUMYYydHMz04sSS1L1cjPz4IJ6uYnF-XkgGihooF9SnppXUlmSkVlUkpqap59VrJ9WmpdckpmfVwwA.js"></script>

如果网站的设计看起来坏了,这可能意味着在lighttpd.conf中错误地缩小重写规则,或者你忘了重新加载lighttpd。

页面缓存


页面缓存创建您的内容的静态HTML文件,并为用户提供重写规则. 由于我们已经添加了重写规则,我们可以通过前往 wp-admin > 性能 > 一般设置来启用页面缓存。

Page Cache

默认的 _Page Cache 方法是 _Disk: Enhanced,但如果您意外地将其更改为其他东西,您无法将其更改,因为此选项被禁用。

所以我们需要通过编辑文件来手动修改它。

1cd /var/www/example.com
2sed -i "s/'pgcache.engine' => '\([a-z]\+\)'/'pgcache.engine' => 'file_generic'/" wp-content/w3tc-config/master.php
3sed -i "s/'pgcache.engine' => '\([a-z]\+\)'/'pgcache.engine' => 'file_generic'/" wp-content/cache/config/master.php

这允许使用 Disk Enhanced的页面缓存. 要测试它是否有效,请使用弯曲请求一个未缓存的页面。

 1# curl -v -s -o /dev/null http://example.com/about/
 2* About to connect() to example.com port 80 (#0)
 3*   Trying 1.1.1.1... connected
 4> GET /about/ HTTP/1.1
 5> User-Agent: curl/7.23.1
 6> Host: example.com
 7> Accept: */*
 8>
 9< HTTP/1.1 200 OK
10< Link: <http://example.com/?p=28>; rel=shortlink
11< Last-Modified: Tue, 05 Nov 2013 15:55:53 GMT
12< Vary:
13< X-Pingback: http://example.com/xmlrpc.php
14< Content-Type: text/html; charset=UTF-8
15< Transfer-Encoding: chunked
16< Date: Tue, 05 Nov 2013 15:55:53 GMT
17< Server: lighttpd/1.4.31
18<
19{ [data not shown]
20* Connection #0 to host example.com left intact
21* Closing connection #0

再次执行相同的请求。

 1# curl -v -s -o /dev/null http://example.com/about/
 2* About to connect() to example.com port 80 (#0)
 3*   Trying 1.1.1.1... connected
 4> GET /about/ HTTP/1.1
 5> User-Agent: curl/7.23.1
 6> Host: example.com
 7> Accept: */*
 8>
 9< HTTP/1.1 200 OK
10< Vary: Accept-Encoding
11< Content-Type: text/html
12< Accept-Ranges: bytes
13< ETag: "94995388"
14< Last-Modified: Tue, 05 Nov 2013 15:55:53 GMT
15< Content-Length: 23659
16< Date: Tue, 05 Nov 2013 15:55:55 GMT
17< Server: lighttpd/1.4.31
18<
19{ [data not shown]
20* Connection #0 to host example.com left intact
21* Closing connection #0

注意两种标题之间的差异。第一个答案有标题 **Link:**和 X-Pingback,这些标题由PHP添加。第二个答案纯粹是HTML,所以它没有这些标题。

 1root@wp-lighttpd:~# ls -lR /var/www/example.com/wp-content/cache/page_enhanced/www.example.com/
 2/var/www/example.com/wp-content/cache/page_enhanced/www.example.com/:
 3total 12
 4drwxr-xr-x 2 www-data www-data 4096 Nov 5 21:25 about
 5drwxr-xr-x 2 www-data www-data 4096 Nov 5 21:21 front-page
 6drwxr-xr-x 2 www-data www-data 4096 Nov 5 21:23 sample-page
 7
 8/var/www/example.com/wp-content/cache/page_enhanced/www.example.com/about:
 9total 24
10-rw-r--r-- 1 www-data www-data 23659 Nov 5 21:25 _index.html
11
12/var/www/example.com/wp-content/cache/page_enhanced/www.example.com/front-page:
13total 28
14-rw-r--r-- 1 www-data www-data 25100 Nov 5 21:21 _index.html
15
16/var/www/example.com/wp-content/cache/page_enhanced/www.example.com/sample-page:
17total 28
18-rw-r--r-- 1 www-data www-data 25837 Nov 5 21:23 _index.html

要检查网站是否支持压缩,请使用 curl 的 --压缩 选项。

 1# curl -v -s -o /dev/null/ --compressed http://example.com/about/
 2* About to connect() to example.com port 80 (#0)
 3*   Trying 1.1.1.1... connected
 4> GET /about/ HTTP/1.1
 5> User-Agent: curl/7.23.1
 6> Host: www.example.com
 7> Accept: */*
 8> Accept-Encoding: deflate, gzip
 9>
10< HTTP/1.1 200 OK
11< Vary: Accept-Encoding
12< Content-Encoding: gzip
13< Last-Modified: Tue, 05 Nov 2013 15:55:53 GMT
14< ETag: "2062104151"
15< Content-Type: text/html
16< Accept-Ranges: bytes
17< Content-Length: 4819
18< Date: Tue, 05 Nov 2013 16:01:03 GMT
19< Server: lighttpd/1.4.31
20<
21{ [data not shown]
22* Connection #0 to host www.example.com left intact
23* Closing connection #0

请注意 内容长度内容编码标题:内容长度以前为23659个,但现在只有4819个。

浏览器缓存


此类缓存告知浏览器可以将对象(如图像,CSS和JS)存储在其自身缓存中多长时间,这需要添加 ExpiresCache-Control标题,这是使用mod_expire模块完成的。

启用此模块

1lighttpd-enable-mod expire

并在虚拟主机内部添加必要的配置。

「Nano /etc/lighttpd/lighttpd.conf」

1#Browser Cache
2$HTTP["cookie"] !~ "(wordpress_logged_in)" {
3$HTTP["url"] =~ "^/(.+\.(css|js|png|jpg|bmp|ico)\??.*)$" {
4    expire.url = ( "" => "access plus 365 days" )
5}
6}

在这个区块中,我们检查用户是否先登录,然后与所提到的扩展相匹配。你也可以在分开的``的存储框中添加更多的扩展。

1service lighttpd force-reload

并检查与 curl 新头条。

 1# curl -I example.com/wp-content/themes/twentythirteen/style.css
 2
 3HTTP/1.1 200 OK
 4Expires: Wed, 05 Nov 2014 16:31:33 GMT
 5Cache-Control: max-age=31536000
 6Content-Type: text/css
 7Accept-Ranges: bytes
 8ETag: "2905279475"
 9Last-Modified: Thu, 24 Oct 2013 19:39:10 GMT
10Content-Length: 52290
11Date: Tue, 05 Nov 2013 16:31:33 GMT
12Server: lighttpd/1.4.31

更新插件


此配置是在WordPress 3.7.1上完成的,W3 Total Cache 0.9.3 和这些都很好地工作. 任何未来的更新到W3 Total Cache,改变重写目录结构将破坏minifcation和页面缓存(尽管后者是不可见的)。

更容易将它们迁移到 lighttpd. 目前,Apache 使用以下规则来缩小

1RewriteBase /wp-content/cache/minify/
2RewriteRule ^(.+\.(css|js))$ ../../plugins/w3-total-cache/pub/minify.php?file=$1 [L]

在Lighttpd中,这个规则成为了

1url.rewrite-final = (
2        "^/wp-content/cache/minify/(.+\.(css|js))$" => "/wp-content/plugins/w3-total-cache/pub/minify.php?file=$1"
3    )

至于页面缓存,Apache 已

1RewriteRule .* "/wp-content/cache/page_enhanced/%{HTTP_HOST}/%{REQUEST_URI}/_index.html" [L]

Lighttpd不允许在重写位置的服务器变量,所以我们很难编码它。

1url.rewrite-if-not-file = (
2    "(.*)" => "/wp-content/cache/page_enhanced/example.com/$1/_index.html"
3)
Submitted by:
Published At
Categories with 技术
Tagged with
comments powered by Disqus