Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Apache 2.4 設定

More than 3 years have passed since last update.

はじめに

CentOS 7 minimal インストール ~ LAMP 構築まで

こちらは上の記事の続きとなります。

Apache 用ユーザーの作成

専用の Apache 実行ユーザーを作成しておきたい派なので作成します。

[root@localhost ~]# useradd web
[root@localhost ~]# passwd web

Apache 各種設定

項目別に設定を行っていきます。
通常変更しないものはスルーします。

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf

Listen

Listen 80

待受ポートの設定です。
特に理由がなければ 80 のままでいいでしょう。

User / Group

#User apache
#Group apache
User web
Group web

先程作成した web ユーザーに変更します。
また変更前のユーザーに所有権が割り振られているディレクトリも変更しておく必要があります。

[root@localhost ~]# chown -R root:web /var/lib/php/*
[root@localhost ~]# chown -R web:web /var/www/
  • /var/lib/php/ 以下は php 関連の一時ファイル置き場です。
  • /var/www/ 以下は Web 関連のデータ置き場です。

ServerAdmin

#ServerAdmin root@localhost
ServerAdmin hoge@example.com

サーバ管理者の連絡先です。
サーバエラーが発生した際などに表示されます。

DocumentRoot

DocumentRoot "/var/www/html"

サーバに http アクセスしたときのルートディレクトリです。
http://192.168.56.101/index.html にアクセスしたときは /var/www/html/index.html が表示されます。
このパスはお約束みたいなものなので、マウントしているストレージを DocumentRoot にしたい場合は /var/www/html 自体をシンボリックリンクにしてしまったほうがわかりやすいです。

[root@localhost ~]# rmdir /var/www/html
[root@localhost ~]# ln -s /mnt/hoge /var/www/html

AddDefaultCharset

#AddDefaultCharset UTF-8

コメントアウトすることを推奨します。
この設定は HTML の meta タグより優先されてしまうため文字化けの原因となるからです。

Options / Allowoverride

<Directory "/var/www/html">
#    Options Indexes FollowSymLinks
#    AllowOverride None
    AllowOverride FileInfo
    Require all granted
</Directory>

Options の Indexes と FollowSymLinks は常に ON である必要性がないので OFF にしておきます。
Allowoverride は mod_rewrite で必要となる FileInfo のみ許可します。

アクセス制御

アクセス制御の記法は 2.4 で大きく変更となり、よりプログラムチックな制御が出来るようになりました。
以下のディレクティブで細かく制御を行うことが出来ます。

  • RequireAny
    • ディレクティブ内に記述されたいずれかの条件を満たしたら真となる
  • RequireAll
    • ディレクティブ内に記述された全ての条件を満たしたら真となる
  • RequireNone
    • ディレクティブ内に記述されたいずれか条件を満たさなかったら真となる

もしどれも記述せずいきなり Require ... と記述した場合、RequireAny で囲まれているものとして扱われます。

実例

すべてのアクセスを許可

<Directory "/var/www/html">
  # いきなり Require を書いているので <RequireAny> で囲まれていると判断される
  # <RequireAny>
    Require all granted
  # </RequireAny>
</Directory>

すべてのアクセスを拒否

<Directory "/var/www/html">
  # <RequireAny>
    Require all denied
  # </RequireAny>
</Directory>

特定の IP アドレスからのアクセスのみ許可

<Directory "/var/www/html">
  # <RequireAny>
  Require ip 192.168.1.1
  # </RequireAny>
</Directory>

特定の IP アドレスからのアクセスを拒否

パターン1
<Directory "/var/www/html">
  <RequireAll>
    # 全て許可するが
    Require all granted
    # 192.168.1.1 は拒否
    Require not ip 192.168.1.1
  </RequireAll>
</Directory>
パターン2
<Directory "/var/www/html">
  <RequireAll>
    # 全て許可するが
    Require all granted
    # 192.168.1.1 は拒否
    <RequireNone>
      Require ip 192.168.1.1
    </RequireNone>
  </RequireAll>
</Directory>

LDAP 認証

基本パターン
<Directory "/var/www/html">
  AuthName "LDAP"
  AuthType Basic
  AuthBasicProvider ldap
  AuthLDAPURL ldap://ldaphost/o=yourorg

  # 認証が通れば誰でもアクセス許可
  Require valid-user
</Directory>
ちょっと複雑
<Directory "/var/www/html">
  AuthName "LDAP"
  AuthType Basic
  AuthBasicProvider ldap
  AuthLDAPURL ldap://ldaphost/o=yourorg

  <RequireAll>
    <RequireAny>
      # campany.local ドメインの development 組織にある team1 に所属していれば許可
      Require ldap-group  cn=team1,ou=development,dc=campany,dc=local

      # もしくは team2 に所属しており IP が 192.168.10.0/24 なら許可
      <RequireAll>
        Require ldap-group  cn=team2,ou=development,dc=campany,dc=local
        Require ip 192.168.10.
      </RequireAll>
    </RequireAny>
  </RequireAll>
</Directory>

小ネタ

設定ファイルの分散

IncludeOptional conf.d/*.conf

httpd.conf の末尾には上記のような記述がされており、conf.d 以下にある全ての conf ファイルを自動でロードするようになっています。
そのためアプリケーション設定などは conf.d 以下にまとめて記述しておくと管理が楽になります。

wreath
コンシューマ系のゲーム開発をメインに、社内サーバの構築やサーバプログラムの開発も行っています。 ここは自分の作業メモ的な感じで使っていく予定です。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away