序章
この記事では、人気のあるキャッシュプラグイン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="https://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"
)