FrontPage

  • 全面的に書きかけ…

名前ベースのバーチャルホストの設定

注:SSL では名前ベースのバーチャルホストは根本的に設定不可。 (SSL の制約。接続時ではどの証明書を渡すか区別できない。)

httpd.conf で、名前ベースのバーチャルホストを有効にする。

NameVirtualHost *:80
  • ログをバーチャルホストごとに分離する。
  • suEXEC で、バーチャルホストごとに CGI の実行ユーザーを切り替える。
<VirtualHost *:80>
    ServerName www.example.com
    ServerAdmin webmaster@example.com
    ErrorLog /var/log/example.com/httpd-error.log
    CustomLog /var/log/example.com/httpd-access.log combined
    DocumentRoot /usr/home/example/www/data
    Alias /cgi-bin/ "/usr/home/example/www/cgi-bin/"
    SuexecUserGroup example example
<Directory "/usr/home/example/www/data">
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>
<Directory "/usr/home/example/www/cgi-bin/">
    AllowOverride All
    Options +ExecCGI
    Order allow,deny
    Allow from all
</Directory>
</VirtualHost>

ログのローテート

FreeBSD の場合

newsyslog を使う。

/etc/newsyslog.conf に以下を追加。

/var/log/example.com/httpd-access.log  644 6 * $M1D0 B /var/run/httpd.pid 30
/var/log/example.com/httpd-error.log   644 6 * $M1D0 B /var/run/httpd.pid 30

ここでの設定

  • パーミッション 644 (rw-r--r--)
  • 最大6個
  • サイズ上限なし
  • 月1回、1日に切り替え。
  • 圧縮なし(ログ解析のため)
  • ログ切り替え時にプロセスに kill -30 を行う。

詳細は newsyslog(5) で。

配置方法についての考察

Apache では、ファイル配置に

  • 直接ディレクトリに配置する
  • シンボリックリンクで配置する
  • Alias (ScriptAlias) により配置する

という方法が使える。

直接配置シンボリックリンクAlias
直感性
ミラーリング
多重配置
分割管理
追加/削除の容易さ
  • Alias を使うと、サーバーのディレクトリ構成に関係なくファイルを配置することができる。 ただし、2つのディレクトリを1つに見せかけることはできない。
  • アイコンなど、共通で使うようなファイルを1つのディレクトリに配置して、シンボリックリンク、Alias で参照させるとよい。(多重配置)
Alias /foo/icons /usr/local/share/icons
Alias /bar/icons /usr/local/share/icons
  • Alias を使うと、管理者単位でディレクトリを作るといったことができる。サーバー上で、自分の担当分のみを参照、更新できる。
Alias /foo /home/hoge/web
Alias /bar /home/gero/web
  • Alias の多用は全体の見通しが悪くなりやすい。
  • Alias、シンボリックリンクで共通にしようとしても、パーミッションの問題を抱えているので単純に共通にできない場合がある。

mod_access の考察

言葉での説明がややこしいので、論理表にする。

以下の設定の場合

Order X
Allow from a
Deny from d

以下のような表になる。

関係 \ XDeny,AllowAllow,Deny
aAllowAllowこれは当然。
dDenyDenyこれは当然。
a && dAllowDeny要するに後勝ち。
a && !dAllowAllowa と同じ。
!a && dDenyDenyd と同じ。
!a && !dAllowDenyいわゆるマッチせず(デフォルト)のとき。

mod_perl/mod_php*/mod_ruby

  • スクリプトのインタプリタを Apache 内で動かす。
    • CGI と違い、いちいちプロセスを作らない。
    • コンパイルしてキャッシュすることで、解釈時間を省略できる。
    • スクリプトのライブラリをロード済みにして、ライブラリのロード時間を省略できる。
    • CGI よりはるかに高速になる。
  • Apache と同じユーザー権限でスクリプトが実行されてしまう点に注意。
    • other (または group)に読み書き権限を与えないとファイルの読み書きができない。
    • 同一サーバー上の別ユーザーに読み書きされてしまう可能性がある。
    • 不特定多数向けのサーバーには向かない。 :(
  • mod_php に限っては、「セーフモード」というものがある。
    • スクリプトの UID とディレクトリの UID を比較するというもの。
    • PHP6 では削除予定。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-09-21 (木) 17:16:26 (1447d)