Ifdefineディレクティブを使ってみる

ApacheのIfdefineディレクティブを使うと、起動時のパラメータでディレクティブの設定を
変えることが出来たりします。今回はこれを使った例のメモ。

設定例


IfDefineディレクティブを使うと、起動時のパラメータ
たとえば、以下のように設定してみます。

<IfDefine MAINTENANCE>
    DocumentRoot "/var/www/maintenance"
    <Directory "/var/www/maintenance">
        Options Indexes FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</IfDefine>

<IfDefine !MAINTENANCE>
    DocumentRoot "/var/www/html"
    <Directory "/var/www/html">
        Options Indexes FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</IfDefine>

上の例の場合、Apache起動時のオプションによって、ドキュメントルートを
切り替えることが出来ます。


Apache起動時に設定を変える

  • Dオプションを指定するかしないかでドキュメントルートを切り替えます。

以下のようにすると、「/var/www/maintenance」がドキュメントルートになります。

# /usr/sbin/httpd -DMAINTENANCE

起動スクリプトのオプションとして用意しておくと、モードを切り替えるような使い方も可能です。


(略)
maintenance() {
        echo -n $"Starting $prog: "
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd -DMAINTENANCE
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}
(略)
case "$1" in
  start)
        start
        ;;
  maintenance)
        maintenance
        ;;
  stop)
        stop
        ;;
  status)
        status -p ${pidfile} $httpd
        RETVAL=$?
        ;;
  restart)
        stop
        start
        ;;
  condrestart|try-restart)
        if status -p ${pidfile} $httpd >&/dev/null; then
                stop
                start
        fi
        ;;
  force-reload|reload)
        reload
        ;;
  graceful|help|configtest|fullstatus)
        $apachectl $@
        RETVAL=$?
        ;;
  *)
        echo $"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}"
        RETVAL=2
esac


今日はこんなところで。