- 更新日: 2013年8月14日
- CentOS & Linux
Apache のバーチャルホストで Redmine を動作させる 〜 CentOS6
Apache のバーチャルホスト機能を用いて Redmine を実行する設定を行います。httpd.conf を編集して VirtualHost 機能を有効にします。
このエントリーは、CentOS 6.4 インストール~設定手順の目次 の一部です。
VirtualHost を有効化する設定と注意事項
名前ベースのバーチャルホストを利用するため、NameVirtualHost を有効にします。
1 2 3 4 5 |
# vi /etc/httpd/conf/httpd.conf # 991行目付近 NameVirtualHost *:80 |
以上の設定で、IPアドレスが1つであっても ServerName で振り分けて、複数のウェブサイト(サーバー名/ドメイン)を運用するためのバーチャルホストの機能が有効となります。
また、999行目付近から、VirtualHost example(バーチャルホストの例)が書いてありますが、ここのコメントに重要なことが書いてある。
1 2 3 4 5 6 |
# VirtualHost example: # Almost any Apache directive may go into a VirtualHost container. # The first VirtualHost section is used for requests without a known # server name. |
訳します。
1 2 3 4 5 |
# バーチャルホストの例: # ほぼ全ての Apache ディレクティブはバーチャルホスのコンテナに書くことができる。 # 最初に設定されるバーチャルホストのセクションは、未定義のサーバー名でのリクエストに対して使用される。 |
つまりバーチャルホストを設定すると、未定義のサーバー名でのアクセスがあった場合、最初のバーチャルホストの設定を使用する。これがどういうことかと言いますと、実際に試しましたところ、何も対策せずに普通にバーチャルホストの設定を進めると、以下のようなアクセスの際に困った動作となる。
・サーバーのIPアドレスでのアクセスした場合、
・IPアドレス→サーバー名の名前解決はできるが、バーチャルホストには未定義のサーバー名でのアクセスとして扱われる
以上のようなアクセスにより、Apache の動作は次のようになります。
1. 最初のバーチャルホストに設定してある DocumentRoot を表示する。
2. メインの設定ファイル /etc/httpd/conf/httpd.conf の DocumentRoot が無効になり、メインの設定ファイル /etc/httpd/conf/httpd.conf に書いてある ServerName でアクセスすると、最初のバーチャルホストに設定してある DocumentRoot を表示する。つまり、メインの設定ファイル の ServerName, DocumentRoot は未定義という扱いになるようです。
未定義のサーバー名に対するアクセスを拒否する設定
以上の対策として、バーチャルホストに未定義のサーバー名に対するアクセスを拒否する設定ファイルを作成します。バーチャルホストに関するファイルで一番最初に読み込ませるために、virtualhost-00.conf という名前で作成します。
1 2 3 4 5 6 7 8 9 10 11 |
# vi /etc/httpd/conf.d/virtualhost-00.conf # バーチャルホストに未定義のサーバー名でのアクセスを拒否 <VirtualHost *:80> ServerName any <Location /> Order deny,allow Deny from all </Location> </VirtualHost> |
この設定にすると、メインの設定ファイル /etc/httpd/conf/httpd.conf の ServerName, DocumentRoot は無効になり、未定義のサーバー名や、メインの設定ファイル /etc/httpd/conf/httpd.conf に書いてある ServerName のサーバー名でアクセスすると、403 Forbidden を返してリクエスト拒否します。
また、以下のように書く方法もあるようです。
1 2 3 4 5 6 7 |
# vi /etc/httpd/conf.d/virtualhost-00.conf <VirtualHost *:80> ServerName any DocumentRoot /tmp </VirtualHost> |
この設定にすると、メインの設定ファイル(/etc/httpd/conf/httpd.conf)の ServerName, DocumentRoot は有効のままで、メインの設定ファイルの ServerName でアクセスすると、メインの設定ファイルの DocumentRoot を表示します。
以上のような検証を行いましたが、間違いがありましたらどうぞご指摘ください。私は、前者の設定で進めました。
apacheのDirectoryとLocationディレクティブの違い – うまい棒blog
localhost, redmine など VirtualHost 設定用のファイルを作成
続いてサーバー名ごとに、virtualhost-サーバー名.conf とファイルを作成していきます。これが、メインの設定ファイルに書いている Virtualhost 用の設定と同様のものとなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# vi /etc/httpd/conf.d/virtualhost-localhost.centos.conf # localhost.centos <Virtualhost *:80> ServerName localhost.centos DocumentRoot "/var/www/html" <Directory "/var/www/html"> Options FollowSymLinks ExecCGI AllowOverride All Order allow,deny Allow from all </Directory> ErrorLog /var/log/httpd/localhost.centos-error_log CustomLog /var/log/httpd/localhost.centos-access_log combined </VirtualHost> |
Redmine には redmine.centos という ServerName でアクセスします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# vi /etc/httpd/conf.d/virtualhost-redmine.centos.conf # redmine.centos <VirtualHost *:80> ServerName redmine.centos DocumentRoot /var/lib/redmine/public <Directory "/var/lib/redmine/public"> Options FollowSymLinks ExecCGI AllowOverride All Order allow,deny Allow from all </Directory> ErrorLog /var/log/httpd/redmine.centos-error_log CustomLog /var/log/httpd/redmine.centos-access_log combined </VirtualHost> |
以上を設定したら、Apache 再起動。
1 2 3 4 5 6 7 |
# service httpd restart httpd を停止中: [ OK ] httpd を起動中: WARNING: The 'RailsFrameworkSpawnerIdleTime' option is obsolete. Please use 'PassengerMaxPreloaderIdleTime' instead. [ OK ] |
Passenger のバージョンによっては、上のような WARNING が出るかもしれないので、適宜 /etc/httpd/conf.d/passenger.conf を修正します。
メインの設定ファイル httpd.conf の不要な部分をコメントアウト
バーチャルホストで運用するので、メインの設定ファイル /etc/httpd/conf/httpd.conf で不要の部分をコメントアウトしておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# vi /etc/httpd/conf/httpd.conf # ドキュメントルートに関する指定を無効化(バーチャルホストで設定) #DocumentRoot "/var/www/html" #<Directory "/var/www/html"> #Options FollowSymLinks #AllowOverride None #Order allow,deny #Allow from all #</Directory> # CGIに関する指定を無効化(バーチャルホストで設定) #ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" #<Directory "/var/www/cgi-bin"> #AllowOverride None #Options None #Order allow,deny #Allow from all #</Directory> |
以上を設定したらサーバー再起動。
1 2 3 4 5 |
# httpd -t Syntax OK # service httpd restart |
サーバー名 → IPアドレスの名前解決の設定
とりあえず、プライベートアドレス内のローカルの Mac から Redmine を使いたかったので、Mac側で /etc/hosts に以下を追加して名前解決を行います。
1 2 3 4 5 |
[mac ~]$ sudo vi /etc/hosts 192.168.1.2 localhost.centos 192.168.1.2 redmine.centos |
ホスト機側も設定。
1 2 3 4 5 6 7 8 |
# vi /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 127.0.0.1 centos 127.0.0.1 localhost.centos 127.0.0.1 redmine.centos |
これでブラウザからアドレス欄に redmine.centos と入力すれば、名前ベースのバーチャルホストの働きにより Redmine へとアクセスできます。
- – 参考リンク –
- バーチャルホスト設定 – CentOSで自宅サーバー構築
- にわかSEの独り言 CentOS 5.3 x64のApacheでバーチャルホストを設定
- さくらのVPSでバーチャルホストを使用 | いるすの備忘録
- 複数のドメインを運営する (バーチャルホスト) – Linux で自宅サーバ [ Home Server Technical. ]
- CentOS & Linux の関連記事
- Job for nginx.service failedのNginxエラー
- upstream sent too big header while reading response header from upstream(Nginx/Rails)
- Can’t get information about user clamav(clamdエラー)
- STDERR: Exception in thread “main” java.lang.InternalErrorエラー
- Linuxサーバー容量を確認するコマンドdf,duをマスターする!
- rmでファイル削除後にdf -hで容量が減らない時の対処(Linux)
- Apacheをローカルネットワークのみに公開にする
- logwatchからのメールが来ないと思ったら…
- Linuxサーバの負荷や使用率を調査するコマンドと手順
- Bashの脆弱性もう一件CVE-2014-7169に対するパッチ適用
Leave Your Message!