Apache2.4の設定めも

  Jul 19 2009
Mar  6 2014
Mar 25 2015
Dec  8 2017
Jan 31 2023

  もともとはDebian GNU/Linux Ver18.0 で apache2.4 を設定したときのメモですが
 CGIがうまく動かなくなったのでDebian GNU/Linux Ver11.4 bullseye にてCGIが動くように
書き換えました
  下の方にrubyのCGIを動かすための設定もあります。


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

1 インストール

 
#  apt-get install apache2

2 設定

(0)設定手順の基本事項 
 ※wheezyでの注意事項
 設置ファイルの空白は[tab]を使わずスペースを使う。[tab]を使うとなぜかCGIがうまく動かなかった。


 基本的に設定は /etc/apache2/conf-aveilable の中の[コンフィグレーション].confファイルを書き換える。
 
 書き換えたら
# a2enconf [コンフィグレーション].conf
 を実行するとそのコンフィグレーションファイルが /etc/apache2/conf-enable 内に登録され
同時に reloadもされて動作に反映される。
 登録を削除するコマンドは
# a2disconf[コンフィグレーション].conf
 

同様にバーチャルホストの設定は/etc/apache2/sites-availableの設定ファイルを書き換えて
# a2ensite [コンフィグレーション].conf
 を実行するとバーチャルホストが /etc/apache2/sites-enableに登録される。
 削除コマンドは
# a2dissite [コンフィグレーション].conf
 

モジュールは/etc/apache2/mods-available内にある。
これもたぶん
# a2enmod [コンフィグレーション].conf
 
で登録する。削除は
# a2dismod[コンフィグレーション].conf
 



因みに
 /etc/apache2/*-enable/*.conf を書き換えて
#  systemctl reload apache2
 を実行しても /etc/apache2/*-available/*.confとリンクされていて同じファイルなので問題はない



(1)文字化けを直す
/etc/apache2/conf-available/charset.conf のUTF-8をコメントアウトする。
# AddDefaultCharset UTF-8

いったん設定を削除して再登録する
# a2disconf charset.conf
# a2enconf charset.conf


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


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

ServerSignature Off


いったん設定を削除して再登録する
#a2disconf  security.conf
#a2enconf   security.conf


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

  まず/etc/apache2/sites-available/000-default.confを hoge.example.com.confとい うファイル名でコピーし書き換 える。
/etc/apache2/sites-available/hoge.example.com.conf
<VirtualHost *:80>                 <-----ポート番号指定
    ServerAdmin hoge.example.com
   
    DocumentRoot /home/hoge/public_html/
    <Directory /home/*/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 .pl <----  *.cgiとPerlのCGIを動かす
                AAddType text/html .rhtml  .shtml <---------- rubyのcgiや.shtmlも動かす
   </Directory>
                                

</VirtualHost>




※補足 ServerAdmineのところに記述するサーバー名はDNSで検索できないとエラーになる。

defaultのHOst設定を削除してVirtual Hostを再登録する( /etc/apache2/sites-available のディレクトリの中で以下を実行)

#a2dissite  000-default.conf
#a2ensite   hoge.example.com.conf
#systemctl reload apache2
/etc/apache2/sites-enabled のディレクトリの000-default.conf が削除されてhoge.example.com.confが登録される。



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

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


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



       DocumentRoot /home/hoge/public_html/

       <Directory "/home/*/public_html">
         AddHandler cgi-script .cgi
         AddHandler cgi-script .pl
         AddHandler cgi-script .rb
         Options ExecCGI FollowSymLinks Indexes
         AllowOverride Options AuthConfig FileInfo Limit Indexes
         Require all granted
         AddType text/html .shtml .rhtml
       </Directory>



 
2023年1月 bullseyeで久しぶりに試したらこれだけではCGIが実行されないでソースが表示されてしまう。
CGIはデフォルトでは/usr/lib/cgi-binでしか動かないらしい。
そこで/etc/apache2/conf-available下にcgi-enabled.confというファイルを作成する
<Directory "/home/*/public_html/">
    Options +ExecCGI
    AddHandler cgi-script .cgi .pl .py .rb
</Directory>
 内容はたったこれだけで、すべてのユーザのpublic_html/の下でcgiが動くようになる
このファイルを下記コマンドで登録、リロードすればOK
#a2enconf cgi-enabled.conf
#systemctl reload apache2




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をアクセスすると実行されて表示される


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

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


目次