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設定を有効にする
OptionsNone- .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|FullProdと設定するとバージョンが見えなくなる
EnableMMAP On|Off- httpdがメモリマッピングを使うかどうか
EnableSendfile On|Off- httpdがカーネルのsendfile サポートを使うかどうか
ErrorLog file-path|syslog[:facility]- サーバに生じたさまざまなエラーを 記録する為のファイルの名前を設定
- 例
ErrorLog /var/log/httpd/error_logErrorLog syslog:user
KeepAliveTimeout seconds- Apache が次のリクエストを何秒待つかを指定
Requireディレクティブ各種Require user userid [userid] ...Require group group-name [group-name] ...Require valid-userRequire 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