#contents
*はじめに [#fe26fe23]
apache2のインストールについて
大体、ここに書いてある通りです。
わからない時は、ここを参考にしてください。
HTTPD - Apache2 Web Server
http://doc.ubuntu.com/ubuntu/serverguide/C/httpd.html
[[Ubuntu]]のページにも書いたのですが、server版で作業してます。
Desktop版でもある程度一緒のはずですが、違うところは読み替えてください。(とはいえ、Portable Ubuntu 9.04(coLinux)でも一応は確認しました)
webサイトの確認は、Windowsから行っているのでスクリーンショットがWindowsでも誤解ないようにしてください(; ´д`)
*インストール [#ia300844]
''インストール時のSoftware selection に LAMPをセレクトしておくと、インストールされているはずです、また起動時に自動で立ち上がっているはずです。''
(以下のコマンドで確認可です。/usr/sbin/apache2 -k start ってのがたくさんあれば、すでにインストールされ起動しています。
ps ax | grep apache
)
インストールしていない場合は以下でインストールする。
#pre{{
sudo aptitude update
sudo aptitude install apache2
}}
ラクデスナ
/etc/init.d/apache2 start
で、起動。
デフォルトの設定だと、こんな感じ
また、インストールするだけで起動時に立ち上がるようになります。
&ref(apache_default.png);
*設定 [#b1613e2f]
設定ファイルは、debianの構成をうけついでいて、
httpd.confを直接弄るようなことはありません。
以下、/etc/apache2/ 内の簡単な説明
apache2.conf ←httpd.confの代わりにこれが読まれる。
ports.conf ←ポート設定
sites-available/ ←仮想ホストの設定はここにファイルを作る
mods-available/ ←モジュールの設定はここにファイルを作る
conf.d/ ←細かい設定はここにファイルを作る
設定を書き直したら、
/etc/init.d/apache2 force-reload
で設定を読みなおす。
以下で、いろいろやってみてます。
注意点としては、
''apache2.conf自体はほとんど編集しません''。
細かい設定は、conf.dに一個一個、個別にファイルを置いて設定するのがナウイです。
httpd.confもapache2.confから、読まれるので、httpd.confに一括で全部置く手もありです。
**ポートの設定変更 [#rda9908e]
例えば、ローカルネットワーク用やサブネットワーク用のwebサイトで、
ポート80をそのまま使いたくない、なんて場合は、/etc/apache2/ports.conf を弄ります。
例えば、
Listen 8081
などとすると、http://(アドレス):8081/ でアクセスできるようになります。
**共通のディレクトリ設定 [#z677a5df]
/etc/apache2/conf.d/directory_settings
などというファイルを作って、共通のディレクトリ設定を置いておきます。
こうしておくと、仮想ホストや、ユーザー別の設定などで、あたかもデフォルトの設定のように共通で使われます。(httpd.confで書いてたころはこっちがデフォだろうけど)
#pre{{
<directory />
Options All # ←CGIとか使えるように
Options -Indexes # ←ディレクトリ一覧表示だけはしないように
AllowOverride All # ←.htaccessで設定上書きできるように
Order allow,deny
allow from all # ←全ホストからアクセス許可
# CGIとか使えるように
Options All
# ディレクトリ一覧表示だけはしないように
Options -Indexes
# .htaccessで設定上書きできるように
AllowOverride All
Order allow,deny
# 全ホストからアクセス許可
allow from all
</directory>
}}
サブネット内だけにアクセスを許可するときは、
allow from all の all をサブネットワークアドレスに変更する。
例えば、以下のようにする。
#pre{{
Order allow,deny
allow from 123.456.789.0/24
}}
この辺のアクセス権限の設定は、[[ミケネコの htaccess リファレンス:http://mikeneko.creator.club.ne.jp/~lab/web/htaccess/access.html]] が詳しいです。htaccess の解説になってますが、そのまま使えます。
**セキュリティ絡みの設定 [#cd679eec]
/etc/apache2/conf.d/security などというファイルを作って
以下を記述
#pre{{
ServerTokens ProductOnly # Serverヘッダのバージョン番号表記等をなしに
ServerSignature Off # サーバーが生成するページでバージョン番号等をなしに
# Serverヘッダのバージョン番号表記等をなしに
ServerTokens ProductOnly
# サーバーが生成するページでバージョン番号等をなしに
ServerSignature Off
}}
バージョン番号の削除等はこちらが参考になります。
[[HTTP レスポンスヘッダの Apache バージョンを非表示にする:http://sonic64.com/2006-02-09.html]]
***ヘッダーを確認してみる [#h1685a05]
sudo /etc/init.d/apache2 restart
でapacheを再起動して、wget -Sをしてみて、ヘッダーの"Server" にapacheのバージョン番号などなければOK
wget -S http://(ホストのIPかアドレス)
** メインのサイトの設定[#k2a8ba3c]
***www用のユーザーの設定 [#o21f88b8]
ここでは、/home/wwwにホームを持つ www用のユーザーさんがいることが前提になっています。
''デフォルトの/var/wwwでよいと思う人は飛ばしてください&読み替えてください。/home/wwwにおいているのは、/homeだけ別HDDにしていて取り回しをよくしている、という(うちの)運用のためと、昔からの(うちの)慣例のためです。慣例や運用に納得できないとか、ポリシーに合わない場合はご自分の環境に読み替えていただくとよいかと。''
apacheを追加したときに追加されている(たぶん)、ユーザー"www-data" をそのまま使うことにします。
後はhtmlなどを置く /home/www/www と
ログを置く /home/www/log (←デフォルトの/var/logのままでいい人はいらないです)
も作っておきます。
cd /home/
sudo mkdir www
sudo mkdir www/www
sudo mkdir www/log
sudo chown -R www-data:www-data www
後は、vipwでユーザーwww-dataのホームを変更します
sudo vipw
以下のように変更(/var/www→/home/www にするだけ)
- www-data:x:33:33:www-data:/var/www:/bin/sh
+ www-data:x:33:33:www-data:/home/www:/bin/sh
後は任意で、scpやsftpなどでユーザーwww-dataでファイルをアップロードできるように、
.ssh/authorized_keys を記述するなど、
したい人はやってみてください。
やる場合は [[../ssh(sshd)の設定]] を参考のこと。
※ユーザーwww-dataにはデフォルトでは、パスワードが設定されていませんが、
sudo su www-data
とすればwww-dataになれますので、
.sshを作ったり .ssh/authorized_keys を生成したりする場合はこれを試してみてください。
(sudo で全部作業すると権限内ディレクトリで補完が効かないなど、けっこう面倒)
注意としては sudoで.sshディレクトリなど作った場合は、最後に
sudo chown -R www-data:www-data (ディレクトリ)
をやっておくことです。
***設定 [#p9079c6f]
メインのサイトの設定をします。
例えば、こんな感じです。
以下の例では、defaultの設定をコピーして弄っています。
#pre{{
cd /etc/apache2/sites-available/
sudo cp default my_site
sudo vi my_site
:(設定後)
sudo a2dissite default ←defaultの設定を無効に
sudo a2ensite my_site ←my_siteの設定を有効に
}}
設定例(/etc/apache2/sites-available/my_site)は、以下のような感じで、
上の「共通のディレクトリ設定」をやっていれば、
ディレクトリの設定は下記のように、書かなくてよいです。
#pre{{
NameVirtualHost *
<VirtualHost *>
ServerAdmin mail@localhost # ←管理者のメールアドレス
DocumentRoot /home/www/www # ←HTMLとか、置く場所
# 管理者のメールアドレス
ServerAdmin mail@localhost
# HTMLとか、置く場所
DocumentRoot /home/www/www
# ↓ログは、/var/logに保存しないようにしている
ErrorLog /home/www/log/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
customlog /home/www/log/access.log combined
</VirtualHost>
}}
適当なHTMLを置いてみる例: index.html
#geshi(html){{
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
<META http-equiv="Content-Type" content="text/html; charset=shift_jis">
<title>TESTページ</title>
</head>
<body style="background: #d6dee0">
<h1>Hello, World!!</h1>
Hello, hello, my world!
</body>
</html>
}}
&ref(apache_test_html.png);
**ユーザー別ディレクトリ設定 [#j88a7aa5]
/etc/apache2/mods-available/userdir.conf
を編集します。
下記の例では、上の「ディレクトリの共通の設定」を使っているので、
ディレクトリ設定をコメントアウトしています。
#pre{{
<IfModule mod_userdir.c>
UserDir public_html
UserDir disabled root
<directory /home/*/public_html>
#allowoverride fileinfo authconfig limit
#options multiviews indexes symlinksifownermatch includesnoexec
</directory>
</IfModule>
}}
などとします。
**CGIを有効にする [#acf93006]
sudo vi /etc/apache2/conf.d/enable_cgi などとして、
中に以下を記述する。
(apache2.confの中身はできるだけ編集しない方向で)
AddHandler cgi-script .cgi
後はapache再起動。
以下は、perlのCGIを動かしてみた例:test.cgi
※実行権限はつけないとInternal Server Errorになりますので注意
#geshi(perl){{
#!/usr/bin/perl
$ENV{'TZ'} = "JST-9";
print "Content-type: text/plain\n\n";
print "Hello, CGI!\n";
print `date`;
}}
&ref(apache_test_cgi.png);
**mod-writeを有効にする [#afac6a1c]
URLの書き換えエンジンであるmod-writeを設定する方法。
sudo a2enmod rewrite
あとはapacheの再起動でOK
*トラブル関係 [#ja8035aa]
/etc/init.d/apache2 start時などに、
#pre{{
Starting apache 2.0 web server...
apache2: Could not determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
}}
などと言われる時。127.0.0.1が代わりに、グローバルアドレスの場合もある。
結論としては、''自ホストのIPのDNSの逆引き設定ができていないため''。
以下、解決法。
ようは、DNSの逆引き設定をしてやるのだが、やり方は、二通りある。
-DNSサーバーで逆引き設定をする。
-/etc/hostsに 設定を書く
レンタルサーバーのDNSサーバーなどでできない場合は、こちら。
DNSサーバーの設定はまかせるとして、
/etc/hosts の書き方。
123.456.789.012 moge.moge-hoge.com moge
という風に追加してやる。すでに123.456.789.012の項があったら書き換える。
*SSL [#tb000292]
SSLについてはこちら
-[[./SSL]]
*ログを置くディレクトリを変えた場合の設定 [#z7545198]
**logrotateの設定変更 [#e46b902b]
ログを置くディレクトリを変更した場合は、
/etc/logrotate.d/apache2 も以下のように変更する。
''これをやっておかないとログが1個のファイルに増え続けますので注意。''
下記は 新しいログ置き場が、/home/www/log/ にもある場合。
もし、VirtualHostごとにログを作っている場合は、
そのログディレクトリごとにスペース区切りで追加していけばよいと思います。
#pre{{
- /var/log/apache2/*.log {
+ /var/log/apache2/*.log /home/www/log/*.log {
weekly
missingok
}}
**logrotateのテスト [#a33d8601]
logrotateはcronにより1日1回自動で動きますが、
すでにログがたまっているなどして手動でlogrotateを動かしたい場合は以下のようにします。
ちなみに、実際にローテートされるのがいやな場合(設定ファイルの記述ミスのみチェックしたい)は logrotate に -d をつけてください。
#pre{{
$ sudo logrotate -v /etc/logrotate.d/apache2
reading config file /etc/logrotate.d/apache2
reading config info for /var/log/apache2/*.log /home/www/log/*.log
Handling 1 logs
rotating pattern: /var/log/apache2/*.log /home/www/log/*.log weekly (52 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/apache2/access.log
log does not need rotating
considering log /var/log/apache2/error.log
log does not need rotating
considering log /home/www/log/access.log
log does not need rotating
considering log /home/www/log/error.log
log does not need rotating
not running shared postrotate script, since no logs were rotated
}}
うまくいきました?
*参考URL [#i3a86bfd]
-HTTPD - Apache2 Web Server
http://doc.ubuntu.com/ubuntu/serverguide/C/httpd.html
-Debian初心者のA2Z -7-
http://www.h7.dion.ne.jp/~maruyosi/pasocom/debian_trial_7.html
-[[【初心者専用】 Ubuntu Linux 6 【馬耳東風】:http://72.14.235.104/search?q=cache:iT_q-S__I9UJ:pc11.2ch.net/test/read.cgi/linux/1174794670/348-448+ubuntu+apache2.conf+a2ensite&hl=ja&ct=clnk&cd=4&lr=lang_ja]]
-http://alk.dip.jp/apache2-default/sv080.html
-[て] 玄箱でApache2その後: 大阪てきとー日記
http://kazz7.air-nifty.com/tekito/2005/01/apache2_1.html
-[[ミケネコの htaccess リファレンス:http://mikeneko.creator.club.ne.jp/~lab/web/htaccess/access.html]]
htaccessに書くホスト/IP 制限の方法の解説ですが、そのまま設定ファイルに生かせます。
----
#pcomment(,reply)
TIME:"2010-06-10 (Thu) 13:03:22" REFERER:"http://tobysoft.net/wiki/index.php?cmd=edit&page=Ubuntu%2Fapache2" USER_AGENT:"Mozilla/5.0 (Windows; U; Windows NT 6.0; ja-JP; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729)"