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" )