序章


この記事では、人気のあるキャッシュプラグインW3TotalCacheを使用してLighttpdWebサーバーでWordPressをセットアップする方法を説明します。 すでにLLMPスタックをセットアップしていて、PHPがLighttpdで機能していることを前提としています。 W3 Total Cache はこのWebサーバーをそのままではサポートしていないため(ApacheやNginxの場合と同様)、Lighttpdでミニファイとページキャッシュを機能させるために多くの手動構成を行います。 。

必要なモジュールを有効にする


WordPressはパーマリンクにmod_rewriteを必要としますが、このモジュールはLighttpdconfigurationpファイルでコメント化されています。 したがって、ファイルを編集してを削除します

nano /etc/lighttpd/lighttpd.conf

server.modules = (
        "mod_access",
        "mod_alias",
        "mod_compress",
        "mod_redirect",
#       "mod_rewrite",
)

変化する

#       "mod_rewrite",

        "mod_rewrite",

サイトのアクセスログも必要なので、accesslogモジュールを有効にします。

lighttpd-enable-mod accesslog

仮想ホストを作成する


WordPressサイトの仮想ホストを追加します。必ずexample.comを独自のドメイン名に置き換えてください。

nano /etc/lighttpd/lighttpd.conf

$HTTP["host"] =~ "(^|www\.)example.com$" {
    server.document-root = "/var/www/example.com"
    accesslog.filename = "/var/log/lighttpd/example.com-access.log"
    server.error-handler-404 = "/index.php"
}

「error-handler-404」を「index.php」に設定するだけで、パーマリンクを機能させることができます。 lighttpdサービスをリロードします。

service lighttpd force-reload

WordPressをダウンロードしてインストールする


WordPressをVPSにダウンロードする前に、MySQLデータベースとそのデータベースの権限を持つユーザーを作成します。

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

wpuserおよびS3cRet_passを独自の値に置き換えます。 WordPressの最新バージョンをダウンロードします。

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

仮想ホストのdocument-root内のファイルを抽出します。 これで、この場所に「wordpress」という名前のディレクトリが作成されます。 server.document-root ディレクティブの値と一致するように、これをドメインの名前に変更します。

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

このディレクトリ内のすべてのファイルの所有権を「www-data」に変更します

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

ブラウザを開き、ドメイン名を入力して、WordPressのインストールを完了します。 パーマリンク構造を有効にして選択する必要があります。 しかし、その前に解決すべき問題があります。WordPressは、lighttpdで失敗するパーマリンクを有効にする前にApachemod_rewriteのチェックを実行します。 したがって、WordPressにパーマリンクを有効にするように強制する必要があります。

「MustUse」プラグインディレクトリを作成します。

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

その中にファイルを作成します

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

次のコードで。

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

PHPの終了タグ?>は意図的に省略されています。

WordPress Permalinks

wp-admin にログインし、[設定]>[パーマリンク]に移動して、パーマリンク構造を選択します。

W3トータルキャッシュプラグインの設定


W3TCはApacheとNginxのみをサポートしているため、lighttpdでこのプラグインを構成する方法は異なります。そのため、構成の多くを手動で行います。 このプラグインをプラグイン>[新規追加]からインストールし、アクティブ化してここで停止します。 このプラグインのオプションページを使用して最初に設定することはありません。

lighttpd設定ファイルを編集し、minificationおよびページキャッシュ用の書き換えディレクティブを追加します。 追加の構成は、error-handler-404の後に仮想ホストブロック内に入ります。

nano /etc/lighttpd/lighttpd.conf

$HTTP["host"] =~ "(^|www\.)example.com$" {
    server.document-root = "/var/www/example.com"
    accesslog.filename = "/var/log/lighttpd/example.com-access.log"
    server.error-handler-404 = "/index.php"

    #Rewrite rules for minified files
    url.rewrite-if-not-file = (
        "^/wp-content/cache/minify/(.+\.(css|js))$" => "/wp-content/plugins/w3-total-cache/pub/minify.php?file=$1"
    )

    #Rewrite rules for page cache enhanced
    #This is to prevent page cache rules from messing up minify rules
    $HTTP["url"] !~ "(.+\.(css|js|xml|html))" {
    
    #Bypass cache if the request contains any of these cookies
    $HTTP["cookie"] !~ "(comment_author|wp\-postpass|w3tc_logged_out|wordpress_logged_in|wptouch_switch_toggle)" {
    
    #Bypass cache for POST requests
    $HTTP["request-method"] != "POST" {
    
    #Bypass cache if query string isn't empty
    $HTTP["querystring"] !~ "(.*)" {
        url.rewrite-if-not-file = (
            "(.*)" => "/wp-content/cache/page_enhanced/example.com/$1/_index.html"
        )
    }
    }
    }
    }
}

/wp-content/cache/page_enhanced/example.com/$1/_index.htmlパスのexample.comを、WordPressをインストールした正確なドメインに置き換えます。

ファイルを保存してlighttpdをリロードします

service lighttpd force-reload

WordPress管理パネル(wp-admin)に移動し、プラグイン> [新規追加]に移動し、プラグインを検索してインストールします。

Installing W3 Total Cache

プラグインをアクティブにして、設定を変更せずにSSHコンソールに戻ります。

W3 Total Cacheプラグインのブラウザキャッシュモジュールは、ページキャッシュからgzipされたファイルを作成し、キャッシュを縮小します。これは、「Accept-Encoding」リクエストヘッダーに基づいてユーザーに提供されます。 ただし、lighttpdは mod_compress モジュールを使用してその場でコンテンツを圧縮できるため、このオプションを無効にします。

sed コマンドを使用して、構成エントリを見つけて置き換えます。

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

縮小化


このオプションは、テーマとプラグインのデザインを壊すことが知られているため、うまくいくことがわかっている場合にのみ使用してください。 この記事では、 23 テーマが使用されました。これは、縮小化で正常に機能します。

このオプションを有効にする前に、「自動縮小テスト」を無効にする必要があります。 これは、プラグインが MinifyAutoテストを正常に完了するために一連の書き換えルールを必要とするためです。 (.htaccessまたはnginx.confから)lighttpdに変換することはできますが、これらのテストがなくてもサイトで自動縮小が機能するため、時間の価値はありません。

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

wp-adminに戻り、パフォーマンス>一般設定に移動して、縮小を有効にします。

Enable Minify

ブラウザでWordPressサイトを開き、 セクション。 あなたはこのような縮小されたCSSとJSを見つけるでしょう:

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

サイトのデザインが壊れているように見える場合は、lighttpd.confの縮小リライトルールが正しくないか、lighttpdのリロードを忘れている可能性があります。

ページキャッシング


ページキャッシュは、コンテンツの静的HTMLファイルを作成し、書き換えルールを使用してユーザーに提供します。 すでに書き換えルールを追加しているので、 wp-admin> Performance> GeneralSettingsに移動してページキャッシュを有効にできます。

Page Cache

デフォルトのページキャッシュ方法Disk:Enhanced ですが、誤って別のものに変更した場合、このオプションが無効になっているため、元に戻すことはできません。

したがって、ファイルを編集してこれを手動で変更する必要があります。

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

これにより、 DiskEnhancedを使用したページキャッシュが有効になります。 それが機能するかどうかをテストするには、curlを使用して、キャッシュされていないページを要求します。

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

同じリクエストを再度実行してください。

# curl -v -s -o /dev/null http://example.com/about/
* About to connect() to example.com port 80 (#0)
*   Trying 1.1.1.1... connected
> GET /about/ HTTP/1.1
> User-Agent: curl/7.23.1
> Host: example.com
> Accept: */*
>
< HTTP/1.1 200 OK
< Vary: Accept-Encoding
< Content-Type: text/html
< Accept-Ranges: bytes
< ETag: "94995388"
< Last-Modified: Tue, 05 Nov 2013 15:55:53 GMT
< Content-Length: 23659
< Date: Tue, 05 Nov 2013 15:55:55 GMT
< Server: lighttpd/1.4.31
<
{ [data not shown]
* Connection #0 to host example.com left intact
* Closing connection #0

両方のヘッダーの違いに注意してください。 最初の応答には、PHPによって追加されたヘッダー Link:およびX-Pingbackがあります。 2番目の応答は純粋にHTMLであったため、これらのヘッダーはありません。 ディスクにキャッシュされたページを表示することもできます。

[email protected]:~# ls -lR /var/www/example.com/wp-content/cache/page_enhanced/www.example.com/
/var/www/example.com/wp-content/cache/page_enhanced/www.example.com/:
total 12
drwxr-xr-x 2 www-data www-data 4096 Nov  5 21:25 about
drwxr-xr-x 2 www-data www-data 4096 Nov  5 21:21 front-page
drwxr-xr-x 2 www-data www-data 4096 Nov  5 21:23 sample-page

/var/www/example.com/wp-content/cache/page_enhanced/www.example.com/about:
total 24
-rw-r--r-- 1 www-data www-data 23659 Nov  5 21:25 _index.html

/var/www/example.com/wp-content/cache/page_enhanced/www.example.com/front-page:
total 28
-rw-r--r-- 1 www-data www-data 25100 Nov  5 21:21 _index.html

/var/www/example.com/wp-content/cache/page_enhanced/www.example.com/sample-page:
total 28
-rw-r--r-- 1 www-data www-data 25837 Nov  5 21:23 _index.html

サイトが圧縮をサポートしているかどうかを確認するには、curlの –compressedオプションを使用します。

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

Content-LengthおよびContent-Encodingヘッダーに注意してください。コンテンツの長さは以前は23659でしたが、現在は4819になっています。

ブラウザキャッシュ


このタイプのキャッシュは、オブジェクト(画像、CSS、JSなど)を独自のキャッシュに保持できる時間をブラウザに通知します。 これには、ExpiresおよびCache-Controlヘッダーを追加する必要があります。これはmod_expireモジュールを使用して行われます。

このモジュールを有効にする

lighttpd-enable-mod expire

仮想ホスト内に必要な構成を追加します。

nano /etc/lighttpd/lighttpd.conf

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

このブロックでは、ユーザーが最初にログインしていないかどうかを確認してから、記載されている拡張子を持つファイルを照合します。 「|」で区切られた角かっこ内に拡張機能を追加することもできます。 lighttpdをリロードします

service lighttpd force-reload

そして、curlで新しいヘッダーを確認します。

# curl -I example.com/wp-content/themes/twentythirteen/style.css

HTTP/1.1 200 OK
Expires: Wed, 05 Nov 2014 16:31:33 GMT
Cache-Control: max-age=31536000
Content-Type: text/css
Accept-Ranges: bytes
ETag: "2905279475"
Last-Modified: Thu, 24 Oct 2013 19:39:10 GMT
Content-Length: 52290
Date: Tue, 05 Nov 2013 16:31:33 GMT
Server: lighttpd/1.4.31

プラグインの更新


この構成は、WordPress3.7.1とW3Total Cache 0.9.3で行われ、これらでうまく機能します。 リライトディレクトリ構造を変更するW3Totalキャッシュへの将来の更新は、ミニフィケーションとページキャッシュを壊します(後者は表示されませんが)。 したがって、このプラグインをアップグレードする前に、Ubuntu 12.10イメージのWordPressでドロップレットを起動し、W3 Total Cacheをインストールして、新しい書き換えルールについて.htaccessファイルを確認してください。

それらをlighttpdに移行する方が簡単です。 現在、Apacheはミニファイに次のルールを使用しています

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

lighttpdでは、このルールは次のようになります。

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

ページキャッシングに関しては、Apacheは

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

Lighttpdはリライト場所でサーバー変数を許可しないため、ハードコーディングしました。

url.rewrite-if-not-file = (
    "(.*)" => "/wp-content/cache/page_enhanced/example.com/$1/_index.html"
)

提出者:http: //jesin.tk/