Apache HTTPD

トップ > チップス > Apache HTTPD
2012-02-13, apache

httpd.confによる設定

設定上書きの許可/禁止

.htaccessによる設定の上書きを許可または禁止する。AllまたはNoneを指定します。

AllowOverride All

public_html下で上書きを許可したい場合、まずデフォルトの設定を書き換える必要があるようです(インストール直後はとても厳しい設定になっています)。またバーチャルホストを設定している場合、以下のようにディレクティブを指定可能です。

<VirtualHost 192.168.0.1>
:
  <Directory />
    Options FollowSymLinks
    AllowOverride All
  </Directory>
</VirtualHost>
 :
AllowOverride All

デフォルトのエンコードを指定

AddDefaultCharset EUC-JP

EUC-JP,WINDOWS-1251,UTF-8,Shift_JIS

IPによるアクセス制限

Order deny,allow
Deny from all
Allow from 172.16.0.0/255.255.255.0 127.0.0.1

MIMEタイプの追加

AddType application/x-java-jnlp-file .jnlp

CGIの実行を許可する

まずAddHandlerを追加し、任意のDirectoryディレクティブ中にOptionsで実行を許可します(Apacheのドキュメントには、Directoryの設定はサブディレクトリにも適用される、と書いてありますが実際には動作しなかったため、ディレクトリを正規表現で記述しています)。

AddHandler cgi-script .cgi
<Directory ~ "/home/toyota/Datas/.*">
  Options ExecCGI

その他(オプション)

Options Indexes FollowSymLinks

Indexes,ディレクトリ一覧の許可
FollowSymLinks,シンボリックリンク追跡の許可
ExecCGI,CGI(PHP)の実行を許可

バーチャルホストを定義

以下のように設定します。

/etc/httpd/conf/httpd.conf
NameVirtualHost 64.239.191.242:80

# デフォルトのホスト
<VirtualHost 64.239.191.242:80>
    ServerName rabbit.lumber-mill.info
</VirtualHost>

# 通常のコンテンツとして利用
<VirtualHost xxx.lumber-mill.info:80>
    DocumentRoot /home/xxx/public_html
    ServerName xxx.lumber-mill.info
</VirtualHost>

# Tomcatへのプロキシとして利用
<VirtualHost yyy.lumber-mill.info:80>
    ServerName yyy.lumber-mill.info
    ProxyPass / http://yyy.lumber-mill.info:8080/
    ProxyPassReverse / http://yyy.lumber-mill.info:8080/
    <Proxy *>
      Order deny,allow
      Allow from all
    </Proxy>
</VirtualHost>

バーチャルホストの設定を確認

バーチャルホストの設定を確認する。

# /usr/sbin/httpd -S

BASIC認証

認証を行いたいLocationに以下の設定を追加します。VirtualHost+Proxy環境下では、Proxyディレクティブ以下に追加することが可能です。

AuthType Basic
AuthName "Protected Area"
AuthUserFile /var/www/protected/.htpasswd
AuthGroupFile /dev/null
Require valid-user
<Proxy http://foo.com:8080/bar/*>
  AuthType Basic
  AuthName "Protected Area"
  AuthUserFile /var/www/protected/.htpasswd
  AuthGroupFile /dev/null
  Require valid-user
</Proxy>

htpasswdコマンドを使ってユーザを作成します。
{{{
# htpasswd -c /var/www/protected/.htpasswd username

直接パスワードを指定することもできます。大量に設定する場合、便利です。

# htpasswd -b -c /var/www/protected/.htpasswd username pass

DIGEST認証

認証を行いたいLocationに以下の設定を追加します。

AuthType Digest
AuthName "Protected Area"
# AuthDigestDomain /protected/
# AuthDigestFile /var/www/protected/.htdigest
AuthUserFile /var/www/protected/.htdigest
Require user username #もしくは、valid-user

※「AuthDigestFile」はApache2.2から使用できなくなったようです。

htdigestコマンドを使ってユーザを作成する。

# htdigest -c /var/www/protected/.htdigest 'Protected Area' username

WebDAVを使う

Location以下にDav Onを書くだけで完了しますが、通常は認証等の設定も状況に応じて行う必要があります。また、日本語ファイルを扱えないなどの問題も当時はありました(mod_encodingのインストールで回避できるそうですが、副作用もあってうまく導入できませんでした)。いずれにせよ、相当古い情報ですので、参考に留めて下さい。

DavLockDB /usr/local/apache2/var/DavLock # Fedoraでは設定済み
<Location /foo>
  Dav On
  AuthType Basic
  AuthName DAV
  AuthUserFile user.passwd
  <LimitExcept GET OPTIONS>
    require user admin
  </LimitExcept>
</Location>

URLの変更を通知する

[301 Moved Permanently]ステータスを返す方法です。

Redirect permanent / http://www.lumber-mill.info/

バーチャルホスト内でプロキシを使用する場合、以下のようにProxyディレクティブの下に記述します。ちなみに下記例では、「410 Gone」を返しています。

<VirtualHost xxx.xxx.xxx.xxx:80>
    ServerName foo.com
    ProxyPass / http://bar.com:8080/
    ProxyPassReverse / http://bar.com:8080/
    <Proxy *>
      Order deny,allow
      Allow from all
      {strong:Redirect gone /abc.html}
    </Proxy>
</VirtualHost>

ログの保存位置を変更する

バーチャルホストを定義している場合など、ログを分割して管理したい場合があります。以下のように指定します。

CustomLog logs/access_log_foo combined

プロキシの適用範囲を限定する

例えば主な処理はtomcatに任せる(ProxyPassで飛ばす)のだけれど、特定のディレクトリだけは別のリソースを使いたい、といった場合ProxyPassのURLに「!」を指定することで適用を解除できます。そうすると下記のようなAlias指定が有効になります。

ProxyPass /foo !
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/

Alias /foo /var/www/html/foo

SSLを使う

SSLモジュールをインストールして再起動するだけ。特に何も設定していません。

# yum -y install mod_ssl
# service httpd restart

インストールが完了すると/etc/httpd/conf/ssl.confというファイルが生成されます。

tomcatのSSLポート(8443)へのプロキシとして利用する場合、以下の設定を行って下さい。

ssl.conf

SSLProxyEngine on

設定ファイルをチェックする

# apachectl configtest

或いは、

# service httpd configtest

ホストレベルのアクセス制御とユーザ認証との相互作用を指定する

ある特定のアドレス(ネットワーク)からのアクセスはそのまま許可し、それ以外にはユーザ認証をかける、といった指定をする場合には「Satisfy」ディレクティブを使い、以下のように記述します。

Require valid-user
Allow from 192.168.1
Satisfy Any

「Satisfy All」とすると規定の動作と同じく、全ての制限を満たさないとアクセスできなくなります(=許可済みホストからのアクセスで、かつ認証に成功した場合)。

参考リンク

${Unknown macro: link:http://httpd.apache.org/docs/2.0/}

この記事は役に立ちましたか?