httpd.conf,htaccess
cgiを作る際に簡単なミスから偶然にも色々apacheについていじったのでメモ
一般知識としていずれ仕入れておかなければならないだろうし一応軽く…
設定をhttpd.confや.htaccessに記録する
違いは後述の有効範囲の話で
httpd.confではまた別に./extraのconfファイルを読み込む
取りあえずちょっと気になったけど場所分からないならば
find ディレクトリ -name httpd.conf
とかして探してみたり
設定知識
軽くhttpd.confなどを見たらすぐ探せるもの
ServerRoot "パス" ルートディレクトリの指定 Listen (IPアドレス:)ポート番号 リクエストを受け付けるポート番号の指定 LoadModule モジュール名 モジュールへのパス DSO(DynamicSharedObject)を用いたモジュールの組み込み ServerAdmin 連絡先アドレスなど エラーが生じた際などの連絡先.他のサーバー上のアドレスを用いるべき ServerName ホスト名(:ポート番号) IPアドレス,もしくはドメイン Include パス extraなどに含まれる補助設定ファイルの読み込み
有効範囲
スコープのようなものと考えたら楽
と思ったけど,むしろスーパークラスとサブクラスのような.
httpd.confとhtaccess
apacheサーバーは最初にhttpd.confを読み込み設定を確認
そして全てのディレクトリでhtaccessがあるかを確認
存在すればそれまでの設定に対しhtaccessの設定を追加,重なっていれば上書き
親クラスの関数などを受け継ぎ,名前が重なればoverride,なければ追加.といった感じ
httpd.confは基本的に一つ,htaccessは全てのディレクトリに"あっても良い".
設定の有効範囲
またhttpd.confなどの中身に戻ります
<Directry dir-path> ~ </Directry> ディレクトリを指定 <DirectryMatch regex> ~ </DirectryMatch> 正規表現でディレクトリを <Files filename> ~ </Files> ファイルを指定 <FilesMatch regex> ~ </FilesMatch> 正規表現でファイルを <Location URL> ~ </Location> アドレスで指定
指定されたディレクトリやファイルに対して,中に書かれた事の対象とします
制限
ではでは,範囲指定などを行った上で何をするのか
良く行われる事の一つがアクセス制限など
アクセス制限
最も簡単なものにOrder, Allow, Denyの3つを用いたものがあります
Order deny,allow 先にDenyを評価した上で,Allowを上書き.つまりAllow優先. 逆に書く事も出来ます(Order allow,deny) Deny from path pathへのアクセスを拒否します.pathへはallやIPとかも指定出来ます Allow from path pathへのアクセスを許可します.pathへはallやIPとかも指定出来ます
ユーザー制限
また別にパスワードを用いて制限を行ったりも出来ます
AuthType Basic AuthName "文章" AuthUserFile "user-file-path" Require entity-name [entity-name] ...
こんな感じですね
認証には2種類あり,Basicが基本認証,Digestはダイジェスト認証です
Requireでは許可するユーザ名を記述します
Basic認証でのuser-fileというのは以下のコマンドで新規作成できます
htpasswd -c user-file user-name
ユーザー追加時にはオプション抜いてそのまま打つだけ
削除は-Dです
Digest認証ではhtdigestというコマンドがあります
複数の制限
上記からホスト制限とユーザ制限を行う事が出来ます
両方のアクセスが必要,もしくは片方認証でアクセスが可能などといった設定はどうするのか
- Satisfy All|any
Allをつければ全ての認証が必要です
Anyをつければ例えばあるIPからはパスワードなども必要無しに利用が出来るなど
cgi
エイリアスの作成
cgiなどのスクリプト直接置くのは形式上まずいのでエイリアスを作って他の場所におくとします
そのエイリアスもここに記載します
ScriptAlias URL-path file-path|directory-path 普通に作成 ScriptAliasMatch regex file-path|directory-path 正規表現マッチも行えます
特定の場所を指定する
ここでcgiを使いたい.などという場所を指定した後に
Options +ExecCGI AddHandler cgi-script .pl .cgi
てな感じで指定出来ます
これでcgiの実行権限とかさえちゃんとしたら動かないなんていうことはなくなるはず.
知識と技術が足らなさ過ぎてつらい…
取りあえず,後は英語を読むかcore - Apache HTTP サーバを読むか