www.smiyasaka.com  は、2022 年 11月から Oracle LInux 8.X にOSを変更しました。

Alias で別 DocumentRoot を作り
CGI, SSI, html を動かす


httpd.confDocumentRoot は、一つしか設定できませんが、サーバシステムを構築し ていくとどうしても別の DocumentRoot( ホームディレクトリ ) を使ってホームページを表示したい事があると思います。
そんな時には、Alias を使うと簡単に別の DocumentRoot を使用してホームページを表示
することが可能になります。専門用語では、「 仮想ディレクトリとマッピング 」といいます。

※ 注意事項 ※
 1. httpd.confDocumentRoot のユーザー名と別の DocumentRoot所有者名は、同一に 設定してください。
 2. SELinux 有効の時には、下記のポリシーを設定します。
下記ポリシーを設定しないと Apache から、ホームディレクトリ( 別ドキュメントルート )での 公開が出来なくなります。

setsebool -P httpd_enable_homedirs 1;\
firewall-cmd --reload

httpd.conf では、
デフォルトで ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
が設定されていますが、ScriptAlias は、CGI 専用のため html には対応しない為、
コメントアウトしておきます。ついでに下記もコメントアウトしておきます。


<Directory "/usr/local/apache2/cgi-bin">
  AllowOverride None
  Options None
  Require all granted
</Directory>

   Alias の動作を私のサーバ機を例として紹介します

私のサーバ機の DocumentRoot は、/var/html/www/www.smiyasaka.com です。
別の DocumentRoot として /home/miyasaka/www も作成しています。

通常、インターネットで www.smiyasaka.com/○○○○ をアクセスすると DocumentRoot で設定されているディレクトリ以下にある該当ページが表示されます。

しかし AliasAlias "/abcd" "/home/miyasaka/www" と設定したとすると www.smiyasaka.com/abcd/test_page.html とアクセスした場合 、/home/miyasaka/www/ 以下にある test_page.html が表示されるようになります。


Alias の編集箇所

  ログの設定の下の方 <IfModule alias_module></IfModule> 内にあります。

Alias の設定方法

   Alias "/(仮想ディレクトリ)" "/(実のディレクトリパス)" です。

  例. Alias "/betsu-dir" "/home/miyasaka/www"

  /betsu-dir/○○○○ ----> /home/miyasaka/www/○○○○ に URL が変換(マッピング) されます。
  (仮想ディレクトリ)は、存在しないディレクトリでも良いです。
  (実のディレクトリパス)は、変換後のディレクトリをフルパスで記述します。


CGI, SSI を使用したい時の設定

Alias /(仮想ディレクトリ)/ "/(実のディレクトリパス)/" の直下に下記設定を追加します。
さらに CGI, SSI 使用許可と perl の拡張子 .cgi, .pl の拡張子が使用できるように設定します。


  <Directory "/(実のディレクトリパス)">
   AllowOverride None  
<----- [.htaccess]の使用不可
   Options Includes FollowSymLinks ExecCGI  
<----- SSI, CGI を使用と
シンボリックリンクを許可

   Order allow,deny <----- アクセス許可を優先させる
   Allow from all  <----- 上との2行ですべてのアクセスを許可

   AddHandler cgi-script .cgi .pl  
<----- cgi-script の拡張子 .cgi .pl を
使用許可

   Require all granted  
<----- すべてのアクセスを許可
  </Directory>

******* Apache のディレクティブの解説 *******

  Includes       
<----- SSI の使用を許可
  FollowSymLinks    
<----- シンボリックリンク先の参照を許可
  ExecCGI       
<----- CGI プログラムの使用を許可
  allow         
<----- 指定したホスト(IPアドレス)からのアクセスを許可
  deny          
<----- 指定したホスト(IPアドレス)からのアクセスを禁止
  Require all granted   
<-----「すべてのアクセスを許可」

※※ 注意事項 ※※

allow, deny を使わずに 2.4系 から、この様に記述するようになっています。

つまり、全部許す( すべてのアクセスを許可 )ということなら、

  
Order Allow,Deny
   Allow from all


ではなく、

  
Require all granted

と書く必要があります。
こう書かないと、アクセスした時に下記の様に 403 Forbidden

You don't have permission to access ○○○○○○ on this server.
( ○○○○○○は、アクセスしたファイルのアクセス権が無い )

になります。

  私の場合は、下記のようになります。

  # Alias /webpath /full/filesystem/path
  Alias "/home" "/home/miyasaka/www"
  # .cgi .pl を有効にする。ここに書込まないと無効になる。
  <Directory "/home/miyasaka/www">
    AllowOverride None
    Options Includes FollowSymLinks ExecCGI
    AddHandler cgi-script .cgi .pl
    Require all granted
  </Directory>