2022 年度 OSS リテラシ 3 : Apache + PHP のセットアップ
はじめに
本演習ではサーバとして VMware 上の仮想マシンを用いる. 本資料では仮想マシンに Apache をインストールする手順をまとめる.
インストール
Web サーバ (Apache2)
Web サーバとして Apache2 を利用する. Debian パッケージを利用してインストールする.
$ sudo -s # apt update # apt install apache2
インストール確認
apache2 パッケージをインストールすると自動的に Web サーバが起動する. この段階では apache2 の設定ファイルを変更する必要はない.
ブラウザで自分の IP にアクセスしてみよ. 以下のような URL をブラウザに打ち込めば良い.
http://10.176.0.XXX (XXX は自分の IP に)
上記のデフォルトページに書かれているように, 設定ファイルは /etc/apache2 以下に存在する. デフォルトのドキュメントルートは /etc/apache2/sites-enabled/000-default.conf に書かれている. ファイルを見るとドキュメントルートが /var/www/html であることがわかる.
# less /etc/apache2/sites-enabled/000-default.conf ...(略)... DocumentRoot /var/www/html ...(略)...
そのため, /var/www/html 以下に HTML ファイルを置けば, ブラウザ上から閲覧することが可能となる.
PHP
PHP を Debian パッケージを利用してインストールする.
パッケージは apt-cache search コマンドを用いて検索することができる.
$ apt-cache search php ...(略)...
PHP 関連のパッケージは大量に存在するが, php-common libapache2-mod-php php-cli を インストールしておけば依存関係によって必要なパッケージが概ねインストールされる. なお, Web サーバとして apache2 を使うので, apache2 用のモジュール (libapache2-mod-php) もインストールしている.
$ sudo -s # apt update ...(略)... # apt install php-common libapache2-mod-php php-cli ...(略)...
設定
Web サーバ (Apache2)
Linux のディストリビューション毎に設定ファイルの置き方に多少の違いがあるが, Debian 系の Linux では設定ファイルは /etc/ の下にあるパッケージ名のディレクトリに置かれている.
# ls -l /etc/apache2/ 合計 80 -rw-r--r-- 1 root root 7224 11月 4 03:46 apache2.conf drwxr-xr-x 2 root root 4096 12月 4 23:52 conf-available drwxr-xr-x 2 root root 4096 12月 4 23:52 conf-enabled -rw-r--r-- 1 root root 1782 11月 3 20:34 envvars -rw-r--r-- 1 root root 31063 11月 3 20:34 magic drwxr-xr-x 2 root root 12288 12月 10 15:33 mods-available drwxr-xr-x 2 root root 4096 12月 10 15:33 mods-enabled -rw-r--r-- 1 root root 320 11月 3 20:34 ports.conf drwxr-xr-x 2 root root 4096 12月 4 23:52 sites-available drwxr-xr-x 2 root root 4096 12月 4 23:52 sites-enabled
ここで, conf-available と conf-enabled, mods-available と mods-enabled, sites-available と sites-enabled のセットがあることに気づくだろう. それぞれ以下のような意味がある.
conf- : 諸々の設定ファイル mods- : モジュール sites- : サイトの設定 (root ディレクトリやサイト名, など) -available : 利用可能なもの. -enabled : 有効になっているもの.
モジュールなどを有効・無効にするために, 以下のコマンドが用意されている.
a2enmod <module 名> a2dismod <module 名> a2enconf <conf 名> a2disconf <conf 名> a2ensite <site 名> a2dissite <site 名>
また, ユーザは www-data グループに入れておくと良い. apache2 は www-data ユーザ・グループ権限で実行されるためである.
# usermod -aG www-data hogehoge # grep www-data /etc/group www-data:x:33:hogehoge (自分のユーザ名を加わっていることを確認)
usermod の設定を有効にするには,とグインしなおせばよい. ログインし直した後に groups コマンドを実行すると www-data が含まれていることがわかる.
# exit $ su hogehoge (自分自身に su ) $ groups hogehoge cdrom floppy sudo audio dip www-data video plugdev netde
ユーザディレクトリの有効化と動作確認
URL で http://サイト名/~ユーザ名/ と書かれているケースがよくある. これは Apache2 で userdir モジュールを有効にすることで実現される. userdir モジュールを有効にすると, 各ユーザは自分の権限で Web ページを公開できるようになる (そうでなければ, 常に root 権限で /var/www/html/ 以下にファイルを置かねばならない).
userdir モジュールを用いるには, a2enmod コマンドを実行し, apache2 を再起動すれば良い.
$ sudo -s # a2enmod userdir # /etc/init.d/apache2 restart (apache2 の再起動) [ ok ] Restarting apache2 (via systemctl): apache2.service. # exit $
Web ページを作成するためには, ホームディレクトリ以下に public_html という名前のディレクトリを作成し, その中にファイルを置けば良い.
$ mkdir ~/public_html $ cd ~/public_html $ vi helloworld.htm <html> <body> Hello World! </body> </html>
作成が終わったら, 自分の仮想マシンに接続し, helloworld.htm を表示してみよ. ブラウザを起動して, URL として "http://10.176.0.XXX/~USER/" を入力せよ (XXX は自分のIP, USER は自分のユーザ名に置き換えること)
PHP の設定
PHP をインストール後に mods-enabled ディレクトリ以下を確認すると, PHP を使うためのファイルが存在することがわかる. このことは /var/www/html 以下で PHP を使える状態にあることを意味する.
$ sudo -s # cd /etc/apache2/ # ls mods-enabled/*php* mods-enabled/php7.4.conf mods-enabled/php7.4.load
userdir (~/public_html/) において php を使うためには, mods-enabled/php7.4.conf の設定を変更する必要がある. コメントに書かれているように, php_admin_flag engine を On にする必要がある.
# vi mods-enabled/php7.4.conf ...(前略)... # Running PHP scripts in user directories is disabled by default # # To re-enable PHP in user directories comment the following lines # (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it # prevents .htaccess files from disabling it. <IfModule mod_userdir.c> <Directory /home/*/public_html> # php_admin_flag engine Off (コメントアウトする) php_admin_flag engine On </Directory> </IfModule>
設定を変更したら, apache2 を再起動する.
# /etc/init.d/apache2 restart [ ok ] Restarting apache2 (via systemctl): apache2.service. # exit $
動作確認
以下のような php ファイルを Web サーバのドキュメントルートに置いてみて動作確認を行う. なお, <? の前や, ?> の前に「空白文字を入れない」こと!
$ cd ~/public_html $ vi hello.php <?php echo date("Y-m-d H:i:s"); ?>
作成が終わったら, 自分の PC のブラウザで http://10.176.0.XXX/~hogehoge/ (IP は自分のものに変え, hogehoge は自分のユーザ名に置き換えること) に アクセスし, hello.php を表示してみよ. さらに,再読み込みボタンを押すと表示が変化すること,を確かめて下さい.
2022-09-18 20:24:52
課題
- ~/public_html 以下に HTML, PHP を使ったファイルを作成し, それをブラウザで表示せよ.
URL (IP アドレス(自分のユーザ名がわかるように)) とページの内容がわかるようにスナップショットをとり,
それを wbt にアップロード登録せよ.
- 3 年生の実験で Web ページを作ったはずである.それを思い出して,楽しい Web ページを作ってみて欲しい.
- 4 年前期に PHP を習いましたよね?