未来永劫

メリーバッドエンドが好きです.

Mac OSX Mavericks で Apache環境構築 + 任意のディレクトリからCGIプログラムの実行まで行う.

環境

Mac OSX Mavericks(このご時世にいつまで使うのやら)

Server version: Apache/2.2.26 (Unix)

Server built: Dec 10 2013 22:09:38

Apacheの設定

verの確認

ApacheはMac OSX Mavericksでは標準でインストールされているはずです.
従って,今回はそれを利用します(homebrewでぶっ込んで試したけど挫折した).

$ httpd -v 

でまずはver確認から.

標準では

Server version: Apache/2.2.26 (Unix)
Server built:   Dec 10 2013 22:09:38

と出力されるはずです.

Apacheの起動確認

$ sudo apachectl start

で起動できます.

終了は

$ sudo apachectl stop

でOK.

設定ファイルを弄った後は

$ sudo apachectl restart

をして再起動してください.

http://localhost/
を参照すると起動が出来ているか確認できると思います.

設定ファイルの変更

標準では設定ファイルが /etc/apache2/配下に置かれているはずです.
今回はエディタのEmacsで編集を行うので

$ sudo emacs /etc/apache2/httpd.conf

で編集を行います.

変更箇所

1カ所目
ユーザディレクトリを許可するモジュールをアンコメントアウト

LoadModule userdir_module libexec/apache2/mod_userdir.so

デフォルトではコメントアウトされているので外します.

2カ所目

 #User home directories                                                           
 Include /private/etc/apache2/extra/httpd-userdir.conf

同様にこのInclude文もコメントアウトされているので外します.

3カ所目

#                                                                             
# AddHandler allows you to map certain file extensions to "handlers":         
# actions unrelated to filetype. These can be either built into the server    
# or added with the Action directive (see below)                              
#                                                                             
# To use CGI scripts outside of ScriptAliased directories:                    
# (You will also need to add "ExecCGI" to the "Options" directive.)           
# 
AddHandler cgi-script .cgi

この最後の文も標準ではコメントアウトされているので外します.

ここで,rubyperlなどをcgiプログラムで活用したい場合は

AddHandler cgi-script .cgi .rb .pl

のようにして追記すると良いでしょう.

任意のディレクトリを参照できるように設定

次にユーザディレクトリを設定します.
設定するためには

$ sudo emacs /etc/apache2/users/[user_name].conf

を行って作成する必要があります.

自分のuser_nameは

$ whoami

で確認することが出来るので,各自確認の上[user_name]部分を変更してください.

設定は以下のコードを入力してください.

<Directory "/Users/[user_name]/Sites/">
  AllowOverride All
  Options Indexes FollowSymLinks MultiViews +ExecCGI
  AddHandler cgi-script .cgi
  Order allow,deny
  Allow from all
</Directory>
Options Indexes FollowSymLinks MultiViews +ExecCGI

この+ExecCGIと,

AddHandler cgi-script .cgi

この一文がCGIプログラムを任意のディレクトリで実行するために重要になります.

任意のディレクトリを設定するには

<Directory "任意のディレクトリ">
</Directory>

とすれば任意のディレクトリを設定することができる(はず)です.

CGIプログラムを動かすための準備

ここまで設定が完了したら,実際に動かすために準備を行います.

$ cd 
$ mkdir ~/Sites

としてSitesというディレクトリを作成します.

続いてディレクトリのパーミッション(アクセス権限)の設定を行います.

$ sudo chmod 755 ~/Sites

としてアクセス権限を変更します.

$chmod 755 とは

  • 所有者:読み出し,書き込み,実行が全て可
  • グループ:読み出し,実行が可
  • その他ユーザ:読み出し,実行が可

という状態に変更する事を指します.

CGIプログラムを動かす

いよいよCGIプログラムを動かすためのプログラムを書きます.

$ cd ~/Sites
$ emacs test.cgi

として~/Sites 配下にtest.cgiというファイルを作成します.
内容は以下のような簡単なものに.

#!/usr/local/bin/ruby                                                             
print "Content-Type: text/html\n\n"
str = "Hello World"
print str
print "\n"

作成後は先ほどと同様にパーミッションを設定します.

$ cd 
$ sudo chmod 755 ~/Sites/test.cgi

ここまで完了したら,

$ sudo apachectl restart

として再起動をかけてください.

http://localhost/~[user_name]/
を入力して何か表示されていれば成功.

http://localhost/~[user_name]/test.cgi
を叩いて
f:id:shopetan:20150515033642p:plain
が表示されればOkay!

エラーが出る場合は

これはmacの場合に限るかと思いますが…

$ tail -f /private/var/log/apache2/error_log 

これで適宜エラーログを確認することが出来ます.便利!

おつかれさまでした.
何か間違い等ありましたらコメントお願いします. 適宜修正いたします.