【Apache】初心者が知っておきたい基本的な知識

Apacheのアイコン画像 Apache
スポンサーリンク

「Apacheを業務で実際に使うことになったけど、全く知識がない。そのため、とりあえず、基本的な知識を知って概要を抑えておきたい。」

といった方向けに、Apacheの基礎知識を解説していきます。


未経験から年収1,000万達成!リアルな情報をお届け

未経験からSESエンジニアとしてキャリアをスタートし、フリーランスへ転向後、年収1000万を達成した筆者が、収入を上げるために活用した転職サイトとフリーランス案件紹介サービスを徹底解説。あなたのキャリアアップに役立つ具体的な方法を紹介します。

スポンサーリンク

環境のセットアップ

実際に手を動かしながら読んで頂いた方が理解しやすいと思います。そのため、すぐにApacheが触れるようにDockerファイルを用意しました。

Dockerの使い方については解説記事を作成予定。少々お待ち下さい。

コードはこちら。

Build software better, together
GitHub is where people build software. More than 100 million people use GitHub to discover, fork, and contribute to over...

手順

  1. 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!
  1. Apache用のコンテナに接続する。
$ docker exec -it stdinf-httpd bash
bash-4.2# ←コンテナの中に接続できる。

これでいつでもWEBサーバ(Apacheコンテナ)にアクセスできます。

各種バージョン

AmazonLinux2
Apache2.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 から読み込まれることで有効になります。

モジュールとは、Apacheの部品みたいなものです。

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
  • サーバの80番ポートを外部に公開する。(クライアントは80番ポートにアクセスすることで、コンテンツを見ることができるようになります。)

通常クライアントは、「http://[ドメイン]:[ポート]/[パス]」のように指定してアクセスします。例外的に「http://study-infra/」は「http://study-infra:80/index.html」と同じ意味になります。

IncludeOptional conf.d/*.conf
  • /etc/httpd/conf.d/XXXX.conf を読み込んで、設定を追加する。

今回、読み込みたい対象のファイルは、welcom.confです。

IncludeOptinalと似た設定で、Includeがあります。

違いとしては、読み込む対象のファイルがない場合、IncludeOptionalの場合はエラーになりません。反対にIncludeの場合は、エラーになります。

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>
  • 全てのURLに対して(<LocationMatch “^/+$”>〜</Location>)
  • ブラウザでディレクトリ構成を見えないようにする(Options -Indexes)
  • 403エラー時に /.noindex.html をクライアントに返す(ErrorDocument 403 /.noindex.html)

LocationMatch

正規表現を利用して、設定を反映するURLの範囲を決める。

Options -Indexes

ディレクトリ構成がブラウザから見えるようにするかどうかの設定。

通常はオフ。(セキュリティリスクもあるため)

ErrorDocument 403 ./noindex.html

エラーが発生したときにクライアントに送付するファイルの設定。

この場合、403エラーのとき./noindex.htmlをクライアントに返します。

<Directory /usr/share/httpd/noindex>
    AllowOverride None
    Require all granted
</Directory>
  • /usr/share/httpd/noindex 配下に対して(<Directory /usr/share/httpd/noindex>〜</Directory>)
  • .htaccessを無効化(AllowOverride None)
  • 全員のアクセスを許可(Require all granted)

<Directory /usr/share/httpd/noindex> 〜 </Derectory>

設定を適用するディレクトリの範囲を設定する。

AllowOverride

Require

Alias /.noindex.html /usr/share/httpd/noindex/index.html
  • /.noindex.html でアクセスされたら、/usr/share/httpd/noindex/index.html を返す

URLとファイルシステムをマッピングさせる設定。

以上で設定の解説は終わりです。

プロフィール
この記事を書いた人
katsuya

SESからキャリアをスタートし、現在はフリーランスとして活動しています。フリーランスになってから6年で年収1,000万円を達成しました。「Study Infra」では、今までの経験やITインフラに関する情報を発信中です。

katsuyaをフォローする
ApacheWEB Server
スポンサーリンク
シェアする
katsuyaをフォローする

コメント

タイトルとURLをコピーしました