Apache のバーチャルホストで Redmine を動作させる 〜 CentOS6

Apache のバーチャルホスト機能を用いて Redmine を実行する設定を行います。httpd.conf を編集して VirtualHost 機能を有効にします。

スポンサーリンク

このエントリーは、CentOS 6.4 インストール~設定手順の目次 の一部です。

VirtualHost を有効化する設定と注意事項

名前ベースのバーチャルホストを利用するため、NameVirtualHost を有効にします。

以上の設定で、IPアドレスが1つであっても ServerName で振り分けて、複数のウェブサイト(サーバー名/ドメイン)を運用するためのバーチャルホストの機能が有効となります。

また、999行目付近から、VirtualHost example(バーチャルホストの例)が書いてありますが、ここのコメントに重要なことが書いてある。

訳します。

つまりバーチャルホストを設定すると、未定義のサーバー名でのアクセスがあった場合、最初のバーチャルホストの設定を使用する。これがどういうことかと言いますと、実際に試しましたところ、何も対策せずに普通にバーチャルホストの設定を進めると、以下のようなアクセスの際に困った動作となる。

・サーバーのIPアドレスでのアクセスした場合、
・IPアドレス→サーバー名の名前解決はできるが、バーチャルホストには未定義のサーバー名でのアクセスとして扱われる

以上のようなアクセスにより、Apache の動作は次のようになります。

1. 最初のバーチャルホストに設定してある DocumentRoot を表示する。

2. メインの設定ファイル /etc/httpd/conf/httpd.conf の DocumentRoot が無効になり、メインの設定ファイル /etc/httpd/conf/httpd.conf に書いてある ServerName でアクセスすると、最初のバーチャルホストに設定してある DocumentRoot を表示する。つまり、メインの設定ファイル の ServerName, DocumentRoot は未定義という扱いになるようです。

未定義のサーバー名に対するアクセスを拒否する設定

以上の対策として、バーチャルホストに未定義のサーバー名に対するアクセスを拒否する設定ファイルを作成します。バーチャルホストに関するファイルで一番最初に読み込ませるために、virtualhost-00.conf という名前で作成します。

この設定にすると、メインの設定ファイル /etc/httpd/conf/httpd.conf の ServerName, DocumentRoot は無効になり、未定義のサーバー名や、メインの設定ファイル /etc/httpd/conf/httpd.conf に書いてある ServerName のサーバー名でアクセスすると、403 Forbidden を返してリクエスト拒否します。

また、以下のように書く方法もあるようです。

この設定にすると、メインの設定ファイル(/etc/httpd/conf/httpd.conf)の ServerName, DocumentRoot は有効のままで、メインの設定ファイルの ServerName でアクセスすると、メインの設定ファイルの DocumentRoot を表示します。

以上のような検証を行いましたが、間違いがありましたらどうぞご指摘ください。私は、前者の設定で進めました。

apacheのDirectoryとLocationディレクティブの違い – うまい棒blog

localhost, redmine など VirtualHost 設定用のファイルを作成

続いてサーバー名ごとに、virtualhost-サーバー名.conf とファイルを作成していきます。これが、メインの設定ファイルに書いている Virtualhost 用の設定と同様のものとなります。

Redmine には redmine.centos という ServerName でアクセスします。

以上を設定したら、Apache 再起動。

Passenger のバージョンによっては、上のような WARNING が出るかもしれないので、適宜 /etc/httpd/conf.d/passenger.conf を修正します。

メインの設定ファイル httpd.conf の不要な部分をコメントアウト

バーチャルホストで運用するので、メインの設定ファイル /etc/httpd/conf/httpd.conf で不要の部分をコメントアウトしておきます。

以上を設定したらサーバー再起動。

サーバー名 → IPアドレスの名前解決の設定

とりあえず、プライベートアドレス内のローカルの Mac から Redmine を使いたかったので、Mac側で /etc/hosts に以下を追加して名前解決を行います。

ホスト機側も設定。

これでブラウザからアドレス欄に redmine.centos と入力すれば、名前ベースのバーチャルホストの働きにより Redmine へとアクセスできます。

スポンサーリンク
サーバ構築研究会の CentOS 本は、昔からお世話になっています。Linux の教科書は Linux の基本を学ぶのにおすすめです。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!