Apache2 Webサーバを構築してみる

/ Linux/Unix / Comment[2]

CentOS7+Apache2でWebサーバを構築するメモです

Apacheの設定

メインの設定ファイルはhttpd.confですが、いつのバージョンからなのか設定ファイルをインクルードするようになってバラバラになってます。

設定ファイルのパス

  • /etc/httpd/conf/httpd.conf
  • /etc/httpd/conf.d/*

httpd.confの設定項目はディレクティブと呼ばれます。以下が主なディレクティブです。

基本設定

ServerTokens
HTTPヘッダにどれだけのサーバ情報を出力するかを設定します。
Prod:Apache、Major:Apache/2、Minor:Apache/2.4、Min:Apache/2.4.1、OS:Apache/2.4.1(CentOS)、Full:動いてるモジュールとそのバージョンまで表示
ServerRoot
Apacheが利用する設定やログなどのディレクトリ
ServerName
サーバのホスト名
ServerAdmin
サーバ管理者のメールアドレス エラーページなどに表示される
User
子プロセスの実行ユーザ
Group
子プロセスの実行グループ
DocumentRoot
ドキュメントルートとなるディレクトリ
UserDir
一般ユーザの公開ディレクトリを指定。たとえば「public」とするとブラウザで~userにアクセスした場合、/home/user/public/が公開されます。disableとした場合はユーザディレクトリは公開されません。
DirectoryIndex
ファイル名を省略した場合に表示されるファイル名をスペース区切りで記述します。
「DirectoryIndex index.html index.php index.htm」
ErrorDocument
エラーが発生した場合のファイル名or文字列orURLを指定します。
「ErrorDocument 404 /var/www/404.html」
Options
ディレクトリごとにオプション機能を設定します。

ログ関連の設定

ErrorLog
エラーログのパスを指定
LogLevel
ログレベルを指定
LogFormat
ログのフォーマットを指定
「LogFormat "%a ${Referer}i ${User-agent}i %f" testformat 」
CustomLog
LogFormatで定義したログフォーマット名を指定してカスタムログを取ることが出来ます
「CustomLog logs/access.log testformat」
HostLookups
DNS逆引きを行い接続IPアドレスのホスト名を取得します。

リダイレクトやエイリアスの設定

Alias
エイリアスを指定します。
「Alias /test /storage/testdir」とした場合、ホスト/testにアクセスすると/storage/testdirが参照されます。
Redirect
リダイレクトを指定します。
「Redirect /google http://google.com」とした場合、ホスト/googleにアクセスするとhttp://google.comにリダイレクトされます。
ScriptAlias
CGIスクリプト用のディレクトリを指定
「ScriptAlias /cgi-bin/ /var/www/cgi-bin/」

パフォーマンス設定

Apacheは1クライアントごと1プロセスを使って処理されます。クライアントからの接続は親プロセスが待ち受け、クライアントが接続した場合、子プロセスが処理を行います。あらかじめ一定数のプロセスを待機させることでパフォーマンスの向上を図っています。

StartServers
起動時の子プロセス数
MinSpareServers
待機させる子プロセスの最小数
MaxSpareServers
待機させる子プロセスの最大数
MaxClients
最大子プロセス数
Timeout
タイムアウトまでの秒数
KeepAlive
on|off キープアライブを有効にするか否か
MaxKeepAliveRequests
キープアライブの上限リクエスト数
KeepAliveTimeout
キープアライブのタイムアウトまでの秒数

キープアライブとは:
通常、Webページにアクセスする際、一つ一つのファイルごとに接続・GET・切断の処理を繰り返しています。そこでもっとスマートに出来ないだろうかということで、一度接続したら一定時間内なら何回でもリクエストを送れるようにする仕組みをキープアライブといいます。

.htaccess

.htaccessは外部設定ファイルのデフォルト名です。公開ディレクトリの任意の階層に配置します。.htaccessファイルに記述した内容はそのディレクトリ配下のみにおいてhttpd.confの設定を上書きすることが可能となります。

以下はhttpd.confのAccessFilenameディレクティブで外部設定ファイルのファイル名を指定した例です。

AccessFilename .htaccess

この外部設定ファイルの上書きを許可するにはhttpd.confのAllowOverrideディレクティブで許可する必要があります。また以下のパラメータを記述することで.htaccessで上書き可能な範疇も指定できます。

AuthConfig認証に関する設定を有効化
IndexesDirectoryIndexなどの設定を有効化
FileInfoファイルタイプの制御を有効化
LimitOrder,Allow,Denyによる設定を有効化
OptionsOptionsの設定を有効化
None.htaccessを無効化
All変更可能なすべての設定を有効化

.htaccessによる変更をすべて許可する例

AllowOverride All

モジュール

apacheではコアモジュールと後から読み込めるモジュールの2種類があります。頻繁に使うモジュールはコンパイル時に組み込んでしまったほうがパフォーマンス的にはよろしいのですが、あまり使わないモジュールを組み込んでおくと逆にパフォーマンスが低下しかねません。その辺は環境に応じて考えるべき点ですね。

モジュールをロードするにはhttpd.confのLoadModuleディレクティブで指定します。

LoadModule rewrite_module modules/mod_rewrite.so

組み込み済みのモジュールを確認するにはhttpd -lコマンドを実行します。(Debian系はapache2 -l
# httpd -l

組み込み済みとロード済みのモジュールを確認するにはhttpd -Mを実行します。(Debian系はa2enmod
# httpd -M

Debian系のa2enmodではモジュール名をつけるとモジュールの有効化、a2dismodでモジュールの無効化ができます。
# a2enmod rewrite
# a2dismod rewrite

認証

Apacheでは指定したディレクトリ以下のアクセスに対して認証をかけることができます。認証方式にはベーシック認証とダイジェスト認証が利用できます。

ベーシック認証

名前の通りシンプルな認証方式です。ユーザ名とパスワードはBASE64でエンコードされた状態でやり取りされます。暗号化はされていないため危険な認証方式です。

httpd.conf

<Directory "/var/www/basic">
  AuthType Basic          #方式
  AuthName "Hello World"  #ダイアログに表示される文言
  AuthUserFile /etc/httpd/conf/.htpasswd #パスワードファイル
  Require valid-user      #アクセス可能なユーザを指定(valid-user=存在するユーザすべて)
</Directory>

htpasswdコマンドでパスワードファイルを作成やユーザとパスワードの管理を行います。

Usage: htpasswd [オプション] ファイル名 ユーザ名

主なオプションは以下の通りです。

  • -c パスワードファイルを新規作成(上書きする)
  • -m MD5で暗号化
  • -s SHA1で暗号化
  • -D ユーザを削除

パスワードファイルとユーザを作成
# htpasswd -c /etc/httpd/conf/.htpasswd user

ユーザのパスワードを更新
# htpasswd /etc/httpd/conf/.htpasswd user

ユーザを削除
# htpasswd -D /etc/httpd/conf/.htpasswd user

.htpasswdファイルの中身は「ユーザ名:パスワードハッシュ」という形で各ユーザの情報が記述されています。

user:$apr1$Udnd5rVj$GvpUn.xfatBk63rwmEyyu1
admin:$apr1$zLHp1sqL$Nv/tI./jOsmmIp1t79.QV.

httpdデーモンを再起動して認証をかけたディレクトリにアクセスすると、このような認証ダイアログが表示されるようになります。

ダイジェスト認証

チャレンジレスポンス方式の認証方式です。

httpd.conf

<Directory "/var/www/digest">
  AuthType Digest
  AuthName "Hello World"
  AuthUserFile /etc/httpd/conf/.htdigest
  Require valid-user
</Directory>

ダイジェスト認証のパスワードファイルを作成・管理する場合はhtdigestコマンドで行います。
# htdigest -c /etc/httpd/conf/.htdigest "Hello World" user

AuthNameディレクティブは基本認証の場合ではダイアログメッセージの指定に過ぎませんが、ダイジェスト認証では認証を行う領域を指定します。
そのため、AuthNameとhtdigestコマンドの領域名が合っていなければなりません。

関連記事

コメント

Re: タイトルなし

ありがとうございます。構造を意識した甲斐がありました。
つたない文章で誤字脱字などよくありますが、よかったらこれからも覗いてください

| URL | 長倉 怜二#-

通りすがりですが、このブログいいね
記事に見出しをはじめ要素が適切に使われてて見やすい
ブックマークしました。たまに覗きに来ます

| URL | 通りすがり#-

:
:
:
:
:
管理人のみ表示を許可