プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • インフラ
  • 【Apache】概要(Nginxとの違い、動作モード、リリースノート、設定ファイル、MIM…
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Apache】概要(Nginxとの違い、動作モード、リリースノート、設定ファイル、MIMEタイプ、ディレクティブ、バーチャルホスト、Basic認証)

04.23

  • miyabisan2
  • コメントを書く

この記事は5分で読めます

Nginxとの違い

Apache Nginx
動作モデル MPM(Multi Processing Module)
要は複数動作モデル(prefork、worker、event)
イベント駆動モデルのみ
パフォーマンス 遅い(ただし、チューニング次第ではnginxに匹敵する。) 速い
拡張モジュール 後付けてビルドして組み込める。 nginx本体のビルド時にしか組み込めない。

Apacheの動作モード

種類

「event MPM」が一番新しく効率が良いのですが、一部動作しないモジュールがあるため初心者の場合はとりあえず「prefork MPM」を選んでおくのが無難でしょう。

prefork MPM

Apacheで採用されるモデルです。

マルチプロセス型のサーバ。あらかじめ複数プロセスのhttpdを立ち上げておき同時アクセスを捌く。Apacheを構築した段階のデフォルトはこれになっています。

クライアントからの接続要求から始まる一連の処理を各プロセスで1接続ずつ処理します。そのため大量接続を同時処理するためにはその分だけプロセス(スレッド)を起動しなければなりません。

あまり大量のプロセスを起動すると、プロセス間コンテキストスイッチのオーバーヘッドが大きくなってしまい性能が劣化します。(C10K問題)

近年はこれが原因でNginxが優勢になっていたりもします。

worker MPM

プロセス1つで複数スレッドで同時アクセスを捌く。

event MPM

Apache2.4から追加されました。コネクションを持続するKeepAliveを別スレッドに依頼します。

現在の動作モードを調べる方法

1
httpd -M | grep mpm

リリースノート

長らく1系と2系を共存させることで、安定性と新機能性のどちらも追求してきた。

ただ、1系は2010年1月リリースの「1.3.42」を最後にサポート終了しているため現状は2系にバージョンアップをすることが推奨されています。

バージョン リリース日 説明
1,x 1995/11 ・ハンドラという機能として定義されたSSI(Server SIde Include)

・この時点でモジュールによる機能拡張は行えた。

1.3 1998/7 ・この系統まではSSIをCGIと同じくハンドラで扱っていた。
1.3.12 2000/2 AddDefaultCharsetディレクティブ追加
1.3.42 2010/1 このバージョンを最後にサポート終了している。
2.x ・入出力データを加工するフィルタ機能実装

・サーバーMPM(Multi Processing Module)としてモジュール化できるようになった。

2.0 2002/4 今は2.0系はあまり使われない。
2.2 2005/12 2.2系も徐々に使われなくなってきている。
2.4 2012/2 ・現在はApacheはこれの利用を推奨している。

・「event MPM」という機能が追加された。

・nginxに対抗するためにパフォーマンスの改善を行なっている。

設定ファイル

ファイル 説明
httpd.conf Apacheのメインの設定ファイル、このファイルにApacheへの指令である「ディレクティブ」を記述します。
magic MIMEタイプの判定に使用されるファイル。MIMEタイプでは判定でいないファイルのために、ファイルの中身の一部分を見てどのMIMEタイプに該当するファイルかを判定します。(いわゆるマジックナンバーテストのためのファイルということでmagicという名前がついています。)
mime.types システム全体のMIMEタイプの設定ファイル

MIMEタイプ

そもそもMIMEタイプとは?

Windowsなどでは拡張子のみでファイルタイプを判別しますが、Webやメールの世界ではファイルの拡張子とアプリケーションの対応はMIMEタイプで設定し判別します。

Webブラウザは取得したデータのMIMEタイプ(ファイル形式)に応じて処理を決めます。HTTPレスポンスヘッダーの中にも記述されています。

Apacheでは

拡張子とデータタイプの対応表を管理することでデータの種類を判別しています。デフォルトの基本設定ではほとんどの拡張子について設定されていますが、設定ファイルに後から追加することも可能です。

基本設定

mime.typesというファイルに記述されています。

MIMEタイプを追加する設定

1
AddType [mimeタイプ] [対応する拡張子]

ディレクティブ

基本的なディレクティブ

ServerRoot

Apacheの設定ファイルが保存される起点となるディレクトリ

DocumentRoot

HTMLファイルなどのコンテンツを保存する基点となるディレクトリ

ServerAdmin

Webの管理者のメールアドレス

ServerName

Webサーバーを公開している「ホスト名:ポート番号」

AddDefaultCharset

レスポンスとして返す、デフォルトの文字コードの設定、Apache1.3.12以降で追加された。レスポンスヘッダに「Content-Type」に指定が強制されてしまう。もし、文字コードを混在させたシステムを作っている場合は気をつける。

DirectoryIndex

URLでファイルではなくディレクトリが指定された場合に表示されるファイルの指定、デフォルトでは「index.html」になっている。

有効範囲を設定するディレクティブ(セクションディレクティブ)

Directory

特定ディレクトリだけに有効範囲を限定する。

Files

ファイル名によってファイルに対してのみ限定する。ワイルドカードも使えます。「パスと関係なくこのファイル名があればそれに対して設定する!」みたいな挙動です。

Location

URLパス指定する。

Alias

ドキュメントルート以外のファイルを公開したい場合に使います。

正規表現による指定

正規表現による指定をできます。

  • DirectoryMatch
  • FilesMatch
  • LocationMatch
  • AliasMatch

Optionsディレクティブ

セクションディレクティブの内部で指定することで必要な機能を制限できます。(例えば、サイトにアクセスされたときにファイル一覧を表示するかなど)

モジュールのロード関連

モジュールがロードされていた場合の処理を記述できます。

LoadModule

動的モジュールのロードを行います。

1
LoadModule モジュール識別子 モジュールのパス

IfModule

あるモジュールがロードされていた場合に実行するディレクティブを指定できる。モジュールがロードされていないのに不要なディレクティブが実行されてしまうことを防げます。

1
2
3
<IfModule mod_xxxx.c>
←ここにディレクティブを記述する。
</IfModule>

なお、モジュール名(xxx.so)はコンパイル前のモジュール名(xxx.c)を指定します。

アクセス制御ディレクティブ

Require

Apache2.4以降ではホストベースのアクセス制御にこれを使用する。(2.4以前はユーザーやグループによるアクセス制御にのみ使用されていた。)

1
Require all granted

上記は、「all(全て)に対してgranted(アクセスを許可する)」という設定になります。

RequireAny

いずれかの条件に一致するホストを指定する。

モジュール

静的モジュール

Apacheのコンパイル時に静的にリンクされてApacheの本体に組み込まれる

どの静的モジュールが読み込まれているか確認するコマンド

1
httpd -l

DSO(Dynamic Shared Object):動的モジュール

再コンパイルすることなく動的に読み込める。

速度的には静的モジュールには劣りますが、使い勝手が良いため大抵のLinuxディストリビューションではこちらになっている。

動的モジュールの例

mod_cgi.so

CGIのためのモジュール

mod_dav.so

WebDAVのサーバー機能を提供するモジュール

mod_auth_host.so

ホストベースのアクセス制御を担当する

mod_auth_basic.so(旧:mod_authモジュール)

Basic認証のモジュール

mod_auth_digest.so

ダイジェスト認証用のモジュール

mod_ssl.so

SSLを使用するためのモジュール

設定ファイル

どのモジュールを有効にするかを設定できる。

現在有効な全てのモジュールを確認するコマンド

1
httpd -M

モジュール名の後ろに「(static)」とついていたら静的モジュール、「(shared)」と付いていたら動的モジュールになる。

バーチャルホストとは?

1台のサーバで複数ドメインを運用する技術です。多くのレンタルサーバーではこの技術はデフォルトで使われています。

メリット

サイトごとにサーバーを用意する必要がなくなるので、サーバーコストの低減につながります。

設定

名前ベース

ドメインに対してサイトを紐付けます。

IPベース

IPアドレスに対してサイトを紐付けます。

ベーシック認証とは?

Apacheの.htaccessという設定ファイルを使った認証のことでディレクトリごとに動作を制御する事が可能です。

htaccessでできる事の種類

  • ベーシック認証
  • PCサイトからスマホサイトへリダイレクトさせる。
  • あるURLからあるURLへリダイレクトさせる。
  • 特定のIPやプロバイダからのアクセスを制限する。

ベーシック認証の実装

PHPでpassword_hash関数によりパスワードを暗号化する事が可能です。

1
password_hash('平文のパスワード',PASSWORD_BCRYPT)

上記で生成したパスワードを下記の.htpasswdファイルに記述します。

.htpasswd

1
ユーザー名:password_hashによりハッシュ化したパスワード

.htaccess

1
2
3
4
AuthType Basic
AuthName ベーシック認証のポップアップに出すメッセージ
AuthUserFile 「.htpasswd」のファイルパス
require valid-user

AuthType Basic

ベーシック認証であることを示します。

require valid-user

認証したユーザーのみログインを可能とします。

スポンサーリンク
  • 2022 04.23
  • miyabisan2
  • コメントを書く
  • インフラ
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2021 12.08

    【インフラ】「プロキシ」と「リバースプロキシ」の違い

  2. 2020 06.11

    【インフラ】「ドメイン」、お名前.comでのドメインの購入

  3. 2019 12.22

    【Heroku】概要やRailsをアップロードする手順

  4. 2018 06.15

    「Salesforce(セールスフォース)」ってどんな技術なの?

  5. 2019 11.24

    【インフラ】本番環境インフラ構成例など

  6. 2021 12.01

    【インフラ】構成管理・各種デプロイ自動化言語の違い、Infrastructure as Code(インフラのコード化)

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【CSS】「置換要素」、「object-fit」につい…

【Mac】ディレクトリの空き容量調査メモ、その他Mac…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー