以前から気になっていたサーバーの設定ファイルに関しての疑問について調査。
本日はapacheについて学習しようと思います。
通常のapacheの設定ファイルは /etc/httpd/conf/httpd.conf にありますが、一般的にはこのファイルはいじらず、/etc/httpd/conf.d/直下に設定ファイルを書いて動かすことが多いでしょうし、そういった運用を前提とさせていただきます。
※正確には下記の設定がhttpd.confに書かれているためconf.d/*.confが使用できることになります。
1 |
Include conf.d/*.conf |
バーチャルホストとは
一般的に1つのサーバーであっても複数のドメインに対応させることは可能です。
ただし、当然別々のドメインでアクセスされた場合は別々のディレクトリを見に行かなくてはいけません。
たとえばhoge.comでアクセスされたら/var/www/html/hoge直下、foo.comでアクセスされたら/var/www/html/foo直下といった仕組みを構築すする必要があります。
この仕組みをバーチャルホストといいます。
設定ファイルの書き方
設定ファイルの作り方ですが、上記でいうと/etc/httpd/conf.d/直下にhoge.confとfoo.confの2つのファイルを置くか、vhost.confといったファイルに2つのホストの情報をまとめて書く方法があります。
バーチャルホストの書き方ですが下記のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<VirtualHost *:80> #ここにサーバーのホスト名を書きます。 ServerName hoge.com #上記のホストでアクセスされたら下記のディレクトリに飛びます。 DocumentRoot /var/www/html/hoge #ホスト名でアクセスしたときに直で飛ぶファイル名です。 #左ほど優先度が高くなります。 #存在しない場合、リストを返すことになります。 DirectoryIndex index.html index.php #ディレクトリに対して使用可能な設定を書きます。 #詳細は参考リンクを。 Options FollowSymLinks #ディレクトリ固有の設定を行います。 <Directory "/var/www/html/hoge"> #htaccessで可能な権限の範囲を書きます。 AllowOverride All </Directory> </VirtualHost> |
典型的なものを書いておきました。詳細はリンクのほうが詳しいのでそちらを見てみましょう。
メモ:Apacheの設定ファイル(http.conf)を確認する (1)
Apacheで仮想ホストを動かそう(2)
.htaccess
apacheの設定ファイル以外にもURLのリダイレクトなどではディレクトリ単位で設定を書いておくことが一般的でしょう。
そのような場合htaccessで制御をすることになります。特に有名なのはmod_rewriteを使ったリダイレクトの設定でしょう。
典型的なのでwordpressのものを書かせていただきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#そのまんまプログラムのIF文ですがmod_rewirteが存在したら~ #このなかの処理を行いますよという意味です。 <IfModule mod_rewrite.c> #mod_rewiteを有効にしますよ~という意味です。 RewriteEngine On #リダイレクトのURLはここからの相対パスになります RewriteBase /hoge/ #RewriteRuleとReWriteCondはともにリダイレクトを行います。 #細かい諸ルールに関してはリンク先を参照 RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ./hoge/index.php [L] </IfModule> |
このリンク情報量すげえ・・・
WordPressに作成される.htaccessの動作を改めて確認しておこう
Apache ウェブサーバーで .htaccess を利用するには
エラーメッセージ対策
1 |
[cgi:error] [pid 4164] [client 192.168.1.29:52701] attempt to invoke directory as script: /var/www/cgi-bin/hogehoge/ |
ディレクトリをスクリプトとして解釈している→index.html,index.cgiが読み込まれていない
1 |
DirectoryIndex index.html index.cgi |
の記述が書かれていない。
そもそもhtaccessにとんでない→ディレクトリ内のAllowOverrideがNoneになっていないかの確認
1 |
/var/www/cgi-bin/hogehoge/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable and that '/var/www/cgi-bin/hogehoge/' is executable |
単純なPermisson以外にもSELinuxの設定が不適切という可能性もありえます。その場合はこちら
[…] サーバー設定ファイルについて apache […]
[…] 一応過去のブログを参考リンクに。 サーバー設定ファイルについて apache […]