Webサーバーの機能
まず、通常のhtmlファイルがサーバーで表示される仕組みを考えてみます。
サーバーを立てただけでは、当然ですがWebサーバーとしては機能しません。 ブラウザでサーバーのIPアドレスを打ったところで、アクセスはできません。
なので、Webサーバーとして機能させるためには、ApacheやNginxをインストールする必要があります。
Apacheを使う場合は、以下のようにyumで簡単に導入できます。
yum -y install httpd
正確にはインストールするだけでなくFirewallなどの設定が必要ですが、ここでは省略します。
Apacheがインストールされ、Apacheのプロセスが動いている状態で、ブラウザでサーバーのIPアドレスを打ってアクセスします。
たとえばブラウザで以下のURLを打ってアクセスすると、/var/www/html/
に配置されているindex.html
というファイルが表示されます。
http://{サーバーのIPアドレス}/index.html
/var/www/html
はドキュメントルートと呼ばれていますが、/etc/httpd/conf/
に存在するhttpd.conf
という設定ファイルで指定されており、変えることもできます。
WebサーバーでPHPが動く仕組み
では、htmlファイルではなくphpファイルを表示したい場合にはどうすれば良いのでしょうか。
http://{サーバーのIPアドレス}/index.html
にリクエストが来た際に、/var/www/html/index.html
ではなく、/var/www/html/index.php
を表示したい場合を考えてみます。
この方法ですが、普通はphpをインストールするだけでできます。
yum -y install php
なぜかというと、/etc/httpd/conf/httpd.conf
において、デフォルトでphpの設定ファイルを読み込むようになっているからです。
実際にサーバー上のhttpd.conf
を見てみると、
Include conf.modules.d/*.conf
という一文がありました。
これは、conf.modules.d
ディレクトリにあるconfファイルを全て読み込む、という設定です。
パスはhttpd.confで指定しているServerRootである/etc/httpd
からの相対パスなため、/etc/httpd/conf.modules.d
以下に存在しているファイルが、実際に読み込まれるファイルになります。
このディレクトリを見てみると、15-php.conf
というファイルがあります。中身を見てみると
LoadModule php7_module {.soファイルのパス}
というように書かれています。
これは{.soファイルのパス}の中身をphp7_moduleとして読み込む、と言った感じの意味です。
つまり、httpd.conf
でphpに関するconfファイルを読み込むように指定、そのconfファイルはphpに関するモジュールを読み込むようしている、ということです。
このモジュールが読み込まれているおかげで、/var/www/html
以下のphpファイルが正しく表示される(phpファイルの中身がそのまま表示されず、phpのコードが実行された結果が出力される)のです。