はじめに
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 アドレスからのアクセスを拒否
<Directory "/var/www/html">
<RequireAll>
# 全て許可するが
Require all granted
# 192.168.1.1 は拒否
Require not ip 192.168.1.1
</RequireAll>
</Directory>
<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 以下にまとめて記述しておくと管理が楽になります。