- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

はじめに Edit

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でも誤解ないようにしてください(; ´д`)

インストール Edit

インストール時のSoftware selection に LAMPをセレクトしておくと、インストールされているはずです、また起動時に自動で立ち上がっているはずです。
(以下のコマンドで確認可です。/usr/sbin/apache2 -k start ってのがたくさんあれば、すでにインストールされ起動しています。

ps ax | grep apache

)

インストールしていない場合は以下でインストールする。

sudo aptitude update
sudo aptitude install apache2

ラクデスナ

/etc/init.d/apache2 start

で、起動。
デフォルトの設定だと、こんな感じ

また、インストールするだけで起動時に立ち上がるようになります。

apache_default.png

設定 Edit

設定ファイルは、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に一括で全部置く手もありです。

ポートの設定変更 Edit

例えば、ローカルネットワーク用やサブネットワーク用のwebサイトで、
ポート80をそのまま使いたくない、なんて場合は、/etc/apache2/ports.conf を弄ります。

例えば、

Listen 8081

などとすると、http://(アドレス):8081/ でアクセスできるようになります。

共通のディレクトリ設定 Edit

/etc/apache2/conf.d/directory_settings
などというファイルを作って、共通のディレクトリ設定を置いておきます。

こうしておくと、仮想ホストや、ユーザー別の設定などで、あたかもデフォルトの設定のように共通で使われます。(httpd.confで書いてたころはこっちがデフォだろうけど)

<directory />
        # CGIとか使えるように
        Options All
        # ディレクトリ一覧表示だけはしないように
        Options -Indexes
        # .htaccessで設定上書きできるように
        AllowOverride All
        Order allow,deny

        # 全ホストからアクセス許可
        allow from all
</directory>

サブネット内だけにアクセスを許可するときは、
allow from all の all をサブネットワークアドレスに変更する。
(これはapacheでの制御になる(=apacheにはアクセスできてしまう)ので、実際にはiptablesなどFirewallソフトでそれ以前のレベルでの制御もちゃんとしましょう!!)

例えば、123.456.789のサブネットからのみアクセスさせたい場合は以下のようにします。

                Order allow,deny   
                allow from 123.456.789.0/24

開発用にローカルに立てて自分のホストからだけ参照したい(127.0.0.1からのアクセスだけ許可)という場合は、

                Order allow,deny   
                allow from localhost 127.0.0.1

でよいかと(必要ならlocalhostも追加)

この辺のアクセス権限の設定は、ミケネコの htaccess リファレンス が詳しいです。htaccess の解説になってますが、そのまま使えます。

セキュリティ絡みの設定 Edit

バージョン番号を返さない方法 Edit

そもそも論として「セキュリティの向上にバージョン番号隠す意味ないでしょ」というのはある。

/etc/apache2/conf.d/security などというファイルを作って

以下を記述

# Serverヘッダのバージョン番号表記等をなしに
ServerTokens ProductOnly
# サーバーが生成するページでバージョン番号等をなしに
ServerSignature Off

バージョン番号の削除等はこちらが参考になります。
HTTP レスポンスヘッダの Apache バージョンを非表示にする

ヘッダーを確認してみる Edit

sudo /etc/init.d/apache2 restart 

でapacheを再起動して、wget -Sをしてみて、ヘッダーの"Server" にapacheのバージョン番号などなければOK

wget -S http://(ホストのIPかアドレス)

メインのサイトの設定 Edit

www用のユーザーの設定 Edit

ここでは、/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 (ディレクトリ)

をやっておくことです。

設定 Edit

メインのサイトの設定をします。

例えば、こんな感じです。
以下の例では、defaultの設定をコピーして弄っています。

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)は、以下のような感じで、

上の「共通のディレクトリ設定」をやっていれば、
ディレクトリの設定は下記のように、書かなくてよいです。

NameVirtualHost *
<VirtualHost *>
        # 管理者のメールアドレス
        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

1
<!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>

apache_test_html.png

ユーザー別ディレクトリ設定 Edit

/etc/apache2/mods-available/userdir.conf
を編集します。

下記の例では、上の「ディレクトリの共通の設定」を使っているので、
ディレクトリ設定をコメントアウトしています。

<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を有効にする Edit

sudo vi /etc/apache2/conf.d/enable_cgi などとして、
中に以下を記述する。
(apache2.confの中身はできるだけ編集しない方向で)

AddHandler cgi-script .cgi

後はapache再起動。
以下は、perlのCGIを動かしてみた例:test.cgi
※実行権限はつけないとInternal Server Errorになりますので注意

1
2
3
4
5
6
#!/usr/bin/perl

$ENV{'TZ'} = "JST-9";
print "Content-type: text/plain\n\n";
print "Hello, CGI!\n";
print `date`;

apache_test_cgi.png

mod-writeを有効にする Edit

URLの書き換えエンジンであるmod-writeを設定する方法。

sudo a2enmod rewrite

あとはapacheの再起動でOK

トラブル関係 Edit

/etc/init.d/apache2 start時などに、

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の項があったら書き換える。

その他 メニュー Edit

SSL Edit

SSLについてはこちら

ログを置くディレクトリを変えた場合の設定 Edit

logrotateの設定変更 Edit

ログを置くディレクトリを変更した場合は、
/etc/logrotate.d/apache2 も以下のように変更する。
これをやっておかないとログが1個のファイルに増え続けますので注意。

下記は 新しいログ置き場が、/home/www/log/ にもある場合。

もし、VirtualHostごとにログを作っている場合は、
そのログディレクトリごとにスペース区切りで追加していけばよいと思います。

- /var/log/apache2/*.log {
+ /var/log/apache2/*.log /home/www/log/*.log {
          weekly
          missingok

logrotateのテスト Edit

logrotateはcronにより1日1回自動で動きますが、
すでにログがたまっているなどして手動でlogrotateを動かしたい場合は以下のようにします。

ちなみに、実際にローテートされるのがいやな場合(設定ファイルの記述ミスのみチェックしたい)は logrotate に -d をつけてください。

$ 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 Edit


Show recent 10 comments. Go to the comment page.

  • 最近忙しく少々カリカリしておりました。大人気ない返答をしてすいません。せっかくお越しいただいたのに。
    よろしければ、トゥルーさんの質問の意図を教えていただけないでしょうか? -- TOBY 2009-01-23 (Fri) 14:49:52
  • うーん、どうもわかりにくい -- 2009-05-18 (Mon) 19:17:12
  • 手元のパソコンで PHP のテストをするためにインストールを行ないました. Ubuntu 8.04 にて無事にインストールできました!ありがとうございます!! -- どせい? 2009-08-15 (Sat) 03:20:25
  • こんなややこしいことしないでもWEBMINのようにグラフィカルに設定できるツールはないのですか? -- noname? 2009-08-28 (Fri) 23:16:35
    • apacheのhttpd.confに限ったグラフィカルなツールは知りません。説明はこのページに書くと長いですが、記述自体は少ないです。
      あと、Ubuntu(debian?)と通常の素のapacheとで、記述の仕方が違う(例えば、Windows向けのXAMPPのapacheとか)全然違うので、その辺の都合もあるのかな、と。
      また、この際なので、テキストでの設定に慣れておいた方がよいと思います。他の設定もグラフィカルでないと設定できない、となると肝心な時や対応外の新しいソフトを入れるときに対処ができなくなります。
      (実際にwebminのようなツールを探しておられるということは、対応できなくなっておられるのでは?ないかなーと余計な心配してます) -- TOBY 2009-08-29 (Sat) 08:42:41
  • 文中のchownコマンドの後ろにある-rは何を表しているのでしょう?
    パーミッション?でしょうか?
    いずれにしてもこちらの環境ではエラーになりますので省略して進めてしまっていますが、よろしければ解説していただければと思います。 -- un? 2009-12-19 (Sat) 20:12:02
    • ごめんなさい、ミスです。省略してください。man chown してみるとわかりますが"-r"オプションはないですね。 -- TOBY 2009-12-20 (Sun) 12:44:43
  • http://www.stackasterisk.jp/tech/systemConstruction/apache02_03.jsp
    今時のconfは行の後ろに#コメントすると文法エラーになるそうですよ。コピペしようとしている方はご注意を。 -- 2010-05-26 (Wed) 12:52:03
    • うわすいません。コメントのつもりで書いていましたが、確かにこの書き方文法ミスになりますね。修正しておきます!サンクスです。しかしこれ、コピペしてた人かなりハマってそう(´・ω・`)うう -- TOBY 2010-06-10 (Thu) 13:03:36
    • 直しました。confの後ろにコメント書かないようにしておきました -- TOBY 2010-06-10 (Thu) 13:04:12
  • directory_settingsなどというファイルを作って、というのは、そのファイル名で勝手に読み込まれるということなんでしょうか? -- 2010-07-10 (Sat) 19:23:11
    • grepかけてみると、
      $ grep -r conf\.d /etc/apache2/*
      /etc/apache2/apache2.conf:Include /etc/apache2/conf.d/
      
      apache2.confで、conf.dをIncludeしていることがわかりますよね。
      で、Includeとは何か?はapche2の公式ドキュメントの『Include ディレクティブ』 を読んでみればよいかと。
      Include にディレクトリを指定した場合は、 ディレクトリとそのサブディレクトリ内の全てのファイルを アルファベット順に読み込んで、設定ファイルとして処理します。
      via: core - Apache HTTP サーバ
      Ubuntuのドキュメントも少し記述が conf.d
      conf.d: contains configuration files which apply globally to Apache2. Other packages that use Apache2 to serve content may add files, or symlinks, to this directory.
      via: HTTPD - Apache2 Web Server

      -- TOBY 2010-07-14 (Wed) 23:36:23

  • わかりやすく親切な記事で助かりました! -- ななす? 2010-10-23 (Sat) 12:15:44
  • 分かりにくく過ぎて笑える -- 2011-04-17 (Sun) 04:00:24
  • 非常に参考にさせて頂きました。ありがとうございます。 -- Shimane? 2012-07-24 (Tue) 13:05:36
Name:


Attach file: fileapache_test_cgi.png 856 download [Information] fileapache_test_html.png 798 download [Information] fileapache_default.png 1198 download [Information]
Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2011-01-20 Thu 09:47:52 JST (2764d)