サーバー

さくらのVPS2日目 Apacheのセットアップ

VPSサーバー(以下単純にサーバーと呼びます)の操作ができるようになったので、Webサーバーをインストールしてサイトを表示する環境を整え、トップページを表示するようにします。

ここではApacheのインストール以外に、サーバーを利用するためのユーザーやグループ、ディレクトリやファイルに関する管理、設定事項が主になります。

DNSの設定

サーバーの操作をする前に、サーバアクセスはドメインネームで実行したいので、DNSの設定を先にする事にしました。

ドメイン名は「sv.mt-systems.jp」を利用しようと思いますが、更にそのサブドメインとして例えば「www.sv.mt-systems.jp」などでも、アクセスできるようにしたいと思います。

当方のドメインはVALUE DOMAINで管理しています。ですのでDNSの設定は、VALUE DOMAINのコントロールパネルから設定をしました。設定は以下の2行のAレコードを追加しただけです。

xxx.xxx.xxx.xxxは、VPS契約で割り当てられた固定IPを指定します。

a sv xxx.xxx.xxx.xxx
a *.sv xxx.xxx.xxx.xxx

DNSが通ったか、の確認は「nslookup」を使いますが、実際にアクセスできるようになるまで暫く掛かりますので、他の作業をして時間を置きました。確認は以下のコマンドを入力して、上記設定のIPアドレスが表示されればOKです(コマンドはMacのターミナルで実行)。

$ nslookup sv.mt-systems.jp

Apacheのインストール

環境ファイルの設定はvi(エディタ)を利用すればいいですが、それよりも使いやすいvim(エディタ)を利用できるようにしてから作業するようにしました。

$ sudo yum install vim-enhanced

次に、ディレクトリリストの詳細情報を得るため毎回「ls -al」と入力するのは面倒なので、vimを利用してシェル(bash)の環境ファイルにエイリアス設定を追加しようと思います。

ホームディレクトリ上にある「.bashrc」ファイルに、次のエイリアスを追加します。

alias ll="ls -al"

エイリアス設定したコマンドは、ログアウト後再ログインする事で使えるようになります。

ようやくApacheのインストールです。

なおインストールは簡単ですが、インターネットからHTTPのアクセスができるように、ポートを解放しなければなりません。

今回インストールしたCentOS7は、初期のネットフィルターの設定がpingとsshのパケットのみ有効で、それ以外は禁止された状態でした。

ここではApachのインストールと、続けてhttp、httpsのポートを開放する設定をします。

$ sudo yum install httpd
$ sudo systemctl start httpd

$ sudo firewall-cmd --add-service=http --zone=public --permanent
$ sudo firewall-cmd --add-service=https --zone=public --parmanent
$ sudo systemctl restart firewalld

http://sv.mt-systems.jpで確認すると以下のページが表示されました。

Webの作業を行うための準備に関して

WebサイトのアクセスでApacheを通してアクセスされるディスク領域は「/var/www/html」ディレクトリで、「ドキュメントルート」と呼ばれます。

ここにHTMLファイルを設定すれば動作するのですが、ファイルのアップロードやプログラムの修正などファイル管理がややこしいので、自身のログインに合わせて操作できるようにグループやファイル管理を設定しておきます。

まずは共通グループ「webusers」を作り、自身を同グループに追加し、ドキュメントルート以下に設定されるファイルのグループは、常に「webusers」となるようにします。

ところで、ファイル操作で権限エラーが出たため、自身をwheelグループへ追加しました。

$ su
# usermod -aG wheel ユーザー名

ユーザーログインをしなおして、wheelグループに所属しているか確認します。

$ id

wheelグループの操作は「/etc/sudoers」ファイルに設定されており、このファイルを編集するコマンドに「visudo」があります。もし、sudoを利用してこのコマンドが実行できないようであれば、ルートユーザーに切り替えて「visudo」を実行し、

%wheel  ALL=(ALL)  ALL

のコメントを外します。visudoの操作ですが、確認はしてませんが「vi」と同じかと思います。この操作を実行した場合は、rebootが必要になるのでお忘れなく。

さて、ようやくドキュメントルートのファイル操作に関する設定を実行します。

$sudo groupadd webusers
$sudo usermod -aG webusers ユーザー名
$cd /var/www
$sudo chgrp webusers html
$sudo chmod g+s html
$sudo mkdir test
$sudo chgrp webusers test
$sudo chmod g+s test

将来PHPでファイルを出力する場合ですが、PHPがモジュールモードで動作するプロセスのユーザーは「apache」であり、ファイルパーミッションの設定状況でエラーが出力されますので留意してください。

Apacheバーチャルホストの設定

同じドメインで複数のサイトを利用したい場合、レンタルサーバーであればサブディレクトリを利用します。

例えば、サブドメイン「sub.example.com」のサブディレクトリ「 test」にWordPressをインストールして利用するなら、アクセスは、

http://sub.example.com/test/

となります。これを

http://test.sub.example.com/

のようにしたい場合、自身が管理するVPSサーバーではApacheのバーチャルホストを利用して実現可能です(ただしSSLの設定ができないかも…確認中)。

バーチャルホストの設定は、以下ような設定データを「/etc/https/conf.d/vhosts.conf」ファイルに保存します。チェックはサーバー再起動後、各ドキュメントディレクトリにテスト用のHTMLを用意して試します。

<VirtualHost *:80>
    DocumentRoot /var/www/html
    ServerName sub.example.jp
    CustomLog logs/access_log common
    ErrorLog logs/error_log
    <Directory "/var/www/html">
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot /var/www/test
    ServerName test.sub.example.com
    CustomLog logs/test_access_log common
    ErrorLog logs/test_error_log
    <Directory "/var/www/test">
        Options -Indexes +FollowSymLinks
        AllowOverride All
    </Directory>
</VirtualHost>

上記設定の「ServerName」は、それぞれのドメインに合わせて書き換えてください。

「Directory」の「Options」指定で、「 -Indexes」はブラウザ上でディレクトリ・ファイルのリスト表示を禁止、「+FollowSymLinks」は次に説明するベーシック認証を利用するため、「.htaccess」の利用を有効にするための設定です。

アクセスログやエラーログのファイル出力先ですが、別のディレクトリに指定するとSELinuxのセキュリティ管理に引っ掛かるため、そのままにしておきます。

出力先は、ServerRootが「/etc/httpd」なので「/etc/httpd/logs」ですが、logsがリンクディレクトリで実際の保存先は「/var/log/httpd」ディレクトリになっています。

Apacheベーシック認証の設定

小さなPHPプログラムを使って命令の動作確認をよく試しますが、公開サイト上に不用意に置くと危険ですので、パスワードで管理されたサブディレクトリを使っています(今後はcli機能でコマンドラインから試すことになるかと思いますが…)。

ベーシック認証を利用すると、ブラウザでそのディレクトリ内のファイルにアクセスすると、パスワードの入力が求められるようになります。

「http://sub.example.com/test/」のアクセスをベーシック認証に設定するため、次の「.htaccess」ファイルを「/var/www/html/test」ディレクトリ保存します。

AuthType Basic
AuthName "Example Test"
AuthUserFile /var/www/html/test/.htpasswd
Require valid-user

「Require valid-user」は、パスワード登録されたユーザーであればアクセスが許可されます。

パスワードの生成は「htpasswd」コマンドを利用して、ベーシック認証のディレクトリ内に「.htpasswd」ファイルを用意します。

$ sudo htpasswd -c /var/www/html/test/.htpasswd ユーザー名 パスワード

「-c」は新しくファイルを生成する指定です。

「.htpasswd」のファイルアクセスコントロールは「644」なので、「600」としてルートユーザーのみアクセスを許可するように変更するのも良いと思います。

セキュリティについてですが、ベーシック認証はSSLで暗号化されていない限りそのままの文字コードが通信上に流れます。パケットを盗み見される危険がある場所(不特定多数が接続するLAN)では注意しましょう。

 

以下参考にさせていただいたページのリンクです。

ネコでもわかる!さくらのVPS講座 ~第三回「Apacheをインストールしよう」
さくらのVPS(CentOS7)でLAMP(mariaDB,PHP5.6)を構成しよう
CentOS7でファイアウォールを設定する(firewalld)
Apache HTTP サーバ バージョン 2.4 ドキュメント
SELinuxの操作

 

記事に関して質問をいただいても回答できませのでご了承ください。