plesk で httpd.conf をカスタマイズする方法

# はじめに

Apache の設定は後から読み込まれる設定ファイルで上書きされていく仕様なので、Plesk では `httpd.conf` の設定を変更しても、その後に読み込まれる Plesk 特有の設定で上書きされてしまいます。Plesk 特有の設定ファイルに直接設定を付け加えても、Plesk で更新をかけたりサーバーを再起動したりすると設定は元に戻ってしまいます。

これを回避する方法としては Plesk 特有の設定ファイルより後に読み込まれる設定を作るという方法がありますが、バーチャルホスト毎にとなると設定されているドメインが多ければ、ちょっと面倒ですよね。

Plesk が更新のたびに設定を書き換えるロジックに直接それを書けば、バーチャルホスト毎の設定も動的に変更を加えられます。その裏技的な方法についてご紹介します。

※ちなみに、これは Plesk 12.5 での方法なので、バージョンが違う場合はパス等が異なる場合があるのでご了承ください。


# Plesk の http 設定ファイル

Plesk が生成している http 設定ファイルはいくつかありますが、以下の４つさえ押さえておけば十分です。他は必要に応じて設定を追って探せばいいでしょう。

## `/etc/httpd/conf.d/zz010_psa_httpd.conf`

`Include` で各設定を読み込んでいる設定ファイルです。

```apache:/etc/httpd/conf.d/zz010_psa_httpd.conf
	Include '/etc/httpd/conf/plesk.conf.d/server.conf'
	Include '/etc/httpd/conf/plesk.conf.d/horde.conf'
	Include '/etc/httpd/conf/plesk.conf.d/roundcube.conf'
	Include '/etc/httpd/conf/plesk.conf.d/vhosts/*.conf'
	Include '/etc/httpd/conf/plesk.conf.d/forwarding/*.conf'
	Include '/etc/httpd/conf/plesk.conf.d/wildcards/*.conf'
```

## `/etc/httpd/conf/plesk.conf.d/server.conf`

ベースとなる設定、デフォルトドメインの設定などが書かれています。
prefork のパラメータチューニングや SSL の設定等はここに記述したいところです。


## `/var/www/vhosts/system/各ドメイン/conf/httpd.conf`

各バーチャルホスト毎の設定が書かれています。


## `/var/www/vhosts/system/各ドメイン/conf/vhost.conf` または `vhost_ssl.conf`

各バーチャルホスト毎の追加ディレクティブを書くファイルです。
デフォルトは存在しておらず、Plesk 管理画面から追加ディレクティブを設定すると生成されます。
SSH から自分で作成しても同様に追加設定が可能です。

ただし、この追加ディレクティブ用のファイルは `<VirtualHost/>` 内で `Include` されているため、`<VirtualHost/>` 内で機能するディレクティブしか追記できません。

```apache:/var/www/vhosts/system/各ドメイン/conf/httpd.conf
	<VirtualHost IPアドレス:443 >
		Include "/var/www/vhosts/system/各ドメイン/conf/vhost_ssl.conf"
	</VirtualHost>
	<VirtualHost IPアドレス:80 >
		Include "/var/www/vhosts/system/各ドメイン/conf/vhost.conf"
	</VirtualHost>
```


# Plesk の http 設定を自動生成するファイル

Plesk 管理画面から設定を変えた場合やサーバーを再起動した際に、Plesk 特有の設定ファイルを書き換えるための php プログラムファイルです。

## `/usr/local/psa/admin/conf/templates/default/server.php`

`/etc/httpd/conf/plesk.conf.d/server.conf` を生成するための php プログラムファイルです。

## `/usr/local/psa/admin/conf/templates/default/domainVhost.php`

`/var/www/vhosts/system/各ドメイン/conf/httpd.conf` を生成するための php プログラムファイルです。

## `/usr/local/psa/admin/conf/templates/default/server/vhosts.php`

`/etc/httpd/conf/plesk.conf.d/server.conf` の `<VirtualHost/>` 設定を記述するための php プログラムファイルです。

## `/usr/local/psa/admin/conf/templates/default/domain/domainVirtualHost.php`

`/var/www/vhosts/system/各ドメイン/conf/httpd.conf` の `<VirtualHost/>` 設定を記述するための php プログラムファイルです。

他にもいくつかありますが、ソースを追えば `/usr/local/psa/admin/conf/templates/default/server/` 以下にはサーバー共通の `/etc/httpd/conf/plesk.conf.d/server.conf` に記述するファイルが、`/usr/local/psa/admin/conf/templates/default/domain/` 以下にはドメイン毎の `/var/www/vhosts/system/各ドメイン/conf/httpd.conf` に記述するファイルがあると分かります。


# カスタマイズ方法

`/usr/local/psa/admin/conf/templates/default/` に書かれている Plesk オリジナルの php ファイルを `/usr/local/psa/admin/conf/templates/custom/` に複製し、編集します。

custom ディレクトリにファイルがあれば、それが優先して処理されます。

最初は custom ディレクトリが無いので、まずはディレクトリを生成します。

```bash
mkdir /usr/local/psa/admin/conf/templates/custom/
```

例えば `/var/www/vhosts/system/各ドメイン/conf/httpd.conf` の全体をカスタマイズしたい場合は
`/usr/local/psa/admin/conf/templates/default/domainVhost.php` を `/usr/local/psa/admin/conf/templates/custom/domainVhost.php` に複製し、編集します。

```bash
cp /usr/local/psa/admin/conf/templates/default/domainVhost.php /usr/local/psa/admin/conf/templates/custom/
vi /usr/local/psa/admin/conf/templates/custom/domainVhost.php
```

編集した後は以下を実行すると、設定が書き換えられると同時に Apache が再起動されます。

```bash
/usr/local/psa/admin/bin/httpdmng --reconfigure-all
```

ちなみに、PHP のプログラムファイルなので、構文ミスがあれば当然エラーが表示されて失敗します。