‘linux’ タグのついている投稿

apache設定中の凡ミス

2013年9月15日

あいかわらずのあるある話。

ssl.conf の設定をいじっておりました

apacheが動いているサーバでssl.confをいじっておりました。
場所はお決まりの /etc/httpd/conf.d/ssl.conf です。

なんとなくオリジナルを退避しておきたくなりました

ファイルを弄る前になんとなくオリジナルを退避しておこうと思ってしまい

# cp ssl.conf ssl.org.conf

とオリジナルをコピーしました。設定終わったら消せばいいや、的な感覚です。

案の定apacheが起動しなくなりました

ssl.confを無事編集完了して、さてさてapache再起動

# service httpd start
Starting httpd: (98)Address already in use: make_sock: could not bind to address [::]:443
                                                           [  OK  ]

あれあれ?おかしなメッセージが出るなぁ、どこか間違えたかなぁ?でもOKって出るなぁ、なんて思ってブラウザでアクセスするもつながらない。

# ps ax | grep httpd
25156 pts/0    S+     0:00 grep httpd

OK出てるけど実際にはhttpdのプロセスはあがってない状態。

原因は明らかな凡ミス

原因はssl.org.confが同じconf.dディレクトリにあったから。apacheが起動時にどちらも読み込んでいるので、重複した設定があってエラーになっていた。ですよねー。

# rm ssl.org.conf
# service httpd start
Starting httpd:                                            [  OK  ]

ボヤッとしてると起こしてしまう恥ずかしい凡ミスの一例。


さくらのVPSにLighttpd+PHPをインストール その1の続き。

FastCGIのインストール

Lighttpdは、PHPを外部のCGIとして実行する。それにFastCGIを使用する。
ソースを、http://www.fastcgi.com/dist/からダウンロードする。インストールした時点での最新版は、2.4.0。
サーバ上で以下の手順を実施。

#tar -zxvf fcgi-2.4.0.tar.gz
#cd fcgi-2.4.0
#./configure
#make
#make install

FastCGIはこれで終わり。

PHPのインストール

せっかくなのでPHPも最新版をソースからインストールした。
CentOSでのインストールなのでhttp://redmine.lighttpd.net/wiki/lighttpd/TutorialLighttpdAndPHP#Othersを参照する。
ソースを、http://www.php.net/downloads.phpからダウンロードする。インストールした時点での最新版は、5.3.5。
サーバ上で以下の手順を実施。

#tar -zxvf php-5.3.5.tar.gz
#cd php-5.3.5
#./configure \
  --enable-mbstring \
  --with-pear

ここで、configure: error: xml2-config not found. Please check your libxml2 installation. のエラーが出たので、libxml2,libxml2-develをインストールして再度実行。

#tar -zxvf php-5.3.5.tar.gz
#yum install libxml2
#yum install libxml2-devel
#./configure \
  --enable-mbstring \
  --with-pear
#make
#make install

configureのパラメータが異なっているが、PHP5.3以降では、cgi-phpがデフォルトで作成される。–disable-cgiオプションでFastCGIを有効にする設定となる。
訂正:どうも–disable-cgiがあると、php-cgiが作成されない模様。ちょっと混乱しているので後で調べて書き直す
それ以前のPHPの場合には、http://redmine.lighttpd.net/wiki/lighttpd/TutorialLighttpdAndPHP#Othersの例に沿う。
参考:http://www.php.net/manual/ja/install.unix.lighttpd-14.php

Lighttpdの設定

PHP関連の設定は、http://redmine.lighttpd.net/wiki/lighttpd/TutorialLighttpdAndPHP#Configurationを参照する。

#vi /etc/lighttpd/conf.d/fastcgi.conf
fastcgi.server = ( ".php" => ((
                     "bin-path" => "/usr/local/bin/php-cgi",
                     "socket" => "/tmp/php.socket"
                 )))

#vi /etc/lighttpd/modules.conf
include "conf.d/fastcgi.conf" ← #でコメントアウトされているので、コメントアウトをはずす。

ここまでの設定で、ひとまずPHPも動作する、はず。

#service lighttpd restart

今度は、さくらのVPSにLighttpd+PHPをインストールしてみたので、インストール時のメモ。OSは、前回と同じくCentOS5なので、基本的には、WebARENA CLOUD9にLighttpd+PHPをインストール その1の時と同じ。前回は、すでにApache+PHP環境だったのをyum removeしてからのインストールだったのが、今回は、さくらのVPSをセットアップした直後の作業だったので、今回の方が例外が少ないと思う。

参考サイト

Lighttpdのサイトを主に参考にした。ドキュメントは英文だけど、そんなにややこしくないので大丈夫。

Lighttpdのインストール

ソースを、http://www.lighttpd.net/download/からダウンロードする。インストールした時点での最新版は、1.4.28。
サーバ上で以下の手順を実施。

#tar -zxvf lighttpd-1.4.28.tar.gz
#cd lighttpd-1.4.28
#./configure \
  --without-zlib \
  --without-bzip2 \
  --disable-ipv6

ここで、configure: error: pcre-config not found, install the pcre-devel package or build with –without-pcre のエラーが出たので、pcre-develをインストールして再度実行。

#yum install pcre-devel
#./configure \
  --without-zlib \
  --without-bzip2 \
  --disable-ipv6
#make
#make install

インストール後の設定は、http://redmine.lighttpd.net/wiki/lighttpd/InstallFromSource#Init-scriptの項目に沿って実施する。
サーバがCentOSなので

#sed -e 's/FOO/lighttpd/g' doc/initscripts/rc.lighttpd.redhat > /etc/init.d/lighttpd
#chmod a+rx /etc/init.d/lighttpd
#cp -p doc/initscripts/sysconfig.lighttpd /etc/sysconfig/lighttpd
#mkdir -p /etc/lighttpd
#cp -R doc/config/conf.d/ doc/config/*.conf doc/config/vhosts.d/ /etc/lighttpd/

#chkconfig lighttpd on

起動スクリプト中のサーバのパスが /usr/sbin/lighttpd で、実際のインストールパスが /usr/local/sbin/lighttpd なので、シンボリックリンクを作成。

#ln -s /usr/local/sbin/lighttpd /usr/sbin/lighttpd

Lighttpdの設定

後でFastCGIやPHPはインストールするとして、Lighttpdがうまく動くかを確認。色々な仕組みを一緒に使う時は、ひとつひとつ動くことを確認しながら進めると意外とはまらない。設定については、http://redmine.lighttpd.net/wiki/lighttpd/TutorialConfigurationで大まかな設定例があり、それに沿えば良い。

#vi /etc/lighttpd/lighttpd.conf
var.log_root    = "/var/log/httpd" ←apacheと同じ場所に設定

server.port = 80 ←サーバのポート。apacheがポート80でまだ動いているような場合は別のポートにする必要がある

server.username  = "nobody"  ←デフォルトで lighttp になっているが、ユーザもグループも作っていないので nobody にした
server.groupname = "nobody"

server.document-root = "/var/www/public_html" ←デフォルトのドキュメントルートを設定

実行ユーザをnobodyにしたので、ログディレクトリ /var/log/httpd がnobodyでアクセス出来るよう設定する。

#chown nobody:nobody /var/log/httpd

ここまでの設定でひとまずLighttpdは動く、はず。

#service lighttpd start

apacheのようにデフォルトページが用意されていないので、最初は何も表示されない。自前でindex.htmlを作ってドキュメントルートにアップして確認する。

 
さくらのVPSにLighttpd+PHPをインストール その2へ続く。


ちょっとした理由で、bashでImageMagickを使った画像縮小バッチ処理を書いた。
perlのImage::Magickを使うのがポピュラーなんだろうけれど、マシンにImageMagickは入れてあるが、Image::Magickモジュールは無いという微妙な状況だったのでbashで書いてみた。ソースは以下のとおり。

#!/bin/bash

size=$(identify $1 | cut -d " " -f 3)
width=$(echo $size | cut -d "x" -f 1)
height=$(echo $size | cut -d "x" -f 2)
if [ $width -gt $height ]; then
  if [ $width -gt 200 ]; then
    ratio=$((20000/$width))%
  else
    ratio=100%
  fi
else
  if [ $height -gt 200 ]; then
    ratio=$((20000/$height))%
  else
    ratio=100%
  fi
fi
convert -geometry $ratio -quality 80 $1 $2
exit 0

resize.sh なんて名前で保存して、実行権限つけて
./resize.sh 縮小前の画像ファイル名 縮小後の画像ファイル名
といった具合で実行する。
上記のソースの例では、縦横大きい方が最大200ピクセルになるように縮小される。ロジックはよくあるもの。

ImageMagickを使うことはたまにあるけれど、大抵はperl上から呼び出している。今回はperlを使えないという一風変わった制限の中での対処となった。画像処理は比較的、負荷が高めなので、バッチで回せるところは出来るだけバッチにしておきたい所。
それだけのためにシェルからperlを呼び出すのであれば、今回のようにシェルの中だけで対応することも可能というサンプル、になっているかな?