CONFファイルによるhttpアクセスの設定

1.全体構成

 /etc/apache2/apache2.conf でサーバー全体の設定を行う。
 linux 他系統で「httpd.conf」として解説されている場合が多い。
 apache2.conf では、/, /usr/share, /usr/www, /srvについてのみ設定する。
 mods-enabled/alias.confで、仮想ディレクトリを定義する。
    個別フォルダに関して、.htaccessで設定を行う。
 →配下のフォルダに対して、apache2.confとは異なる設定が可能
 (1)IDやパスワードを要求する
 (2)リダイレクトを行う
 (3)URLの正規化
 (4)ファイル一覧表示の停止
 (5)特定のIPアドレスやドメインからのアクセス制限

2.apache2.conf

 /etc/apache2/apache2.conf の中で直接設定する事項の他、
 「IncludeOptional mods-enabled/*.load」
 「IncludeOptional mods-enabled/*.conf」
 の記述により、
 /etc/apache2/mods-enabled/*.load, *.conf がインクルードされる。
 /etc/apache2/conf-enabled/*.conf がインクルードされる
 /etc/apache2/sites-enabled/*.conf がインクルードされる
 apache2.conf は、再起動に際して読み込まれる他、
 reload コマンド、またはgraceful コマンドで読み込まれる。
 「systemctl restart apache2」OK  「service apache2 restart」OK
 「systemctl reload apache2」OK
 「service apache2 reload」OK
 「service apache2 graceful」OK
 apache2.conf または、インクルードするファイルに文法違反があると、失敗する。
(編集に際しては、コメントやバックアップなどにより元の設定に戻せるよう工夫する。)

ファイル一覧表示の制御
 DirectoryIndex ディレクティブにより、「ディレクトリ/」でアクセスされた時に 表示するファイル(例えばindex.html)を指定する。複数指定することができ、 並べた順に優先的に選択・表示される。
 DirectoryIndexディレクティブは、
「mods-enabled/dir.conf」に記述されている。
 指定されたファイルが一つも存在しない場合、ディレクトリの一覧が表示される。
 ディレクトリ一覧を防ぐためには、指定したファイルを用意するか、 ディレクトリ一覧を禁止する。そのためには、<Directory >タグの中で
Options -Indexes +FollowSymLinks
と指定する。
apache2.conf の中で、
「AccessFileName .htaccess」
により、「.htaccess」を設定ファイルとして指定している。
<FilesMatch "^\.ht">
  Require all denied
</FilesMatch>
により「.htaccess」ファイルが参照されないように閲覧を禁止する。
AllowOverride ディレクティブにより、.htaccessで再設定できる項目を指定する。
設定可能とするディレクティブ名を列記する。"All" なら全て、"None" なら無。
Allなら、.htaccessで設定できる項目が全て指定される。
Noneなら、.htaccessでは何も指定できない。
AllowOverrideがない場合(デフォルト)AllowOverride All
Indexes 指定ファイルが無い場合のファイル一覧表示
AuthConfig 認証
cd FileInfo ドキュメントタイプやドキュメントのメタデータを制御
Limit アクセス制御関連:クライアントのIP等
Options その他の追加項目

Options以下の書法は、(ディレクトリを項目と略す)
「Options 項目1 項目2 項目3 ・・・」又は
「Options +項目1 -項目2 +項目3 ・・・」
(つまり±が無ければ+と見なし、±無しの項目と有りの項目の混在は不可)
列記して設定可能な項目名は以下の通り:
ExecCGI
FollowSymLinks
Includes
IncludesNOEXEC
Indexes
Multiviews 多言語対応
SymLinksIfOwnerMatch リンク先の所有者
なお、Optionsに関しては、上位ディレクトリに設定されたOptionsとはマージされない。
Optionsのデフォルトは、Options All

3.htaccessの書法

 .htaccessは、設定したいディレクトリに置く。
  異なる階層の.htaccessで同じ項目に異なる設定がある場合、
  より深い階層の.htaccessが適用される。
 .htaccessに文法違反があると、「InternalServerError」となる。
 文字コードはUTF-8(BOM無:notepad.exe使用不可)
 改行コードはLF
 「\」を付けて改行すると、次の行に継続する。
 採集行には空行を入れる。
「#」で始まる行はコメント
 記述は、apache2.conf における
の間に記述される設定河項目と同。
 .htaccessを置くディレクトリまたはその上位のディレクトリに、 apache2.confまたはインクルードにおいてAllowOverrideが設定されていない場合には、 デフォルト設定として、.htaccessが効果を持つ。 設定されている場合には、.htaccess がその設定に従って効果をもつ。

4.MIME

 MIME定義は、/etc/mime.typed で行う。
 /etc/apache2/mods-enabled/mime.conf から参照されている。
「TypesConfig /etc/mime.types」
 

5.exeファイルをダウンロードできるようにする

 /etc/apache2/mod-enabled/mime.conf にexe拡張子が定義されているため、ダウンロードは可能。

6.phpファイルをダウンロードできるようにする

 ダウンロードをすべてスクリプトで行うのが安全。
 ダウンロードするフォルダに対して、.htaccessで以下の設定を行う。

 RemoveHandler .php
 RemoveType .php
 php_flag engine off
#Header set Content-Type application/octet-streram (失敗)
#Header set Content-Disposition attachment(失敗)
→これらは、alias.confで行う必要?(後日)
現状:phpファイルをダウンロードしようとすると、ブラウザ上でプログラムとしてテキスト表示されるl。

(200128)

7.特定のフォルダにパスワードを付ける

(1)特定のフォルダに、以下の内容の .htaccess ファイルを作成する
AuthUserFile /フルパス/.htpasswd
AuthType Basic
AuthName "Test Page"
Require valid-user
(2)フルパスで指定した.htpasswd ファイルを作成する
フルパスの場所$htpasswd -c .htpasswd ログイン名
 $New password: ←パスワードを入力
 $Re-type new password:←パスワードを再入力
 $Adding password for user ログイン名
 cat .htpasswd でパスワードファイルが作成されていることを確認
 古いパスワードは削除される。
 同じブラウザでログインした場合、このフォルダへの再アクセスに際しては、
 パスワードは要求しない。パスワードを変更すると要求する。

(200219)