「Apacheを業務で実際に使うことになったけど、全く知識がない。そのため、とりあえず、基本的な知識を知って概要を抑えておきたい。」
といった方向けに、Apacheの基礎知識を解説していきます。
環境のセットアップ
実際に手を動かしながら読んで頂いた方が理解しやすいと思います。そのため、すぐにApacheが触れるようにDockerファイルを用意しました。
コードはこちら。
手順
- Apache用のコンテナを作成する。
$ docker-compose up -d
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
78e0ba5ae284 001_httpd "httpd -DFOREGROUND" 25 hours ago Up 25 hours 0.0.0.0:8000->80/tcp stdinf-httpd
=>こんな感じで表示されればOK!
- Apache用のコンテナに接続する。
$ docker exec -it stdinf-httpd bash
bash-4.2# ←コンテナの中に接続できる。
これでいつでもWEBサーバ(Apacheコンテナ)にアクセスできます。
各種バージョン
AmazonLinux | 2 |
Apache | 2.4.46 |
Apacheのファイル構成
デフォルトでは以下のようなファイル構成になっています。
/etc/httpd/
|-- conf
| |-- httpd.conf
| `-- magic
|-- conf.d
| |-- README
| |-- autoindex.conf
| |-- userdir.conf
| `-- welcome.conf
|-- conf.modules.d
| |-- 00-base.conf
| |-- 00-dav.conf
| |-- 00-lua.conf
| |-- 00-mpm.conf
| |-- 00-optional.conf
| |-- 00-proxy.conf
| |-- 00-systemd.conf
| |-- 01-cgi.conf
| |-- 10-h2.conf
| |-- 10-proxy_h2.conf
| `-- README
|-- logs -> ../../var/log/httpd
|-- modules -> ../../usr/lib64/httpd/modules
|-- run -> /run/httpd
`-- state -> ../../var/lib/httpd
7 directories, 17 files
この中からよく使うファイル/ディレクトリを紹介します。
conf / httpd.conf
メインとなる設定ファイル。
ここに全ての設定を書くわけではなく、用途毎に設定ファイル分け、このファイルからそれらを読み込みます。
conf.d
用途毎の設定ファイル。
conf/httpd.conf
から読み込まれることで設定が有効になります。
conf.module.d
モジュール毎の設定ファイル。
使い方は、conf.d
配下と同じで、conf/httpd.conf
から読み込まれることで有効になります。
logs(/var/log/httpdへのシンボリックリンクになっている)
Apacheのログディレクトリ。アクセスログやエラーログが格納されます。
実際にテストページを表示してみる。
Webページを表示してみましょう。
ブラウザで http://localhost:8000 にアクセスしてみてください。
(環境のセットアップで作成したApacheコンテナが起動していること。)
以下のように、テストページ(デフォルトで用意されている)が開くと思います。
ちゃんとApacheが機能していますね。
テストページを表示するための設定解説
それでは、このテストページ、どのような設定で表示されているのか解説していきます。
主なファイルは2つ。
- /etc/httpd/conf/httpd.conf
- /etc/httpd/conf.d/welcome.conf
(全部の設定を解説すると頭がパンクしてしまうので、メインとなるものに焦点をあてています。)
/etc/httpd/conf/httpd.conf
コメント行は省いてた、設定の全量です。
ServerRoot "/etc/httpd"
Listen 80
Include conf.modules.d/*.conf
User apache
Group apache
ServerAdmin root@localhost
<Directory />
AllowOverride none
Require all denied
</Directory>
DocumentRoot "/var/www/html"
<Directory "/var/www">
AllowOverride None
Require all granted
</Directory>
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
<Files ".ht*">
Require all denied
</Files>
ErrorLog "logs/error_log"
LogLevel warn
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog "logs/access_log" combined
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
<IfModule mime_module>
TypesConfig /etc/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</IfModule>
AddDefaultCharset UTF-8
<IfModule mime_magic_module>
MIMEMagicFile conf/magic
</IfModule>
EnableSendfile on
<IfModule mod_http2.c>
Protocols h2 h2c http/1.1
</IfModule>
IncludeOptional conf.d/*.conf
特に注目して欲しい設定たちはこちら。
Listen 80
IncludeOptional conf.d/*.conf
今回、読み込みたい対象のファイルは、welcom.conf
です。
DocumentRoot "/var/www/html"
/etc/httpd/conf.d/welcome.conf
<LocationMatch "^/+$">
Options -Indexes
ErrorDocument 403 /.noindex.html
</LocationMatch>
<Directory /usr/share/httpd/noindex>
AllowOverride None
Require all granted
</Directory>
Alias /.noindex.html /usr/share/httpd/noindex/index.html
設定を解説していきます。
<LocationMatch "^/+$">
Options -Indexes
ErrorDocument 403 /.noindex.html
</LocationMatch>
LocationMatch
正規表現を利用して、設定を反映するURLの範囲を決める。
Options -Indexes
ディレクトリ構成がブラウザから見えるようにするかどうかの設定。
通常はオフ。(セキュリティリスクもあるため)
ErrorDocument 403 ./noindex.html
エラーが発生したときにクライアントに送付するファイルの設定。
この場合、403エラーのとき./noindex.html
をクライアントに返します。
<Directory /usr/share/httpd/noindex>
AllowOverride None
Require all granted
</Directory>
<Directory /usr/share/httpd/noindex> 〜 </Derectory>
設定を適用するディレクトリの範囲を設定する。
AllowOverride
Require
Alias /.noindex.html /usr/share/httpd/noindex/index.html
URLとファイルシステムをマッピングさせる設定。
以上で設定の解説は終わりです。
コメント