Apache

Webサーバはnginxもありますが、定番のApacheをインストールします。

インストール

2.2まではどのApacheを入れるか選択があったのですが、2.4からは単にApache2でよくなりました。
デフォルトではmpm_eventが入ります。

  1. インストールします。
    # apt install apache2 apache2-doc
    以前はいくつかデフォルト設定を直していましたが、2.4からは特段ありません。
  2. /etc/apache2/sites-available/000-default.confを修正します。
    <VirtualHost *:80>
            # The ServerName directive sets the request scheme, hostname and port that
            # the server uses to identify itself. This is used when creating
            # redirection URLs. In the context of virtual hosts, the ServerName
            # specifies what hostname must appear in the request's Host: header to
            # match this virtual host. For the default virtual host (this file) this
            # value is not decisive as it is used as a last resort host regardless.
            # However, you must set it for any further virtual host explicitly.
            ServerName localhost
            
            ServerAdmin webmaster@localhost
            DocumentRoot /var/www/html
    ここで、ServerNameに存在しないドメインを指定しておきます。(私はlocalhostを入れています。)
    ここで何も指定しないと、デフォルトとして自分のホスト名を仮定するようです。このため、後で自分自身のホスト名を指定したVirtualHostの設定が無視される原因になってしまいます。
    なお、デフォルトで/var/www/htmlに置いてあるindex.htmlは、そこに書いてある通り「本稼働前に別のものに置き換えるべきページ」ですのでご注意ください。
  3. 最初から全バーチャルホストでcgiが実行できるような設定になっているので、これを解除します。逆に、cgiの実行そのもののためのモジュールが無効化されているので、これは有効化しておきます。
    # a2disconf serve-cgi-bin.conf
    # a2enmod cgid
    # service apache2 restart
    これで、バーチャルホスト単位にcgiの実行可否を設定できるようになります。(方法は000-defautにコメントされていますが、VirtualHost内にInclude /etc/apache2/conf-available/serve-cgi-bin.confを書くだけです。)
  4. それほどアクセス数が多くないなら、ログローテートは週次程度で十分なので、変更します。(これは、後々のアクセスログ解析でメールログと合わせて解析することを考えた対応です。無理に変える必要はありません。)
    設定ファイルは/etc/logrotate.d/apache2です。
    /var/log/apache2/*.log {
            weekly
            missingok
            rotate 14
            compress
            delaycompress
            notifempty
            create 640 root adm
            sharedscripts

Virtual Serverの設定

2.2まではName Virtual Serverの機能を明示的に有効化していましたが、2.4からは/etc/apache2/ports.confで指定されたhttpポートで自動的に有効になります。このため、各FQDNごとの設定を/etc/apache2/sites-availableに置き、サイトを有効化するだけで使えます。
なお、クライアント側がアクセスしてきたFQDNに対応する設定がない場合は、defaultの設定が適用されます。

  1. アクセスが想定されるFQDNごとの設定ファイルは、/etc/apache2/sites-availableにexample.net.confというようなドメイン名+confというファイル名で作成します。
    ファイルの中身は<VirtualHost *:80>ディレクティブで囲んでください。(難しいことを考えずに、000-default.confをコピーして使えば良いです。)
    <VirtualHost *:80>
            ServerName example.net
            
            ServerAdmin info@example.net
            DocumentRoot /xxx/example.net/
            
            <Directory /xxx/example.net/>
                    Options -Indexes
                    AllowOverride None
                    Require all granted
            </Directory>
    
            LogLevel warn
            
            ErrorLog ${APACHE_LOG_DIR}/example.net-error.log
            CustomLog ${APACHE_LOG_DIR}/example.net-access.log combined
    </VirtualHost>
  2. a2ensiteを使い、Apacheの設定ファイルに取り込みます。
    # a2ensite example.net
    これは、/etc/apache2/sites-availableのファイルへ、/etc/apache2/sites-enabledからSymLinkを作っています。Apacheは設定ファイルの読込元としてsites-enabledのほうだけ対象としているので、リンクがあるもののみが読み込まれるようになっています。
  3. Apacheの設定を再読み込みします。
    # service apache2 reload
  4. なお、サイトを削除する場合は、a2dissiteを使います。
    # a2dissite example.net
    # service apache2 reload
    これは、a2ensiteで作成したリンクを削除しています。Apacheからは表示できなくなりますが、設定ファイルの実体を消すわけではないため、設定ファイルの再利用や修正が可能になっています。

同様の設定ファイルをServerNameごとに作成することで、アクセスしてきたFQDNごとの設定を定義することが可能です。


目次へ戻る