理工系研究者のための Mac OS X, Windows, Linux メモ
 
ホーム >> ソフトウェア >> Apache HTTPサーバのTips
このエントリーをはてなブックマークに追加

Apache HTTPサーバーのTips

  1. .htaccess を使って任意のディレクトリで CGI スクリプトが使えるようにする
  2. SSIが使えるように設定
  3. .htaccess を見えないようにする
  4. Webページに対して特定のホストからのアクセス制限を行う
  5. ウェブページにユーザー認証機能を加えるには
  6. TCP Wrapperを用いて、telnetやftpのアクセス制限を行う

トラブル解決

  1. ブラウザで見た時の文字化けが解消しない時に確認する事項
  2. ファイル .htaccess がブラウザから見えてしまう

.htaccess を使って任意のディレクトリでCGIスクリプトが使えるようにする

作成日:2004.8.7

Apacheの設定ファイル httpd.conf を開き、 AllowOverride の設定をNone からAllに変更しておく。

AllowOverride All

CGIスクリプトが使えるようにするにはCGIスクリプトを置くディレクトリ内の .htaccess に

AddHandler cgi-script .cgi
Options +ExecCGI
と書く。

SSIが使えるように設定

作成日:2004.1.18

httpd.conf を開き、次の行を見つける。

# To use server-parsed HTML files
#
#AddType text/html .shtml
#AddHandler server-parsed .shtml

AddType と AddHandler のコメントアウト#を外す。 そして.shtml ファイルを置くディレクトリの Options に Includes を加える。

<Directory "/Library/WebServer/Documents">
Options Includes
</Directory>

SSIを記入するファイルは拡張子をshtmlにする。

Webページに対して特定のホストからのアクセス制限を行う

作成日:2002.1.18

アクセス制限したいファイルのある階層又は上層にある.htaccessを編集する。 .htaccessのあるディレクトリ配下へのアクセスのに対して、ある特定のドメインからのアクセスを拒否するには次のように記述する。

order allow,deny
allow from all
deny from .hogehoge.com
これで、*.hogehoge.comからのアクセスを拒否できる。 また、特定のファイル(test.html)に対してある特定のドメインからのアクセスを拒否するには、
<Files test.html>
deny from .hogehoge.com
</Files>
のように記述すればよい。

▼参考サイト or 参考文献

TCP Wrapperを用いて、telnetやftpのアクセス制限を行う

MacOSXにはTCP Wrapperがインストールされている。 TCP Wrapperはtelnetやftpによる外部からのアクセスを、IPアドレスで制限する機能を持つ。 TCP Wrapperの機能を実際に行っているプログラムはtcpd。

設定ファイルは、/etc/hosts.allow, /etc/hosts.denyの2つ。 存在しなければ自分で作成する。 まず、外部からのアクセスがあったときには、hosts.allowが存在するかどうかチェックされ、無い場合にはhosts.denyを見る。 hosts.denyも無ければアクセスをすべて許可する。

アクセスを許すホストを記述し、それ以外は拒否する場合には、hosts.allowに次のように記述する。

#-(hosts.allow)-----------------------------
ALL : 192.168.1.100/255.255.255.255 \
192.168.1.102/255.255.255.255
telnetd : 192.168.2.0 /255.255.255.0
ftpd : 192.168.2.101/255.255.255.255 \
192.168.2.102/255.255.255.255
#--------------------------------------------

一行目のALLは、すべてのアクセスを許すホストを書いておく。 複数行に渡るときは前行の最後に \ (バックスラッシュ)を付ける。 次の行 telnetd の所は、telnetによるアクセスを許可するホストを書く。 サブネットマスクを 255.255.255.0 のようにしておけば、192.168.2.*のすべてのホストからのアクセスを許可する。ftpdも同様に記述する。

次に、hosts.denyには、アクセス拒否するホストを記述するが、これはhosts.allowが無い場合にのみ使用される。 したがって、万一の場合のために次のように記述しておくとよい。

#-(hosts.deny)-----------------------------
ALL : ALL
#--------------------------------------------

設定すればすぐに機能するはずだが、もし機能していないならinetdをkill -HUP(再起動)してみる。

% ps -ax | grep inetd
242 ?? Ss 0:00.04 inetd
10053 std R+ 0:00.00 grep inetd
% kill -HUP 242

上記のアドレスの指定方法は下記のような表現が可能。

#-----------------------------------
# IPアドレスで指定
192.168.1.100
# ネットワークで指定
192.168.1.0/255.255.255.0
# ネットワークで指定(その2)
192.168.1.
# ネットワークで指定(例外を表記)
192.168.1. EXCEPT 192.168.1.100
# ドメイン名で指定
.abc.hoge.com
# ドメイン名で指定(例外を表記)
.abc.hoge.com EXCEPT sample.abc.hoge.com
# ホスト名で指定
myhost.abc.hoge.com
#------------------------------------------

ブラウザで見た時の文字化けが解消しない時に確認する事項(AddDefaultCharset)

環境:Fedora Core 1

Mac OS X に入っているApacheでは問題なかったが、Fedora Core 1 にインストールしたApacheの 設定ファイル httpd.conf の中で AddDefaultCharset が指定されていると文字化けが起きる分かった。

この設定を書くと文字コードの設定で最優先となるため、HTMLファイルがここで設定された文字コード以外で書かれていると文字化けする。 httpd.conf の中でAddDefaultCharsetが設定されている場合、Offにするかコメントアウトしておくと良い。

AddDefaultCharset Off

.htaccess を見えないようにする

作成日:2003.8.19

Macで使われている HFS+ フォーマット上では大文字と小文字を区別しない。 このため.htaccess.hTaccess または .Htaccess としてブラウザから閲覧すると中身が見えてしまう。 これを防ぐには、Apacheの設定ファイルhttpd.confを開いて、次のように .ht.[Hh][Tt] に修正する。

<Files ~ "^\.[Hh][Tt]">
Order allow,deny
Deny from all
Satisfy All
</Files>

これで .htaccess が見えなくなる。

▼参考サイト or 参考文献