LighttpdサーバーでW3トータルキャッシュを使用してWordPressを設定する方法
序章
この記事では、人気のあるキャッシュプラグイン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の終了タグ?>は意図的に省略されています。
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)に移動し、プラグイン>新規追加に移動し、プラグインを検索してインストールします。
プラグインをアクティブにして、設定を変更せずに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に戻り、パフォーマンス>一般設定に移動して、縮小を有効にします。
ブラウザで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="http://example.com/wp-content/cache/minify/000000/M9bPKixNLarUMYYydHMz04sSS1L1cjPz4IJ6uYnF-XkgGihooF9SnppXUlmSkVlUkpqap59VrJ9WmpdckpmfVwwA.js"></script>
サイトのデザインが壊れているように見える場合は、lighttpd.confの縮小リライトルールが正しくないか、lighttpdのリロードを忘れている可能性があります。
ページキャッシング
ページキャッシュは、コンテンツの静的HTMLファイルを作成し、書き換えルールを使用してユーザーに提供します。 すでに書き換えルールを追加しているので、 wp-admin> Performance> GeneralSettingsに移動してページキャッシュを有効にできます。
デフォルトのページキャッシュ方法は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であったため、これらのヘッダーはありません。 ディスクにキャッシュされたページを表示することもできます。
root@wp-lighttpd:~# 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"
)