サーバ運用」カテゴリーアーカイブ

pkg(またはPorts)でBINDを使う時に気をつけること

FreeBSD8.4とFreeBSD9.2で最新のBINDをpkgで導入するときに気をつける点があるのでメモ

pkgだとportsに比べてコンパイルしなくてもよいので手軽にインストールできます。

# pkg install bind99
# echo "named_enable=\"yes\"" >> /etc/rc.conf
# /etc/rc.d/named start

これだけだとシステムデフォルトのBINDが動いてしまいます。
pkgでインストールしたBINDにするには以下の設定をする必要があります。

# echo "named_program=\"/usr/local/sbin/named\"" >> /etc/rc.conf

ただし、これだけではエラーが出るので起動しません。
chroot環境の/usr/local/etcにBINDの設定ファイルを置く必要があります。

# mkdir -p /var/named/usr/local/etc
# ln -s /etc/namedb/named.conf /var/named/usr/local/etc/
# ln -s /etc/namedb/rndc.key /var/named/usr/local/etc/

これでpkg(またはports)でインストールしたBINDで起動できます。

/var/log/messageで正しく起動しているかを確認しておきましょう。

$ less /var/log/messages
Jul 12 xx:xx:xx gw named[xx]: starting BIND 9.9.5 -t /var/named -u bind
Jul 12 xx:xx:xx gw named[xx]: built with '--localstatedir=/var' '--disable-linux-caps' ...
Jul 12 xx:xx:xx gw named[xx]: ----------------------------------------------------
Jul 12 xx:xx:xx gw named[xx]: BIND 9 is maintained by Internet Systems Consortium,
Jul 12 xx:xx:xx gw named[xx]: Inc. (ISC), a non-profit 501(c)(3) public-benefit
Jul 12 xx:xx:xx gw named[xx]: corporation.  Support and training for BIND 9 are
Jul 12 xx:xx:xx gw named[xx]: available at https://www.isc.org/support
Jul 12 xx:xx:xx gw named[xx]: ----------------------------------------------------
Jul 12 xx:xx:xx gw named[xx]: command channel listening on 127.0.0.1#953
Jul 12 xx:xx:xx gw named[xx]: command channel listening on ::1#953
Jul 12 xx:xx:xx gw named[xx]: all zones loaded
Jul 12 xx:xx:xx gw named[xx]: running

ここのサーバーを調整しました

ここのサーバーはさくらのVPS上でUbuntu 14.04を動かしています。
いくつか問題があったので調整してみました。

nginx+fastcgi+php構成に変更

これまでWordPressのパーマネントの関係で、このブログでは
nginxからリバースプロキシでApacheにリクエストを投げるという無駄なことをしていました。

そこで今回ようやくnginx+fastcgi+php 構成に変更しました。

1. fastcgiのインストール

Ubuntuでは以下のコマンドでインストールします

sudo apt-get install php5-fpm

2. nginxの設定

nginxの設定は以下を参考にさせてもらいました。
nginx+php+fastcgiでwordpressを動かしてみた – polidog lab++
変えているところはfastcgi_passの設定で、UNIXソケットでやりとりするようにしています。

WordPress上でSuperCacheプラグインを使用しているので
http://wiki.dreamhost.com/Nginx#WordPress
を参考にキャッシュが有効になるようにしました。

server {
        listen  80;
        server_name diary.carme-ln.net;
        -- 中略 ---
        location / {
                index index.php index.html index.htm;
                root [path];
 
                if (-f $request_filename) {
                        break;
                }
 
                set $supercache_file '';
                set $supercache_uri $request_uri;
 
                if ($request_method = POST) {
                        set $supercache_uri '';
                }
 
                # Using pretty permalinks, so bypass the cache for any query string
                if ($query_string) {
                        set $supercache_uri '';
                }
 
                if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_" ) {
                        set $supercache_uri '';
                }
 
                # if we haven't bypassed the cache, specify our supercache file
                if ($supercache_uri ~ ^(.+)$) {
                        set $supercache_file /wp-content/cache/supercache/$http_host$1/index.html;
                }
 
                # only rewrite to the supercache file if it actually exists
                if (-f $document_root$supercache_file) {
                        rewrite ^(.*)$ $supercache_file break;
                }
 
                # all other requests go to Wordpress
                if (!-e $request_filename) {
                        rewrite ^.*$ /index.php last;
                }
        }
 
        location ~\.php$ {
                root [path];
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
        }
}

無事に表示できているようなのでApacheを起動しないようにします

sudo update-rc.d -f apache2 remove

Apacheを止めたのでサーバーのメモリ使用量を減らすことが出来ました。めでたし。

サーバーの起動が遅い問題

サーバーを再起動した時に起動がやたら長い問題が出ていました。
さくらのVPSのコンソールから起動の様子を観察していると
“Waiting up to 60 more seconds for network configuration…”
と表示されており調べてみると、
どうやらネットワーク設定に問題があってフェイルセーフでウエイトが掛かっていたようです。

/etc/network/interfacesを見て見るとネットワーク設定を読み込む時にethtoolが呼ばれています。

# The loopback network interface
auto lo
iface lo inet loopback
 
# The primary network interface
auto eth0
iface eth0 inet static
        address xxx.xxx.xxx.xxx
        netmask xxx.xxx.xxx.xxx
        gateway xxx.xxx.xxx.xxx
        dns-nameservers xxx.xxx.xxx.xxx,xxx.xxx.xxx.xxx
post-up /usr/sbin/ethtool -K eth0 tso off

ethtoolのパスを調べてみると/usr/sbinではなく/sbinにありました。
サーバーをアップグレードした際にethtoolのパスが変わって、スクリプトが走らないため起動に時間が掛かっていたようです。
/sbin/ethtool に変更してあげると起動が遅い問題は解消しました

画像の表示などが遅い

起動時にethtoolで設定されるTSOの無効化が有効になっていないせいでした。

post-up /sbin/ethtool -K eth0 tso off

さくらのVPSではこれを入れないと通信が遅くなるみたいです。
このVPSサーバーは初期のVPSマシンなので、最新のサーバーではどうなっているかは分からないです。

自宅サーバーをアップデートした

自宅サーバーのHDDを換装に合わせてサーバーの再構築をしました。
この記事では構築時の設定メモを書いてみます。

サーバー機能

自宅サーバーでは以下の機能を提供しています

  • DHCPサーバー
  • DNSキャッシュサーバー
  • Sambaサーバー
  • Web開発サーバー

DHCPとDNSは止めるわけにはいかないので、VMで代替を用意します。
続きを読む

WordPressの設定を変えてみた

WordPressのプラグイン周りを見直してみた。
参考にしたのは以下のサイト
2011年版!絶対にインストールしたいWordPressプラグイン45個 | Vanilla Stone

1.WPtouchでスマートフォン向け対応
プラグイン側で一発対応してくれるのはありがたい。デフォルトの設定だとメールアドレスが晒されてしまうので表示しないように変更

2.Akismetを有効化
スパムコメントがいっぱい来ていたのでAPIキーを取得してAkismetを有効化
以前はwordpress.comでもAPIキーを取得できたようだけど出来なくなっていたので、Akismet.comから取得

3.Revision Controlで無駄なリビジョンを生成しないようにした
DBを圧迫してしまうので保存数の上限を設定した

4.WP-SuperCacheからQuick Cacheに変更
キャッシュが無いと8Req/secとひどい事になるので入れる
入れるだけで620Req/secと劇的高速化
設定がシンプルなのがいい

他にもいろいろ弄ったけど割愛。
nginxのプロキシキャッシュをいい加減設定しましょう

SSHの接続が遅いのを修正した

家のネットワーク内にDNSキャッシュサーバーとSambaサーバー、その他ゴニョゴニョしたものを運用しています。
ただ、そのマシンにSSHで繋ぐときにやたら時間がかかっていましたが、一応繋がるので放置していました。

それが今回、VMのsshd_configを設定していたときに
SSHD_CONFIG(5)を見ていたらUseDNSという設定項目が目に入った。
どうやらデフォルトだと接続元の逆引きを行なっている模様。

LAN内のマシンからのアクセスなのでおそらく逆引きに失敗してるのだろうとあたりをつけて
逆引きしないようにしたところ、接続時間が劇的に改善しました。

Googleで「SSH 遅い」などで調べてみると、同じような内容がいっぱいヒット。
よくあるTipsだったようです。

nginxを導入してました

2ヶ月ほど前からこのサーバーにnginxを導入してました。
理由の1つはnode.jsやtomcatなどでアプリケーションサーバーを立てる際のフロントエンドにするためです。
もう1つはWordPress(このサイト)のプロキシキャッシュを実現するためです。

構成
www.carme-ln.netはnginxにまかせて、
diary.carme-ln.netはnginxのリバースプロキシでApache+PHPにリクエストを投げてます。

ngnix+FastCGIで構成しているところが多いのですが、
WordPressの設定を変えるのが面倒なのと試したところルーティングがおかしくなってしまったのでこの構成です。

はまったところ
Apache側のアクセスログがサーバーのローカルループバックのアドレスになってしまう点。
nginxの設定に問題があると思ってひたすらproxy_paramsをいじって悩んでました。
が、いろいろ調べているとApache側にmod_rpafを入れることで解決。
Apache側にもIPのログが正しく出力出来るようになりました。

今後について
あとはプロキシキャッシュの設定ですが、これはまた今度に。
あんまりアクセスがないのでWP Super Cacheで今のところ十分だと思ってます。
貧弱サーバーなのでApache.confの設定も変えて以下のような設定にしてみました。

StartServers 3
MinSpareServers 3
MaxSpareServers 6
MaxClients 50
MaxRequestsPerChild 1000