Apacheの設定

Apache2.4の設定
===

Apacheは、2.2 と 2.4 で設定項目が微妙に異なるので注意する事。

## ServerName

ServerNameを設定しないと、Configファイルのロード時に以下のようなエラーが表示される。

```
httpd: Could not reliably determine the server's fully qualified domain name, using (ホスト名). Set the 'ServerName' directive globally to suppress this message
```

これは、ServerNameが空のため。以下のように設定する。

```
ServerName example.com:80
```

## 任意のディレクトリをドキュメントルートにする

**ドキュメントルート** とは、サイトのルート（ドメイン直下）のディレクトリの事。
```
https://example.com/index.html
                   ↑ここ!!この`/`になるディレクトのことをドキュメントルートという
```
多くのディストリビューションでは `/var/www/html` になっている。
`htdocs` や `public_html` の場合もある。

デフォルトは `/` 以下をアクセス不可にしてある。

```httpd.conf
<Directory />
    AllowOverride none
    Require all denied
</Directory>
```

例えば、`/var/www/localhost` をドキュメントルートにしたい場合は、以下のようにアクセス許可を追加する。

```httpd.conf
<Directory "/var/www/localhost">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
```

## 任意の設定ファイルの読み込み方法

追加の設定は、なるべく `http.conf` に追記せず、別のファイルに分けた方が管理しやすい。
設定項目のサンプルファイルは `/etc/apache2/extra/` などにある。
任意のファイルをロードしたい場合は `httpd.conf` に追記する。

```httpd.conf
Include /etc/apache2/extra/httpd-vhosts.conf
```

ワイルドカードを使うこともできる。

```httpd.conf
Include /etc/apache2/extra/*.conf
```

この方法は、拡張子で、ロード・非ロードを設定できるのでお勧めである。

## 仮想ホストの設定

仮想ホストを使うと、1つのサーバーで、複数のドメインを運用することが可能になる。
ポイントは、最低２つ以上の仮想ホストが必要な事だ。

```httpd-vhosts.conf
<VirtualHost *:80>
    ServerName    localhost
    DocumentRoot  "/var/www/localhost"
    ErrorLog      "/var/log/apache2/localhost.log"
    CustomLog     "/var/log/apache2/localhost-access.log" common
</VirtualHost>

<VirtualHost *:80>
    ServerName    example.com
    DocumentRoot  "/var/www/example/com"
    ErrorLog      "/var/log/apache2/example.com.log"
    CustomLog     "/var/log/apache2/example.com-access.log" common
</VirtualHost>
```

# PHP

## PHPのインストール

最近のパッケージソフトは、PHPの **CLI版** と **Apacheモジュール版** を別にしていることが多い。
これはパッケージシステムの思想なので、ケースバイケースである。（自由度優先・作業効率優先など）

ちなみに、技術力のある者にとって、一番優秀だと感じるのはMacPortsだ！

### yumでPHPをインストールする方法

yumは、**CLI版** と **Apacheモジュール版** が分かれていない。
**CLI版** と **Apacheモジュール版** は同時にインストールされる。

```sh
sudo yum install php
```

### MacPortsでPHPをインストールする方法

MacPortsは、自由度が極限まで高いので、**CLI版** と **Apacheモジュール版** が分離されている。
**CLI版** をインストールしても **Apacheモジュール版** はインストールされない。
また、バージョンを明示的に指定してインストールする。
余談だが、PHP-FPMもバージョン毎にインストールできるので、5.2〜7.4まで同時にインストールできる。
ポートを、5.2なら9052、7.4なら9074とすればとても分かりやすいのでお勧めである。

```sh
sudo port install php74-apache2handler
```

## PHPの設定

PHPを実行するためには、以下の2つの設定が必要になる。[^cgi]
パッケージでインストールした場合は、適切に設定されていることが多い。

1. PHPモジュールの読み込み場所（パス）の設定
1. PHPを実行する拡張子の設定

### 1. PHPモジュールの読み込み場所（パス）の設定

`httpd.conf` に `LoadModule php_module lib/apache2/modules/mod_php74.so` というモジュールを読み込む記載があるか確認する。もし無ければ追記する。

```http.conf
cat /etc/apache2/httpd.conf | grep php
```

`LoadModule` は、モジュールをロードする命令。
`php_module` は、ロードしたモジュールのラベル。`<IfModule php_module>` と利用する。
`lib/apache2/modules/mod_php74.so` は、モジュールのファイルパス。

### 2. PHPを実行する拡張子の設定

 `/etc/apache2/extra/mod_php74.conf` が作成されているはずなので、これを読み込めば良い。

```httpd.conf
Include /etc/apache2/extra/mod_php74.conf
```

もし作成されていなければ、追記する。

```httpd.conf
AddType  application/x-httpd-php         .php
AddType  application/x-httpd-php-source  .phps
```
[^cgi]: PHPの動作には、Apacheのモジュールとして実行するモジュール版と、CGIとして動作させるPHP-FPM(FastCGI Process Manager)版がある。要望があれば記事を書きます。