雑文」カテゴリーアーカイブ

Nginx + lsyncd で WordPress を負荷分散させる

ハイパフォーマンスHTTPサーバ Nginx入門最近、め組ことデジタルキューブさんと、一緒に仕事をやらせてもらってます。
今の所は、主に WordPress サイトの高速化とかやってるんですけど、その中で WordPress サイトを複数台のサーバで負荷分散させて高速化させる案件があったので、その時の作業内容をシェア。
最近はさくらの VPS とか、低価格の VPS が出てきてるので、個人でも手を出せる領域かもしれませんね。
今回は2台のサーバを使って PHP の処理を負荷分散しました。

構成は、こんな感じです。

  • プライマリサーバ ( vps1.example.com : 192.168.0.1 )
     

    • Nginx, Load Balancer、PHP FastCGI のアプリケーションサーバ
    • lsyncd (リアルタイム rsync を実現するためのサービス)
  • セカンダリサーバ ( vps2.example.com : 192.168.0.2 )
     

    • Nginx, PHP FastCGI のアプリケーションサーバ
    • MySQL
    • rsyncd

※ 説明のため IP アドレスはローカルアドレスに設定していますが、実際にはグローバルアドレスを使用しています。
ブラウザからの要求は、すべてプライマリサーバ ( vps1.example.com ) が受け取り、PHP の処理を二台のサーバに分散させます。
もちろん、処理が重くなってきたら、3台目、4台目 と追加していくことが可能です。
続きを読む

nginx + ssl + fastcgi で phpMyAdmin を動作させようとしてハマった

Nginx + fastCGI な環境で SSL を有効にした状態で、phpMyAdmin を使用しようとしたんですがログインしようとすると
「400 Bad Request The plain HTTP request was sent to HTTPS port」
と言うエラーが発生してログインできない。
url を見ると、トップページで https://example.com/phpmyadmin/ にアクセスしてるのに、ログインボタンをクリックすると http://example.com:443/phpmyadmin/ 〜 に飛ばされちゃうという現象が起きてました。

結論から言うと「fastcgi_param HTTPS on;」を指定していなかったのが悪かったようです。
続きを読む

uninstall.php

WordPress でプラグインを無効化したときにオプションを消すには

uninstall.phpWordPressプラグインで生成したテーブルをプラグインアンインストール時に削除する方法について、twitterでゴチャゴチャ話していたら、@takayukister さんに良いことを教えてもらいました。
via. Twitter / @takayukister: @miya0001 @wokamoto 二人が話して
プラグインディレクトリの中に uninstall.php を設置するか、プラグインディレクトリの中に、register_uninstall_hook() を使用すれば WordPress の管理画面からプラグインを削除する時に動作する処理を記述できるようです。
この辺の処理方法について、早速 @miya0001 さんがまとめてくれてます。

ただ、この方法だと削除時にしか動作しないんすよね。
できれば、無効化したときにも wp-options テーブルから消したい。
でも、一時的に無効化して、あとで有効化する場合にはオプション消されちゃうと再設定しなきゃだから辛いしなぁ..
とか、考えてたんですが、良い方法を思いつきました。
続きを読む

sleep sort する jQuery プラグイン

注意: sleep sort は、あくまでもネタです。ネタとして楽しんでください。
コメント欄でも指摘されてますが、実用に耐えるものではありません。
間違っても実用しようとか思わないように!

一部で話題沸騰中のソートアルゴリズム「sleep sort」を jQuery 用プラグインとして実装してみました。
via. 常識を覆すソートアルゴリズム!その名も"sleep sort"! – Islands in the byte stream

とりあえず、デモ。
下の textarea に数値をスペース区切りで入力してから「Sleep Sort!」をクリックしてください。
ソートされるはずです。



続きを読む

ん~、正直なところ、$("#checkboxid").checked()が欲しいっすw

jQuery で checkbox が check されてるか調べる

ん〜、正直なところ、$("#checkboxid").checked()が欲しいっすwTwitter で、@masaru_b_cl さんが、「jQueryでチェックボックスがチェックされているかどうかを取るのって、 var checked = $("#checkboxid").attr("checked"); しか方法ないのか・・・」と言ってました。
jQuery オブジェクトには .checked() とかってメソッドがありません。
なので checkbox がチェックされてるかどうかは、通常以下のようにして取得します。

checked = $("#checkboxid").attr("checked");
checked = $("#checkboxid").get(0).checked;

ただ、これだとあまり直感的じゃないですね。
checked = $("#checkboxid").checked(); のようにして、取得できるとカッコイイです。
本当にできないんでしょうか?
実は .checked() メソッドを jQuery オブジェクトに追加するのは、すごい簡単です。
続きを読む

VPS 借りたら、せめてこれくらいはやっとけというセキュリティ設定

LinuxサーバセキュリティさくらのVPSやら、ServersMan@VPS やらの出現で、やたらと敷居のさがった感のある VPS 。
かく言うこのサーバもめ組VPSで運用されてるわけですが、VPSを既存のレンサバ感覚で使ってる人にせめてこれくらいのセキュリティ設定はやっておいたほうが良いよっていうお話です。

今回、対象にする OS は CentOS です。
さくらVPS 借りて Ubuntu とか、別の OS で運用するような中上級者は自分でできるよね。
続きを読む

nginx で ssl 設定をする

ハイパフォーマンスHTTPサーバ Nginx入門nginx で SSL 設定をするのは、スゴイ簡単です。
サーバ証明書と秘密鍵がすでにあるなら、/etc/nginx/nginx.conf に以下の設定を追加するだけでおっけ。

server {
    :
    listen 443 default ssl;
    ssl on;
    # サーバ証明書(サーバ証明書に中間CA証明書を連結したもの)
    ssl_certificate      /usr/local/nginx/conf/cert.pem;
    # 秘密鍵
    ssl_certificate_key  /usr/local/nginx/conf/cert.key;  
    :
}

via. HttpSslModule
続きを読む

wp_remote_get のススメ

WordPress プラグインで外部サービスのAPIを叩く場合、以前は Snoopy 等のライブラリを include して行っていました。
# Snoopy が WordPress コアソースに含まれていたため。

しかし、WordPress 2.7 以降では wp_remote_get() という関数が追加されたため、もっぱらこれを使っています。
例えば Topsy の API を使って、パーマリンクに対して言及されたツイートを取得するには以下のようなコードを書けば実現できます。

$response = wp_remote_get('http://otter.topsy.com/trackbacks.json?url='.rawurlencode(get_permalink()).'&tracktype=tweet&perpage=50');
if( !is_wp_error( $response ) && $response["response"]["code"] === 200 ) {
	$response_body = json_decode($response["body"]);
	var_dump($response_body->response->list[0]);
} else {
	// Handle error here.
}

簡単でしょ?

以下、簡単に wp_remote_get の使い方
続きを読む

MySQL 5.5.11 にアップデート

remi レポジトリに MySQL-5.5.11 がきてたのでアップデート。
MySQL 5.5 replace MySQL 5.1 – Les RPM de Remi – Blog

アップデート後 mysqld が起動しなくなったので焦ったけど、メモリ不足が原因だったので query_cache と tmp_table_size に割り当ててるメモリを減らして解決。
あと innodb_buffer_pool_size は指定してなかったんだけど、デフォルトで 128MB 取られるようだったので、これも指定して 64M に下げて運用。
設定は、もうちょい追い込まないとダメだなぁ。
メモリがプアな VPS だと、色々と工夫が必要です。

アップデート後に注意が必要な点としては、他にも [mysqld] ディテクティブの default-char-set が使えなくなったとかあるようです。
firegoby » Blog Archive » MySQL5.5.3にアップグレードしたら再起動に失敗した。

nginx 1.0.0 が出てます

nginx高速、軽量な HTTP サーバ(かつリバースプロキシサーバ) nginx が開発開始から9年を経て、ようやくメジャーリリース 1.0.0 公開されました。
W3Tecs によれば、Apache, IIS についで第3位の6.8%のシェアを誇るまでになったそうです。
このサイトと私がやってるフォトブログ shot.dogmap.jp も、リバースプロキシサーバとして nginx を使用しています。

nginx の導入方法として過去にも何回かエントリ書いてますので、そちらも読んでやってください。

続きを読む