#概要
apacheについて、色々調べたのでメモ程度にまとめてます。
インストール・設定・モジュール等について書きます。
まだ知識不足なので間違いがありましたら、ご指摘ください。
#インストール
インストールには以下2つの方法がある。
・ソースからコンパイル
・パッケージを利用する
###ソースからコンパイル
configure→make→make installの順でコンパイル
例)
$ ./configure --prefix=/usr/local/apache --enable-module=ssl
オプションの説明。
--prefix=パス
でインストール先のディレクトリを指定。
--enable-module=ssl
でsslという標準モジュールを組み込む。
詳細はこちらで、Apache HTTP Server Version 2.0
コンパイルとインストール
###パッケージを利用
RedHat系
# yum install httpd
Debian系
# apt-get install apache2
#Apacheの設定
主に設定ファイル、設定の仕方を書きます。
##設定ファイル
###ソースからコンパイル
メイン設定ファイルです。その他設定ファイルあり。
/usr/local/apache2/conf/httpd.conf
###RedHat系
メイン設定ファイル
/etc/httpd/conf/httpd.conf
補助設定ファイルを格納するディレクトリ
/etc/httpd/conf.d
###Debian系
メイン設定ファイル
/etc/apache2/apache2.conf
補助設定ファイルのディレクトリ
/etc/apache2/
ポートの設定
/etc/apache2/ports.conf
##設定方法
###書式
以下のような形で記述されている。
設定項目
ディレクティブ名 設定値
適用範囲
<Files ファイル名> ... </Files>
<Directory ディレクトリ名> ... </Directory>
<Location URL> ... </Location>
ディレクティブの設定方法は長いのでこちらを参考に。
httpd.confの設定
httpd.confの設定ディレクティブ
#Apacheの制御
CLIでのシステム制御方法について。
###SysVinit
# /etc/init.d/httpd start //Debianではapache2
###systemd
# systemctl start httpd.service //Debianではapache2
apachectl
# apachectl start
以下apachectlのサブコマンド。
・start:起動
・stop:終了
・restart:再起動
・graceful:安全に再起動
・reload:設定ファイルを再読み込み
・configtest:設定ファイルの構文チェック
#モジュール
モジュールの組み込み、表示等を書いています。
###モジュール一覧
とても多いので外部サイトを参考に。
モジュール一覧 - Apache HTTP サーバ バージョン 2.4
モジュールは/usr/lib/httpd/modules
などにインストールされる。
ロードするにはhttpd.confでLoadModule
ディレクティブを使い指定する。
例)
LoadModule ssl_module modules/mod_ssl.so
sslモジュールをロードしている。
###組み込み方
apacheのインストール後にモジュールを組み込むには、apxs
コマンドを使う。
以下でmod_hogeモジュールをDSOとしてコンパイルし、インストールしている。
apxsはこちらを参照。apxsのオプション
$ sudo apxs -i -a -c mod_hoge.c
その後、httpd.confにLoadModuleディレクティブを追記。
LoadModule hoge_module modules/mod_hoge.so
apacheのコンパイル時に--configure
オプションでモジュールを静的に組み込むことも可能。
###モジュールの表示
組み込み済みモジュール
# httpd -l //RedHat
$ sudo apache2 -l //Debian
一覧/有効無効
# httpd -M // 組み込みモジュールとDSOモジュールの一覧。設定ファイルの文法チェック
$ sudo a2enmod //利用可能なモジュールを表示し、対話的にモジュールを有効化する
$ sudo a2dismod //モジュールの無効化
変更後にはapacheの再起動が必要。
#アクセスの認証
基本認証(BASIC認証)とダイジェスト認証があり、IPアドレス・ホスト名でのアクセス制御もできる。
###基本認証
<Directory "/var/www/html/hoge">
AuthType Basic
AuthName "ダイアログに出力されるメッセージ"
AuthUserFile /etc/httpd/conf/htpasswd
Require valid-user
</Directory>
Require valid-user
と指定するとパスワードファイルのすべてのユーザがアクセスを許可される。
ユーザ名を列挙すると指定ユーザのみが許可される。
ユーザ名とパスワードを設定するにはhtpasswd
コマンドを使う。
Manual Page: htpasswd
また、グループでの認証も可能。
###ダイジェスト認証
<Directory "/var/www/html/digest-hoge">
AuthType Digest
AuthName "digest-hoge"
AuthUserFile /etc/httpd/conf/htdigestfile
Require valid-user
</Directory>
※AuthName
は認証の領域を指定する。これが違うと認証ができない。
ダイジェスト認証のためのユーザとパスワードの設定はhtdigest
コマンドを使う。
htdigest - manage user files for digest authentication
###ホストベースのアクセス
Requireディレクティブを使ったアクセス制御。
authz_host_module
モジュールで提供されています。
※Order, Allow, Deny
によるアクセス制御は非推奨。
書式
Require エンティティ [値...]
見やすいのでapacheの公式ではないが、これを参考に。Requireディレクティブ
#バーチャルホスト
バーチャルホストを使用すると1台のサーバで複数のwebサイトを管理できる。
名前ベースとIPベースのバーチャルホストがある。
###名前ベースのバーチャルホスト
1つのIPアドレスと複数のドメイン名を設定する。
//1つ目
<VirtualHost *:80>
ServerName web.hoge.jp
ServerAdmin web@web.hoge.jp
DocumentRoot /var/www/hoge
</VirtualHost>
//2つ目
<VirtualHost *:80>
ServerName www.example.net
ServerAdmin web@example.net
DocumentRoot /var/www/example
</VirtualHost>
###IPベースのバーチャルホスト
複数のIPアドレスと複数のドメイン名を設定する。
Listen
ディレクティブでIPアドレスを指定する。
Listen 192.168.1.10:80
Listen 192.168.1.11:80
===省略===
//1つ目
<VirtualHost 192.168.1.10:80>
ServerName web.hoge.jp
ServerAdmin web@web.hoge.jp
DocumentRoot /var/www/hoge
</VirtualHost>
//2つ目
<VirtualHost 192.168.1.11:80>
ServerName www.example.net
ServerAdmin web@example.net
DocumentRoot /var/www/example
</VirtualHost>
#その他
###SSL/TLS
SSL/TLS Strong Encryption
Apache2.4でHTTPS通信を行うための環境構築手順と詰まりどころ
###プロキシサーバ
Squidをリバースプロキシとして使ってみた