apacheの設定と使い方
概要
- apache2 - Apache Hypertext Transfer Protocol Server
インストール
ubuntu, debian
$ sudo apt install apache2
rhel
$ sudo yum install httpd
コンパイルする場合
$ ./configure --prefix=/usr/local/apache --enable-module=ssl
設定
設定ファイルの場所
debian
/etc/apache2/apache2.conf
rhel
/etc/httpd/conf/httpd.conf
ディレクティブ
<Directory directory-path> ... </Directory>
- 指定のディレクトリとそのサブディレクトリに対して適応される
<Directory ~ "^/www/.*/[0-9]{3}">
などの正規表現を使える
<DirectoryMatch regex> ... </DirectoryMatch>
- 正規表現にマッチするファイルシステムのディレクトリと サブディレクトリとのみに適用される
<DirectoryMatch "^/www/(.+/)?[0-9]{3}">
などデフォルトで正規表現を使える
<Files filename> ... </Files>
<Files ~ "\.(gif|jpe?g|png)$">
のように正規表現を使える
<FilesMatch regex> ... </FilesMatch>
<Location URL-path|URL> ... </Location>
- URLにより中に書かれたディレクティブの適用範囲を制限
<LocationMatch regex> ... </LocationMatch>
<Limit method [method] ... > ... </Limit>
- methodを制限する条件を書く
<LimitExcept method [method] ... > ... </Limit>
- methodを制限しない条件を書く
<VirtualHost ip-address:port> ... </VirtualHost>
- 特定のバーチャルホストに対してのみ適用されるディレクティブ群を括る
<RequireAll> ... </RequireAll>
- すべての条件に一致したらtrue
<RequireAny> ... </RequireAny>
- すべての条件に一致したらfalse
<RequireNone> ... </RequireNone>
- すべての条件に一致しなかったらtrue
ServerName
- ホスト名、ポート番号
ServerAlias
- 名前ベースでのサーバの別名を設定
AllowOverride All|None|directive-type
.htaccess
ファイルを見つけた時、設定を上書きできるか- directive-type各種
AuthConfig
- 認証に関する設定
Idexes
- DirectoryIndexを有効にする
FileInfo
- ファイルタイプの制御設定を有効にする
Limit
- Order, Allow, Deny設定を有効にする
Options
None
- .htaccessで変更を無効にする
All
- .htaccessで変更をすべて有効にする
AccessFileName
- 外部設定ファイル名(e.g.
.htaccess
)
- 外部設定ファイル名(e.g.
AuthName
- パスワード認証などの認可領域名
AuthUserFile
- パスワードファイル名
Alias URL-path file-path|directory-path
- url-pathで始まるものはdirectory-filenameで始まるローカルファイルにマップ
DocumentRoot <directory-path>
- ドキュメントのルートを示す
Listen <port>
- 待受ポート
User <apache>
- 実行ユーザ名
UserDir <公開ディレクトリ>|disabled
- 一般ユーザの
~public_html
を公開するかどうか http://hostname/~ユーザ名
でアクセスできる
- 一般ユーザの
Group <apache>
- 実行グループ名
ServerAdmin <admin@hoo.com>
- 管理者のメールアドレス
ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full
Prod
と設定するとバージョンが見えなくなる
EnableMMAP On|Off
- httpdがメモリマッピングを使うかどうか
EnableSendfile On|Off
- httpdがカーネルのsendfile サポートを使うかどうか
ErrorLog file-path|syslog[:facility]
- サーバに生じたさまざまなエラーを 記録する為のファイルの名前を設定
- 例
ErrorLog /var/log/httpd/error_log
ErrorLog syslog:user
KeepAliveTimeout seconds
- Apache が次のリクエストを何秒待つかを指定
Require
ディレクティブ各種Require user userid [userid] ...
Require group group-name [group-name] ...
Require valid-user
Require ip 10 172.20 192.168.2
- クライアントが特定のIPレンジの範囲ならば許可
Require forward-dns dynamic.example.org
- クライアントIPが特定のDNSで解決できれば許可
DirectoryIndex <target-html> index.html
- index.htmlへのアクセスを
に変更する
- index.htmlへのアクセスを
StartServers <子プロセスの数>
- 起動時の子プロセスの数
MinSpareServer <子プロセスの数>
- 待機する子プロセスの最小値
MaxSpareServer <子プロセスの数>
- 待機する子プロセスの最大値
ServerLimits <子プロセスの数>
- 生成できる子プロセスの数
MaxRequestWorkers <同時接続数>
- 同時に接続できる最大数
Timeout <seconds>
- クライアントからの接続がタイムアウトになる秒数
具体例
基本認証
<Direcotry "/~">
AuthType Basic
AuthName "Please Enter Your ID"
AuthUserFile /etc/apache2/conf/htpasswd
Require valid-user
</Direcotry>
ツール
htpasswd
概要
- digest認証用の
.htpasswd
を生成する - 引数
-c
- パスワードファイルを新規に作成
-D
- ユーザを削除
-m
- MD5
-s
- SHA-1
-2
- SHA-256
-5
- SHA-512
-B
- bcrypt
-p
- plane text
例
新規にユーザを追加
$ htpasswd -c <output-path>/htpasswd <user>
すでに.htpasswdがあるときに追加またはパスワードの変更
$ htpasswd <output-path>/htpasswd <user>
ユーザを削除
$ htpasswd -D <output-path>/htpasswd <user>
apachectl
概要
- サービスの管理や設定のテスト
例
サービスを開始
$ apachectl start
サービスを停止
$ apachectl stop
サービスを再起動
$ apachectl restart
サービスを再起動(graceful)
$ apachectl graceful
設定を確認
$ apachectl configtest
apxs
概要
- モジュールをDSOとしてコンパイルしてインストールする
例
$ sudo apxs -i -a -c mod_foobar.c
組み込みモジュール確認
$ httpd -l # rhel
$ apache2 -l # debian, ubuntu
モジュール一覧を表示して、設定ファイルの文法チェック
$ apache2 -M
対話的にモジュールを有効化する
$ sudo a2enmod