2017.09.07

VPSとレンタルサーバー、二つのサーバーにおけるWebサーバー設定の違い

難易度
1
カテゴリー
その他

htacces00

個人事業主としてフリーエンジニアをしている木下です。
レンタルサーバーで以外と知られてないのが、Webサーバーのコントロールが思ったほどできない、ということ。
正確には提供会社のポリシーによって制限が加えられています。
一方VPSは比較的自由に使えるため、移転してきた場合ギャップに惑うでしょう。

今回はWebサーバーにおいてVPSとレンタルサーバーでどういう制御が可能で、できないことは何かを探ります。

Webコンテンツの制作も無事完了、さあインターネット上にこのコンテンツを公開しよう、そのとき必要になるのが「Webサーバー」です。
世の中のホームページはすべて「Webサーバー」の機能によってコンテンツの公開を実現しています。
Webサーバーの動作を自社の都合に合わせて制御したい場合には、Webサーバーを設定する必要があります。
その設定はどのように実現されているのでしょうか?

Webサーバーの動作を決定するファイル

Webサイトの挙動を定義するのは、Webサーバーのコンフィグファイルです。Apacheではhttpd.confというファイルに動作設定が記述されており、このファイルに記載された内容を元にWebサーバーが動作します。

つまり、httpd.confという設定ファイルを変更することによって細かな動作を制御し、自身の思い通りの動作をするWebサーバーを手に入れることができます。

ちょっとしたTIPSですが、httpd.confに記述されている設定内容はLinux(OS)ディストリビューションによってファイルや場所が異なることがあります。例えばRed Hat系のOSではRPMパッケージで追加したApacheでは「/etc/httpd/conf」にhttpd.confなどの設定ファイルが格納されています。
イメージ画像
しかし、Debian系のdebパッケージでインストールされたApacheでは「/etc/apache2」ないし「/etc/apache2/conf」に設定ファイルが保管されています。apache2.confやport.confに基本設定が記述されていますし、サイト設定は同じディレクトリ内の「sites-available」ディレクトリ配下に保管される設定ファイルを参照します。このように同じLinuxのApacheでもディストリビューションによって変わってきますので文中の表記はお使いの環境によって適宜読み替えてください。

Webサーバーのコンフィグファイルを設定することによって利用可能なWebサイトは自由自在に構成することができます。

権限がない共用サーバー

自身のWebサイトを自由自在に制御可能なhttpd.conf、この設定を使えば様々なページや機能をWebサイトに盛り込むことができます。大変便利です。
しかし、レンタルサーバーでも「共用サーバー」と呼ばれる種類のレンタルサーバーではhttpd.confを直接編集することはできません。共用サーバーでは文字通り複数の契約者が共有して1台のサーバーを利用し、その1台のサーバーの一部を借りてホームページの公開を実施するという利用形態となります。このためそのサーバーの全体動作を決定することになるhttpd.confを編集する権限が付与されませんし、そもそもサーバー自身を操作するためのシェル環境すら用意されていない共用サーバーが一般的です。

こんな共用サーバーを使っている状況でWebmasterからこう質問されます。

「ウチのホームページ(Webサーバー)って、設定変えれないんですか?」

具体的にどんな設定を変更しましょうか?と質問する前に共用サーバーであることに気づきます。共用サーバーではhttpd.confの設定を変更することができない。残念ですが…、と色よい返事ができないことに負い目を感じることになります。
イメージ画像2
しかし、次の質問がやってきました。

「まさか、AllowOverrideがNoneってことはないですよね?」

このときは、質問の意味が分からなかったのですが、その表情から察したWebmasterはこう続けました。

「.htaccessファイルが使えるか、という意味ですよ。Webサーバーのconfファイルを直接編集できなくても、部分的に.htaccessファイルで挙動を変えることができるんです。覚えておくといいですよ。」

インフラエンジニアであれば、Webサーバー(Apache)の設定にはhttpd.confの記述内容を編集してhttpd restartでサービスの再起動をすることで設定が反映される、という方法が一般的ですが、Webコンテンツを作っている側からすると「部分的に動作を変更するには.htaccessファイルが一般的」となります。

特にhttpd.confを直接編集できない共用サーバーでは「.htaccessファイル」がよく利用されています。

.htaccessの動作必要条件

.htaccessファイルが使えれば、直接Apacheの設定ファイルが編集できなくても、同じ効果を得ることができるようになります。

動作要件としては利用するWebサーバーの(httpd.confに代表される)設定ファイル上で「.htaccessファイルを利用しても良い」という設定が実施されている必要があります。
具体的には「AllowOverride」という設定項目で指定されています。例えばhttpd.confで
<Directory "/var/www">
AllowOverride None

<Directory "/var/www/html">
AllowOverride All

と指定されていれば"/var/www"配下では.htaccessファイルは利用できず、"/var/www/html"配下では.htaccessファイルが利用できるようになっている、ということになります。

Noneですべて禁止、Allで全て許可という意味の設定ですが、この他にもFileInfoやIndexes、Limit、AuthConfigといった部分的な設定変更を許可することも可能です。

共用サーバーに話を戻しますと、共用サーバーではhttpd.confにアクセスできない(シェルがない、ないし設定を確認する方法がない)ことがほとんどです。そのため、.htaccessファイルがどのレベルで使用可能なのか、という点はヘルプやサポートサイトなどで確認しておくと後々役に立ちます。

例えば共用サーバーiCLUSTAであればLimitとAuthConfigのみサポート対象となっています。
GMOクラウド サポートページ「自分で用意した.htaccessファイルは使用できますか?

このため、このサーバーにおいて.htaccessファイルで指定できる設定はホスト名かIPアドレスをキーにしたアクセス制限かパスワードによるユーザ認証しかできない、ということになります。

.htaccessはhttpd.confの出張所

.htaccessファイルに設定を記述してWebサーバーにHTMLファイルなどと同じように配置すると、httpd.confファイルで設定された挙動を.htaccessファイルが部分的に変更して全体設定にはない動作を部分的に実行することができます。

項目 httpd.confファイル .htaccessファイル
必要な権限 システム(OS)のroot権限が必要 ファイルの書き込み権限で可能(ユーザ権限、サイト管理者)
設定方法 システム上に配置された設定ファイル(httpd.conf)の編集 設定が必要なディレクトリに.htaccessファイルを配置
サーバー(プロセス)再起動 設定を反映させるために再起動が必要 再起動不要(設定ファイルを配置し即時適用)
同じ設定をした時のサーバー負荷への影響 負荷が低い 負荷が高い
設定の適用範囲 サーバー全体、あるいは部分的にも指定可能 設定ファイルを配置した配下のディレクトリのみ

サーバー管理者としてOSのroot権限を保有している場合にはApacheの設定ファイルであるhttpd.confファイルを編集して設定する方がメリットは大きいといえます。

一方で、root権限を有しておらず、Webコンテンツを定められた場所に置くだけのユーザ権限であれば、httpd.confファイルに触れることができませんので、.htaccessファイルで設定を実施することで似通った設定を実施することができます。

つまり.htaccessファイルを置くことで、httpd.confファイルを直接編集することなくWebサーバーの設定変更を部分的に適用することができるようになる、という動きになります。

VPSと違って、シェルも管理者権限もない共用サーバーであっても、一ユーザの権限でファイルに記述した設定を適用してWebサーバーの動作を部分的に変更することができるようになります。このように共用サーバーでは権限不要な.htaccessファイルが一般的に使われています。

使い方あれこれ

例えばアクセスされたサイトにindex.htmlファイルが存在しないときに、別のURLにジャンプさせるときには.htaccessファイルに以下の一行を記述して「リダイレクト」を設定します。

例として、に転送するとします。

.htaccessファイルでリダイレクトする

Redirect temp /index.html https://shared.gmocloud.com/lp/iinkai/
※Redirect permanentでも同じ転送ができます。細かな動作が変わります。

index.htmlが存在しないディレクトリにはこういった.htaccessファイルを配置することによって、index.htmlを配置しない代用にすることがあります。
エラーコードを元にしてページを転送することもできます。

.htaccessファイルでリダイレクトする

ErrorDocument 404 https://shared.gmocloud.com/lp/iinkai/

この一行を記述するとHTTPエラー404を検出した時にへ転送されるようになります。例えば、自分でオリジナルのエラー画面をHTMLファイルで用意しておき、「err404.html」ファイルへ転送させることもできます。

こういったページの転送を階層ごとに.htaccessファイルで用意しておくことによって、一つのホームページのコンテンツを別々のWebサーバーに分けて転送することも可能になります。

トップページには単純にRedirectでの転送を仕掛けておき、ディレクトリによってErrorDocument 404でページが移動した趣旨のメッセージを表示するHTMLを置いておくことによって直リンクでそのページを参照したユーザも新しいページに誘導することができるようになります。

Webサーバーの引っ越しやドメインの変更によってホームページが変更になった場合でも、旧ドメイン・旧ホームページ内に.htaccessファイルを配置することによって簡単にページの転送ができ、引っ越し先となるWebサイトに案内することができるようになります。

まとめ

Webサーバーの挙動を決定する設定ファイルについて、二種類ご紹介しました。
1.VPSならroot権限やシェルが提供されているので、Webサーバー設定はhttpd.confファイルで実施する。
2.共用サーバーではroot権限は提供されない、シェルが提供されないことも多い。このため、コンテンツのルートディレクトリ以下に.htaccessファイルを設置してディレクトリ内だけWebサーバーの挙動を変更する。
3.サーバーへの負荷で言えば「httpd.conf < .htaccess」となるため、大規模なWebサイトを運営するのであれば、Webサーバーの設定はhttpd.confファイルですべて制御する方が望ましい。ただし中・小規模サイトであれば.htaccessファイルで制御してもそれほど問題にならない。
4..htaccessファイルが使えるかどうかはWebサーバー設定によって左右される。このため、最初は使うかどうか分からない状態でも、後々のため.htaccessファイルでどれくらい制御できるかあらかじめ調べておくとよい。
5..htaccessファイルはファイルを用意するだけで容易な動作設定が可能なことから、Web制作側が利用することが多い。

サーバー管理者はhttpd.confファイルを編集することが多いですが、コンテンツ制作者は.htaccessファイルを編集することが多い、といえます。作業がサーバー管理とコンテンツ制作・管理で分担されているケースでもこの使い分けは有用になります。

この記事を書いた人

木下肇

東京/神奈川を中心に、都内中堅企業ではシステム部門の一員として部内インフラ業務に、別の小規模企業ではインフラ全般について管理業務の委託を受けるフリーエンジニア。オンプレミスの企業内インフラからクラウド環境のサーバ/ネットワークまで、OS守備範囲はWindowsからLinuxまで、障害の診断や修復/修理であればソフトからハードまで、幅広い守備範囲で日々お客様の業務を遂行しています。
お仕事のご相談はコチラ⇒http://www.treedown.net/

GMOクラウドアカデミーYouTubeチャンネルはこちらから

アカデミー用バナー

メルマガ会員募集中!

アカデミーの最新情報や会員限定のお得な情報をお届けします。

メルマガ登録はこちら