メイン

2007年03月09日

.htaccess によるアクセス制限

Order deny,allow
Deny from ALL
Allow from 123.45.67.89
Allow from xx.xx.xx.xx
Allow from yy.yy.yy.yy

.htaccess ファイルを作って
上記のように書けばIPアドレスによるアクセス制限ができます。
httpd.conf の書式と同じ形式になります。

2007年03月03日

Apache logrotate 続

/usr/sbin/logrotate -f ’設定ファイルへのパス’

【設定ファイル例】
/usr/local/apache2/logs/access_log {
rotate 50
daily
postrotate
/usr/bin/kill -HUP `/bin/cat /usr/local/apache2/logs/httpd.pid`
endscript
}

こんなのを cron で設定する場合には
次にApacheの再起動をしておくほうがいいようです。
access_log が生成されていない場合がありました。

2007年02月27日

Apache アクセス制限設定

Apache にアクセス制限をかける場合
httpd.conf 内で allow, deny で設定します。

面倒なので別ファイルにしています。
httpd.conf に別ディレクトリでの設定ファイルを読み込むような設定をします。
レンタルサーバーでよくあるパターン。
Include "/usr/local/apache2/conf.d/*.conf"

設定例
/usr/local/apache2/conf.d/deny.conf

<Directory "拒否したいディレクトリ">
   AllowOverride None
   Order allow,deny
   Allow from All
   Deny from 220.150.117.251
   Deny from 60.35.126.114
   Deny from 220.108.84.93
   Deny from 60.35.122.73
   Deny from 219.167.154.114
</Directory>

apache を再起動すればこれらのIPからはアクセスできなくなります。

2007年02月25日

Apache rewrite 設定

エラーログにこんなのが出た場合
Invalid command 'RewriteEngine', perhaps mis-spelled or defined by a module not included in the server configuration

httpd.confの以下の項目を有効にします
LoadModule rewrite_module modules/mod_rewrite.so

また.htaccessでこんな風に設定してる場合が多いから
DirectoryIndex index.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.html(#.*)?$ index.php?cmd=read&page=$1$2 [L]
RedirectMatch 301 ^([^.]*[^/])$ $0/

httpd.conf に以下のように記述します。
<Directory "公開ディレクトリ">
AllowOverride All
</Directory>

2007年02月24日

AMP on a USB 設定 追記

httpd.conf に追加

LoadModule rewrite_module modules/mod_rewrite.so

<Directory "/pdrive/www">
AllowOverride All
Order allow,deny
Allow from all
</Directory>

AddDefaultCharset ISO-8859-1 をコメントにする

php.ini

記述追加&変更
include_path=".;/pdrive/php-5.0.3/PEAR;/pdrive/php-5.0.3/PEAR/pear"
extension_dir="/pdrive/php-5.0.3/ext"

コメントを外す
;extension=php_mbstring.dll

記述変更
[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;
;mbstring.func_overload = 0

2007年02月12日

AMP on a USB 設定

USBメモリ内に Apache + PHP + MySQL の開発環境を設定することができます。
これで外出先でのデモや開発が容易に行えます。

本家サイトはこちら。
http://www.firepages.com.au/php_usb.htm
   ちなみにこのサイトは数年前にApache + PHP + MySQL を一括でインストールするツールを配布していたサイトでした。 トレードマークのマイケルジャクソンに見覚えがありました。

php_usb というZIPファイルをダウンロードして解凍後、USBメモリにコピーします。
本家サイトどおりにやりました。
ディレクトリ構成はこうなります。

$usb:/
-------------start.bat
-------------pdrive/
------------------------php.ini
------------------------start.php
------------------------apache-2.0.50/
------------------------php-5.0.3/
------------------------mysql/
------------------------www/ *ドキュメントルート
------------------------sess/ *セッションデーターのための空ディレクトリ

私はApache, NySQLはWindowsにインストールしているものをそのままコピーしています。
Apache
C:\Program Files\Apache Group\Apache2以下を USB:\pdrive\apache-2.0.50以下にコピーして
conf ファイルのみ配布されているものに置き換えます。

MySQL
C:\Program Files\MySQL\MySQL Server 5.0以下を USB:\pdrive\mysql以下にコピーしました。

PHP
PHP本家サイトよりphp-5.0.3-Win32.zip をダウンロードして解凍後、USB:\pdrive\php-5.0.3にコピーしました。

これで準備はほぼ完了です。
しかしこのままでは動かなかったのでconfファイルの書き換えが必要でした。
こんな風にしてチェックしてみるといいでしょう。

USB:\pdrive\apache-2.0.50\conf\httpd.conf の56行目
「LoadModule ssl_module modules/mod_ssl.so」をコメントにします。
これはもともとインストールしていたApacheが apache_2.0.51-win32-x86-no_ssl.exe でSSL対応でなかったためと思われます。

またUSB:\pdrive\php.ini も修正していたほうがよさそうです。
「session.save_path = "\\pdrive\\sess"」をコメントに
 *phpMyAdminを使ったときにセッションをこのディレクトリに見に行って失敗していました。
   セッション保存領域は明示的にしないほうがよさそうです。

これが終わったら start.bat をダブルクリックして起動してみましょう。
http://localhost:85/ でブラウザが起動してディレクトリが見えれば成功です。

うまくいかない場合は、start.bat で呼び出されるUSB:\pdrive\start.php 内部をコメントにしたりして試してみてください。
これがUSB内のアプリケーションを制御している大本になっています。

echo "starting MySQL ....\n";
pclose(
popen(
'start pdrive\\mysql\\bin\\mysqld-nt.exe --basedir=/pdrive/mysql --datadir=/pdrive/mysql/data --port=3307 --console --standalone'
,'r' )
);
echo "starting apache....\n";
flush();
pclose(popen('start pdrive\\apache-2.0.50\\bin\\apache.exe','r'));
flush();
sleep(5);
echo 'opening localhost';
exec( 'start http://localhost:85');


2006年08月16日

Apache logrotate

/etc/logrotate.conf で設定するのではなく 好きなときにやるやり方

まず logrotate.d/ にあるようなファイルを作ります こんな感じ
------------------------------------------------------
/usr/local/apache2/logs/access_log {
rotate 50
daily
#monthly
postrotate
/usr/bin/kill -HUP `/bin/cat /usr/local/apache2/logs/httpd.pid`
endscript
}

/usr/local/apache2/logs/error_log {
rotate 50
daily
#monthly
postrotate
/usr/bin/kill -HUP `/bin/cat /usr/local/apache2/logs/httpd.pid`
endscript
}
------------------------------------------------------

/usr/sbin/logrotate -f 上記ファイルへのパス

2006年05月29日

Basic 認証

phpMyAdmin インストール
http://www.phpmyadmin.net/home_page/downloads.php
ここから最新版をダウンロードして
phpMyAdmin-2.8.0.4/libraries/config.default.php を
phpMyAdmin-2.8.0.4/config.inc.php にコピーして内部の変数を環境に合わせればOK

しかし phpMyAdmin-2.8.0.4 を Apache の DoccumentRoot以下にそのまま置くのはまずいでしょう

ですから/usr/local/にアップロード後、Aliasを作成後、Basic認証をかけておきました

httpd.conf に記述
Alias /phpmy/ "/usr/local/phpMyAdmin/"

これで http://ホスト/phpmy/ でアクセスできるようになります。

その後、htpasswd -c /usr/local/apache2/conf/.htpasswd ユーザー名
パスワード入力  でパスワードファイル作成
               *ユーザー名、パスワードは任意
/usr/local/phpMyAdmin/に .htaccess ファイル作成

touch .htaccess
vi .htaccess
【記述内容】
AuthType Basic
AuthUserFile /usr/local/apache2/conf/.htpasswd
AuthGroupFile /dev/null
AuthName "Enter password"
Require valid-user

chmod 666 /usr/local/apache2/conf/.htpasswd
/usr/local/apache2/bin/apachectl restart

これで認証がついたphpMyAdminが使えるはずです