読者です 読者をやめる 読者になる 読者になる

かゆいとこログ

あと少しなのに良く分からないものを解説したいね

UbuntuにApache導入してWebサーバ立てるまでのかゆいところ

Apache導入、CGIスクリプトの作成とファイルアクセス

ホームディレクトリ配下でCGIファイルとかの更新を行う。

そもそも、なぜApacheが必要なのか

WebブラウザにHTML等要求されて、応答を返すなどという仕組みは(当たり前だが)本来備わっていないので、これを可能にするApacheというWebサーバーを立てることが必要。

CGIってなにそれ?

CGI(Common Gateway Interface)は、ウェブサーバ上で好きなプログラムを動作させる仕組み.

名前のとおり、単なるInterfaceなので、様々な様々な言語で実装されている. Pythoもその1つ.

 

実行環境?

Ubuntu 16.

Apache/2.4.18

 

aotake-rail.raindrop.jp

↑これを参考にした。ホームディレクトリ直下で

$ mkdir public_html

及び

$ chmod 770 public_html

として、(groupのpermissionは7にしないとだめなはず。)

続けて、

$ a2enmod userdir

ユーザーディレクトリの指定かな?

$ a2enmod cgid

CGIを使用可能にする。

を入力。

このあと、URLの先にもあるように、

mime.conf を編集して、.cgi の拡張子を持つファイルを cgi-script として処理するよう設定する。userdir.conf を編集して、public_html ディレクトリに ExecCGI Option を付加する。

(これをやらないと、cgiファイル読むときに、web-serverが、これXMLだわwwとか言って読みだしてエラー吐いて死ぬ) 

を行ってから再起動して終了。

 

Permissionについて

普通にCGIからサーバーのファイル触ろうとするとPermission denied食らう。
$ chmod 777 [FILE] ってしちゃえば行けるが、危険すぎる。
Apache2の場合はwww-dataなるuserがapacheを動かしているということを知る。

以下のサイトとか参考にする。Stack overflowのやつはわざわざvarwwwusersとかいうグループを追加しているが、必要ない。(下記参考)

stackoverflow.com

qiita.com

$ less /etc/apache2/envvars

とすることで、apache環境変数覗ける。
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
と記されており、userもgroupも"www-data"になっていることが分かる。

よって使用しているディレクトリ(今回cgiを書いているのは~/public_html/以下である)に対して、

$ sudo chgrp -R www-data ~/public_html

と入力してやる。(~/public_html以下のファイルを、グループ"www-data"の所有物にする. -R はRecursive(再帰))
次に、

$ sudo chmod -R 770 ~/public_html

としてやることで、適切なPermissionとなり、apacheがpublic_html配下のファイルにアクセスできるようになる。