ARAGO for Internet Wiki Project AkuAku

This web site is powered by Arago for Internet v7.0 UTF-8 edition on FreeBSD
SPC main menu Expand/Fold
Products 取扱商品 Expand/Fold
SouthWind  Expand/Fold
Q&A Technical support Expand/Fold
BBS 掲示板 Expand/Fold
Easy PC life Expand/Fold

Last Edit Date: 09/02/2008

apacheの設定

httpdサーバです。 これによってwebサイトを公開します。 Windowsではiisがありますが、 最近のwindowsに対する攻撃はすさまじいものがあります。 Security上iisは外部に公開されないwebに使用するべきです。 現在80%以上のサイトがApacheを使用しています。

ここではApacheをvirtual hostで複数のdomainのサイト運用するようにします。 
cgiもhttpdocもそれぞれ異なったディレクトリで運用します。 外部からサイトの変更には、ftpでアクセスできるディレクトリをきちんと管理してください。 ほかのサイトのdocumentをアクセスできるようではそれぞれの管理者にとってセキュリティの心配があります。 ひとつのipに複数の domainを割り当てている条件で設定します。

2.0になってからacceptfilterがないとのwarningが出ていましたが、FreeBSD側の設定もここで紹介します。
/etc/rc.confに
apache22_http_accept_enable="YES"
を追加してください。 これを入れることによって早くなるのかどうかはさっぱりわかりません! この設定とapache22.shの組み合わせで必要なkloadは行ってくれます。

現在のapacheのバージョンは2.2です。 いろいろなところが細かく変わっています。 2.2ではmakeの前に./configureで変更を加える必要があります。

# Dynamic Shared Object (DSO) Support
# LoadModule foo_module modules/mod_foo.so
とあったところは現在指定するとエラーになります。 また必要な機能を./configureで指定しないとその機能が組み込まれません。

まずtarballをwww.apache.orgからダウンロードします。

ns1#tar -xf httpd-2.2.9.tar.gz
で解凍します。
展開されたディレクトリに移動
まずDynamic Shared Objectをサポートします。 さてここでふたつの方法があります。 違いは? またオプションが"all"と"most"があります。 allというとこれはまた山ほど使いもしないものが含まれるかもしれないと、mostで、 sharedではなくということで簡単に
ns1#./configure --enable-modules="most"
これでmod_rewriteは正常に動きます。
後は
make
make install

---------------------------------------------------
portからインストールします。
cd /usr/port/www/apache2

make
make install
----------------------------------------------------

portでもソースコードをダウンロードしてコンパイルしても、ファイルのディレクトリは次のようになります。

/usr/local/apache2/にインストールされます。
/usr/local/apache2/confにconfファイルがあります。
/usr/local/apache2/binには apachectlがあります。 
apachectl start で起動
apachectl stopで停止
apachectl restart 停止後再起動
logファイルは/usr/local/apache2/logs


起動は
/etc/rc.conf に
##httpd
apache22_enable="YES"
apache22_http_accept_enable="YES"
を追加してください。

tarballからのインストールの時には
/usr/local/etc/rc.d/に
この文章の最後にあるapache22.shをコピーしてください。

accept_filterを有効にすると? この設定のほうが早くなるんでしょうか? よくわかりません。 loader.confによってsccf_httpがloadされていないときには、
apache22_http_accept_enable="YES"になっているとapache22.shでloadしてくれます。 理屈はわかるのですが?? 


rebootしてください。

これでdefualtのページは、rebootすることによって見ることができます。

正常にapacheのページが表示されれば成功です。 作業後はこのdeaultページはsecurity上blockしてください。

confファイルの変更

下記のconfファイルでは同じipに複数の異なったdomainのwebサイトをサポートしています。 ファイル名はhttpd.confです。 セットアップが終了するとデイレクトリにコピーされています。
/usr/local/apache2/conf/ にあります。
見つからないときには
find / -name httpd.conf
で探してください。

必要なところを編集しましょう。

### Section 1: Global Environment
ServerRoot "/usr/local/apache2"
不明なときには
find / -name httpd.conf
この/confの上のディレクトリです。


### Section 2: 'Main' server configuration

# ServerAdmin: Your address, where problems with the server should be
# e-mailed. This address appears on some server-generated pages, such
# as error documents. e.g. admin@your-domain.com
#管理者のメイルアドレスを指定
ServerAdmin ojisan@aaa.org

#サーバ名 
ServerName www.aaa.org:80

DocumentRoot "/home/virtualdomains/default/httpddocs"

#defaultのhttpdocのディレクトリを指定、 実際には使わない
#


#次をコメントアウト
#
# AllowOverride FileInfo AuthConfig Limit Indexes
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
#
# Order allow,deny
# Allow from all
#

#
# Order deny,allow
# Deny from all
#

#


#lookupしよう!
#HostnameLookups Off
HostnameLookups On

#いらないのでコメントアウト
#Alias /icons/ "/usr/local/apache2/icons/"

##
## Options Indexes MultiViews
## AllowOverride None
## Order allow,deny
## Allow from all
##


#AliasMatch ^/manual(?:/(?:de|en|es|fr|ja|ko|ru))?(/.*)?$ "/usr/local/apache2/manual$1"

##
## Options Indexes
## AllowOverride None
## Order allow,deny
## Allow from all

##
## SetHandler type-map
##


# SetEnvIf Request_URI ^/manual/(de|en|es|fr|ja|ko|ru)/ prefer-language=$1
# RedirectMatch 301 ^/manual(?:/(de|en|es|fr|ja|ko|ru)){2,}(/.*)?$ /manual/$1$2
#


CustomLog logs/access_log common

#ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"

####
## AllowOverride None
## Options None
## Order allow,deny
## Allow from all
##


###IndexOptions FancyIndexing VersionSort

#日本語なのでjaを最初に持ってくる。 今時UTF-8の時代です! 意味をなさないと思います???
LanguagePriority ja en ca cs da de el eo es et fr he hr it ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW

#sslをサポートしないのでコメントアウト
#
# Include conf/ssl.conf
#



ここからがVirtual Hostの指定
### Section 3: Virtual Hosts

# コメントアウトをはずす
##NameVirtualHost *:80
NamevirtualHost *:80

ここでは www.aaa.org と www.bbb.comがあるとします。
必要なだけ列挙してください。
#include することもできます。
指定がここでされていないと、virtual hostでないところで指定したdefaultの設定が、使われます。
必要な指定はここで追加してください。
5.4 から吐き出されるhttpd.confには次のものが追加されています。

  Allowoveride None 
Order deny,allow
Deny from all

ですから、Virtualdomainの中で同じような定義を必要なdirectoryにします。
allow from all
としてください。 これがないと、apacheが発狂します! 表示されたりaccess denyとなったりします。
apachによって決して頭の皮をはがされるこてゃありません。 はがしたの白人たちです。


ServerAdmin admin@aaa.org
DocumentRoot /home/virtualdomains/aaa.org/httpddocs
ServerName www.aaa.org
ErrorLog /var/log/aaa.org-error_log
CustomLog /var/log/aaa.org-access_log common
ScriptAlias /cgi-bin/ "/home/virtualdomains/aaa.org/cgi-bin/"

  Allowoveride None 
Order deny,allow
Deny from all
Allow from all



AddHandler cgi-script .prg
Options +ExecCGI
Order deny,allow
Deny from all
Allow from all



ServerAdmin admin@bbb.com
DocumentRoot /home/virtualdomains/bbb.com/httpddocs/
ServerName www.bbb.com
ErrorLog /var/log/bbb.com-error_log
CustomLog /var/log/bbb.com-access_log common
ScriptAlias /cgi-bin/ "/home/virtualdomains/bbb.com/cgi-bin/"

 Allowoveride None 
Order deny,allow
Deny from all
Allow from all



AddHandler cgi-script .prg
Options +ExecCGI
Order deny,allow
Deny from all
Allow from all


最後の行の
##Include etc/apache21/Includes/*.conf
はコメントアウト!

httpd.conf ここで終了

cgiやhtmlページをアクセスして、permission deniedと表示されるとき、 error logでconfiguration  denied client accessと出るときは、設定したディレクトリのつづりが間違いないか見てください。 httpdocsのownerは何でもかまいません。 groupは変更する必要はないでしょう。 外部からftpで更新するためにもxwr にしておく必要があります。



注意;
aragoiを使用するに当たり、 cgi-binにwrite permissionを与えること。 securityの問題を追加のこと
Apacheで使用するディレクトリとhttpd、cgi-binのディレクトリの置き方。
aaa.orgのディレクトリ
/home/virtualdomains/aaa.org/cgi-bin
/home/virtualdomains/aaa.org/httpddocs/
bbb.comのディレクトリ
/home/virtualdomains/bbb.com/cgi-bin
/home/virtualdomains/bbb.com/httpddocs/

DocumentRoot "/home/virtualdomains/default/httpddocs" で指定するところも
/home/virtualdomains/default/httpddocs/

aaa.org bbb.comのディレクトリ以下を書き込み実行できるようにする。

chmod 777 -R aaa.org
これでftpからのアクセス変更、cgi-binでの実行ができます。
全てのドメインのディレクトリを変更してください。

apacheのstartup
/etc/rc.conf に
apache2_enable="YES"
が在るか確認ください。 これがないとboot時に自動起動しません。

startup スクリプトは
/usr/local/etc/rc.d/apache22.sh
portの時にはapache22.shが作成されます。 変更の必要はありません。


apache22.sh
#!/bin/sh
#
# $FreeBSD: ports/www/apache22/files/apache22.sh.in,v 1.1 2006/09/24 16:16:40 clement Exp $
#
# PROVIDE: apache22
# REQUIRE: NETWORKING SERVERS
# BEFORE: DAEMON
# KEYWORD: shutdown
#
# Add the following lines to /etc/rc.conf to enable apache22:
# apache22_enable (bool): Set to "NO" by default.
# Set it to "YES" to enable apache22
# apache22_profiles (str): Set to "" by default.
# Define your profiles here.
# apache22limits_enable (bool):Set to "NO" by default.
# Set it to yes to run `limits $limits_args`
# just before apache starts.
# apache22_flags (str): Set to "" by default.
# Extra flags passed to start command.
# apache22limits_args (str): Default to "-e -C daemon"
# Arguments of pre-start limits run.
# apache22_http_accept_enable (bool): Set to "NO" by default.
# Set to yes to check for accf_http kernel
# module on start up and load if not loaded.

. /etc/rc.subr
name="apache22"
rcvar=`set_rcvar`
start_precmd="apache22_precmd"
restart_precmd="apache22_checkconfig"
reload_precmd="apache22_checkconfig"
reload_cmd="apache22_graceful"
graceful_cmd="apache22_graceful"
gracefulstop_cmd="apache22_gracefulstop"
configtest_cmd="apache22_checkconfig"
command="/usr/local/apache2/bin/httpd"
_pidprefix="/var/run/httpd"
pidfile="${_pidprefix}.pid"
required_files=/usr/local/apache2/conf/httpd.conf
[ -z "$apache22_enable" ] && apache22_enable="NO"
[ -z "$apache22_profiles" ] && apache22_profiles=""
[ -z "$apache22_flags" ] && apache22_flags=""
[ -z "$apache22limits_enable" ] && apache22limits_enable="NO"
[ -z "$apache22limits_args" ] && apache22limits_args="-e -C daemon"
[ -z "$apache22_http_accept_enable" ] && apache22_http_accept_enable="NO"
apache22_accf() {
retcode=0
if checkyesno apache22_http_accept_enable
then
/sbin/kldstat -v | grep accf_http 2>&1 > /dev/null
retcode=${?}
if [ ${retcode} -ne 0 ]
then
/sbin/kldload accf_http 2> /dev/null
retcode=${?}
fi
else
apache22_flags="${apache22_flags} -DNOHTTPACCEPT"
fi
[ ${retcode} -ne 0 ] && echo "Unable to load accf_http module"
return ${retcode}
}
load_rc_config $name
if [ -n "$2" ]; then
profile="$2"
if [ "x${apache22_profiles}" != "x" ]; then
pidfile="${_pidprefix}.${profile}.pid"
eval apache22_configfile="\${apache22_${profile}_configfile:-}"
if [ "x${apache22_configfile}" = "x" ]; then
echo "You must define a configuration file (apache22_${profile}_configfile)"
exit 1
fi
required_files="${apache22_configfile}"
eval apache22_enable="\${apache22_${profile}_enable:-${apache22_enable}}"
eval apache22_flags="\${apache22_${profile}_flags:-${apache22_flags}}"
eval apache22_http_accept_enable="\${apache22_${profile}_http_accept_enable:-${apache22_http_accept_enable}}"
eval apache22limits_enable="\${apache22limits_${profile}_enable:-${apache22limits_enable}}"
eval apache22limits_args="\${apache22limits_${profile}_args:-${apache22limits_args}}"
apache22_flags="-f ${apache22_configfile} -c \"PidFile ${pidfile}\" ${apache22_flags}"
else
echo "$0: extra argument ignored"
fi
else
if [ "x${apache22_profiles}" != "x" -a "x$1" != "x" ]; then
if [ "x$1" != "xrestart" ]; then
for profile in ${apache22_profiles}; do
echo "===> apache22 profile: ${profile}"
/usr/local/etc/rc.d/apache22.sh $1 ${profile}
retcode="$?"
if [ "0${retcode}" -ne 0 ]; then
failed="${profile} (${retcode}) ${failed:-}"
else
success="${profile} ${success:-}"
fi
done
exit 0
else
restart_precmd=""
fi
fi
fi
if [ "${1}" != "stop" ] ; then \
apache22_accf || apache22_flags="${apache22_flags} -DNOHTTPACCEPT"
fi
apache22_requirepidfile()
{
if [ ! "0`check_pidfile ${pidfile} ${command}`" -gt 1 ]; then
echo "${name} not running? (check $pidfile)."
exit 1
fi
}
apache22_checkconfig()
{
echo "Performing sanity check on apache22 configuration:"
eval ${command} ${apache22_flags} -t
}
apache22_graceful() {
apache22_requirepidfile
echo "Performing a graceful restart"
eval ${command} ${apache22_flags} -k graceful
}
apache22_gracefulstop() {
apache22_requirepidfile
echo "Performing a graceful stop"
eval ${command} ${apache22_flags} -k graceful-stop
}
apache22_precmd()
{
apache22_checkconfig
if test -f /usr/local/sbin/envvars
then
. /usr/local/sbin/envvars
fi
if checkyesno apache22limits_enable
then
eval `/usr/bin/limits ${apache22limits_args}` 2>/dev/null
else
return 0
fi
}
extra_commands="reload graceful gracefulstop configtest"
run_rc_command "$1"
#####apache22.sh end

logファイルのrotate指定
Apache.orgではlogファイルをrotateするためにrotatelogsを使用する方法が書かれていますが、今回の設定ではerror表示も出ない代わりに、Apacheも起動されませんでした。
起動されていないので、当然logのrotateなんか起きるわけがありません。
CustomLog "|/usr/local/apache2/bin/rotatelogs /var/log/access_log 86400" common
そこで
http://www.freebsddiary.org/rotatelogs.php
で紹介しているnewsyslog.confに次の行を追加する方法を使わせてもらいました。
/var/log/httpd-access_log 644 7 100 24 B /var/run/httpd.pid 30
rotateする時間を少々直して
/var/log/httpd-access_log 644 7 100 $D0 B /var/run/httpd.pid 30
とすることで深夜0時に更新されるようにしました。

newsyslog.confは/etc/にあります。
dovecot、ipfilterのrotate設定もここで行います。 必要なerror_logやaccess_logをすべて書いてください。
Advertisement Expand/Fold