Apache2の設定めも

  Jul 19 2009
Mar  6 2014


  Debian GNU/Linux Ver5.0 lenny にてapache2.2.9 を設定したときのメモです。
  下の方にrubyのCGIを動かすための設定もあります。
  (Jan 1,2014  wheezy での注意事項追加)

関連   OpenSSL対応   WebDav設定メモ  Webアクセスログ解析  ブログサーバtdiaryの設定 

1 インストール

 taskselでWebサーバを選んでインストールする。
 これでapache のバージョン2関係のパッケージが入る。
 ※wheezyでの注意事項
 設置ファイルの空白は[tab]を使わずスペースを使う。[tab]を使うとなぜかCGIがうまく動かなかった。

2 設定

 以下目的に応じて(1)〜 設定。設定ファイルを書き換えたら
#  /etc/init.d/apache2 reload
 を実行すると変更が反映される。



(1)文字化けを直す
/etc/apache2/conf.d/charset のUTF-8をコメントアウトする。(lenny ではすでにデフォルトでコメントアウトされてるので確認だけでOK)
#AddDefaultCharset UTF-8



(2) /etc/apache2/conf.d/securityの次のところを変更する。


ServerTokens Prod    <--- Full をProdに変更。サーバーの情報(バージョン、OSなど)を表示しないように
ServerSignature Off

++++++++++++++++++++++ここから下はetchのとき
AddHandler cgi-script .cgi  <----ここは先頭のコメントを外しておく
AddHandler cgi-script .pl   <----------追加 PerlのCGIも動くようにする。
AddHandler server-parsed .shtml <---- 追加 .shtmlのSSIが動くようにする。





(3) cgiやssiなどが動くようにする。
a2enmodコマンドでモジュールを使えるようにする。
#  a2enmod  cgi
  enableにするモジュールはcgi  cgid  include  mod_python perl php4 rewrite ssl userdirなど
      cgi      cgiプログラムの実行をサポート
      cgid     cgiプログラム(スレッド)の実行をサポート
      include  ページ内に埋め込むSSI(Server Side Includes)のサポート
      rewrite  要求されたURLの動的な書き換えをサポート
      ssl      SSLとTSLをサポート
      userdir   http://ホスト名/~hogehoge/のページを許可する。
  
  因みにモジュールの解除はa2dismodコマンド




(4)defaultで(http://ドメイン名/ を指定しただけで) index.shtmlなどが開くようにする。
/etc/apache2/httpd.confに次ののD
irectoryIndexに index.shtmlを書き加える。
  apache2ではこのファイルはデフォルトでは空になっている。
  
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.shtml

  


(5)Virtual Hostの設定
 Virtual Hostの設定によって複数のドメインに対応できる。
 
 例 
 hoge.example.comでアクセスしたら/home/hogetaro/public_html/下の内容を表示するようにする。
 cgiやSSIも使えるようにする。
 さらに/home/下の他のユーザもpublic_html下のページをhttp://ドメイ名/~ユーザ/でアクセスできるように設定する。

  まず/etc/apache2/sites-available/defaultを hoge.example.comというファイル名でコピーし書き換 える。
/etc/apache2/sites-available/hoge.example.com
<VirtualHost *:80>                 <-----ポート番号指定
    ServerAdmin hoge@hoge.example.com
   
    DocumentRoot /home/hoge/public_html/
    <Directory /home/hoge/public_html>
                Options ExecCGI Indexes FollowSymLinks MultiViews Includes
                       
<ーーーー (CGI,SSIが動くようにExecCGI Includesを追加)
                AllowOverride None
                Order allow,deny
                allow from all
              ServerSignature Off  <--- サーバー情報を表示しないようにする
                AddHandler cgi-script .cgi  <----  *.cgiを動かす
                AddHandler cgi-script .pl   <---------- 追加 PerlのCGIも動くように する。
    </Directory>
                                  
ここから下7行使わないのでコメントアウト
#    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
#    <Directory "/usr/lib/cgi-bin">
#        AllowOverride None
#        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
#        Order allow,deny
#        Allow from all
#    </Directory>

    ErrorLog /var/log/apache2/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>


       <Directory "/home/*/public_html">
                AllowOverride None
               Options ExecCGI -MultiViews +SymLinksIfOwnerMatch Includes
                Order allow,deny
                Allow from all
              ServerSignature Off  <--- サーバー情報を表示しないようにする
              AddHandler cgi-script .cgi  <---- *.cgiを動かす
               
AddHandler cgi-script .pl   <----------追加 PerlのCGIも動くように する。
        </Directory>

</VirtualHost>



※ http://ホスト名/~hogehoge/のページを許可するには(3)でuserdirモジュールもenableにしておく

つぎにこの設定ファイル/etc/apache2/sites-available/hoge.example.comを
a2ensiteコマンドで登録する。このコマンドで登録すると/etc/apache2/sites-enabled にシンボリックリンクファイルが作られる。

# a2ensite hoge.example.com

もしdefaultが登録されていたら削除する。登録の確認と削除はa2dissiteコマンドで、削除する候補が出てくるのでわかる。


※補足 ServerNameはDNSで検索できないとエラーになる。


(6) ユーザhogehogeのページ http://ホスト名/~hogehoge/のチルダを無くてもアクセスできるようにする。
 /etc/apache2/sites-available/defaultまた(6)で登録したvirtual hostの設定ファイルhoge.example.comの
最後の方に追加する。
   ・
   ・
   ・
Alias /hogehoge/  "/home/hogehoge/public_html/"
</VirtualHost>
 

(7) /etc/init.d/apache2 restart を実行して
apr_sockaddr_info_get() failed for
のようなメッセージが出ていたら
 /etc/apache2/apache2.confファイルに
ServerName localhost
というのを追加する。

(8) /etc/init.d/apache2 restart を実行して
_default_ virtualhost overlap on port 443
のようなメッセージが出ていたら
 /etc/apache2/ports.confファイルに赤の部分を追加する。
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
# README.Debian.gz

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to <VirtualHost *:443>
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.
    NameVirtualHost *:443
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>



3 rubyのCGIスクリプトを動かすための設定

  (上の2 (1)から(6)までの設定ができていることが前提)
 
 rubyとerubyとlibapache2-mod-rubyをインストールしておく

#  apt-get install  ruby  eruby libapache2-mod-ruby
 

libapache2-mod-rubyをインストールすると/etc/apache2/mods-available/ruby.loadとい うファイ ルができる。これに赤い部分を追加する。
LoadModule ruby_module /usr/lib/apache2/modules/mod_ruby.so
<IfModule mod_ruby.c>
  #  Ruby セーフレベルの設定
  RubySafeLevel 1

  # for Apache::RubyRun
  RubyRequire apache/ruby-run

  # for Apache::ERubyRun
  RubyRequire apache/eruby-run

  #  eRuby として扱うファイルの拡張子の指定をする
  # handle *.rhtml as eruby files.
  <Files *.rhtml>
    SetHandler ruby-object
    RubyHandler Apache::ERubyRun.instance
  </Files>
</IfModule>


さらに/etc/apache2/sites-available/hoge.example.comに次の赤い部分を追加する。



       DocumentRoot /home/hoge/public_html/
        <Directory /home/hogei/public_html>
                Options ExecCGI Indexes FollowSymLinks MultiViews Includes
                AllowOverride None
                Order allow,deny
                allow from all
                ServerSignature Off
         AddHandler cgi-script .pl
                AddHandler cgi-script .cgi
              AddType text/html .shtml  .rhtml
        </Directory>



       <Directory "/home/*/public_html">
                AllowOverride None
                Options ExecCGI -MultiViews +SymLinksIfOwnerMatch Includes
                Order allow,deny
                Allow from all
                ServerSignature Off
         AddHandler cgi-script .pl
                AddHandler cgi-script .cgi
              AddType text/html .shtml  .rhtml

        </Directory>




 

apacheを再起動したら

まずCGIスクリプトファイルを作成してみる
/home/hoge/public_html/tameshi.cgi 
#!/usr/bin/ruby -Ku
#ヘッダー部
puts "Content-Type: text/html"
puts  #ここでひとつ改行コードを送る
#body部
print <<"EOB"
<html>
        <head>
                <meta http-equiv="content-type" content="text/html; charset=utf8">
                <title>Ruby!</title>
        </head>
        <body>
                <h3>Hello</h3>
                <p>これは、おためしサンプルです。</p>
        </body>
</html>
EOB
  最初の-Ku のuは文字コードがUTF-8という意味、EUCのときは-Ks  SJISのときは-Ks

パーミッションを 755(すべて読み込みと実行可、変更・削除はオーナーのみ可)にする
$ chmod 755  tameshi.cgi
 

これでブラウザから http://サーバ名/~hoge/tameshi.cgiをアクセスすると実行されて表示される

次にhtmlファイルに埋め込むerubyのスクリプトファイルを作成してみる。これは拡張子を .rhtmlにする
 /home/hoge/public_html/hello.rhtml
<% msg="うめこみ"%>
<html>
        <head>
                <meta http-equiv="content-type" content="text/html; charset=utf8">
                <title>Ruby!</title>
        </head>
        <body>
                <h3>Hello</h3>
                <%=msg%>
        </body>
</html>
 
パーミッションを 755(すべて読み込みと実行可、変更・削除はオーナーのみ可)にする
$ chmod 755  hello.rhtml
  これでブラウザから http://サーバ名/~hoge/hello.rhtmlをアクセスすると実行されて表示される

4 BASIC認証によるアクセス制限をしたい。

例として /home/hoge/public_html/camera/下のアクセスをbasic認証するとします。
basic認証なので盗聴される可能性もる。SSLの設定をすればより強固になる。
次のファイルをアクセス制限したいディレクトリにおく。ファイル名の最初がドットなので作成後はls -a でファイルリストが出てくる。
パーミッションを 755(すべて読み込みと実行可、変更・削除はオーナーのみ可)にする
.htaccess
#SSLRequireSSL
AuthUserFile /home/karappi/.htpasswd
AuthGroupFile /dev/null
AuthName "Input ID and Password."
AuthType Basic
require valid-user
<Files ~ "^.(htpasswd|htaccess)$">
deny from all
</Files>
 

パスワードファイルは上の例では/home/hoge/.htpasswdというファイルになる。
これは公開ディレクトリ以外に置くのが基本。

  上記2(5)virtual hostの設定のところで   AllowOverride None というのがあるが
これを AllowOverride AuthConfigまたはAllowOverride Allにして再登録、apache2を再起動する。

AllowOverride All
 

  htpasswd   -c  パスワードファイル  新規ユーザ  



  例の場合、でhogeさんを登録する場合、

   htpasswd -c   /home/hoge/.htpasswd  hoge

 となる。

  既にパスワードファイルがあり新規ユーザの追加の場合は、
  -cオプションはいらない。


目次