search
LoginSignup
34
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

Apache 2.4 設定

はじめに

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 以下にまとめて記述しておくと管理が楽になります。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
34
Help us understand the problem. What are the problem?