私は6台のマシンを持っています。3台はRHEL3(Taroon Update 9)を実行しており、他の3台はRHEL 5.6(Tikanga)を実行しています。
それらはすべて、を含むNFSボリュームを共有します
- Apache2.2.4のインストール
- そのApacheの構成ファイル
- そのApacheによって提供されるPHPスクリプトおよびその他のコンテンツ
各マシンで、その共有Apacheは、他のマシンで実行されているApacheインスタンスと区別するために、「-D$hostname」オプションで開始されます。(ここで、$ hostnameはマシンのホスト名です)。
これらの6台のマシンの前にロードバランサー(別のApache)があり、それらの間で要求のバランスを取ります。
問題:
これらのルールを含むディレクトリに.htaccessファイルを配置しました。
order deny,allow
deny from all
allow from my.very.own.ip
(間で構成ファイルで同じルールを試しましたが、同じ結果になりました)
my.very.own.ip以外のIPからの要求は、6つのApacheすべてによって拒否されます。
最初の3つのApache(RHEL 3で実行)にヒットするmy.very.own.ipからの要求は受け入れられますが、これは正常です。
最後の3つのApache(RHEL 5.6で実行)にヒットしたmy.very.own.ipからの要求は拒否されます(HTTP 403、サーバー構成によってクライアントが拒否されました)。これは正常ではありません。
すべてのApacheサーバー(およびその分岐した子)でstraceを実行しましたが、次のようになります。
--my.very.own.ipからのリクエストによる「良い」Apache
19553 read(7, "GET /my/website"..., 8000) = 1761
19553 gettimeofday({1343736878, 168708}, NULL) = 0
19553 gettimeofday({1343736878, 168787}, NULL) = 0
19553 gettimeofday({1343736878, 168835}, NULL) = 0
19553 stat64("/shark/apps/apache1/conf/www/maps/stationlist.txt", {st_mode=S_IFREG|0644, st_size=5557, ...}) = 0
19553 stat64("/shark/apps/apache1/conf/somedir/stationkidsurls.txt", {st_mode=S_IFREG|0644, st_size=6200, ...}) = 0
19553 stat64("/shark/www_docs/my/website/php/script.php", {st_mode=S_IFREG|0644, st_size=2449, ...}) = 0
19553 open("/shark/www_docs/.htaccess", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
19553 open("/shark/www_docs/my/.htaccess", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
19553 open("/shark/www_docs/my/website/.htaccess", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
19553 open("/shark/www_docs/my/website/php/.htaccess", O_RDONLY|O_LARGEFILE) = 10
19553 fstat64(10, {st_mode=S_IFREG|0644, st_size=51, ...}) = 0
19553 read(10, " order deny,allow\n deny f"..., 4096) = 51
19553 read(10, "", 4096) = 0
19553 close(10) = 0
19553 open("/shark/www_docs/my/website/php/script.php/.htaccess", O_RDONLY|O_LARGEFILE) = -1 ENOTDIR (Not a directory)
19553 getpid() = 19553
19553 setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={60, 0}}, NULL) = 0
19553 rt_sigaction(SIGPROF, {0x1280014, [PROF], SA_RESTORER|SA_RESTART, 0x3c10d8}, {0x1280014, [PROF], SA_RESTORER|SA_RESTART, 0x3c10d8}, 8) = 0
19553 rt_sigprocmask(SIG_UNBLOCK, [PROF], NULL, 8) = 0
19553 getcwd("/", 4095) = 2
19553 chdir("/shark/www_docs/my/website/php") = 0
--my.very.own.ipからのリクエストによる「悪い」Apache
1723 read(9, "GET /my/website"..., 8000) = 1761
1723 gettimeofday({1343736621, 548677}, NULL) = 0
1723 gettimeofday({1343736621, 548735}, NULL) = 0
1723 gettimeofday({1343736621, 548771}, NULL) = 0
1723 stat64("/shark/apps/apache1/conf/www/maps/stationlist.txt", {st_mode=S_IFREG|0644, st_size=5557, ...}) = 0
1723 stat64("/shark/apps/apache1/conf/somedir/stationkidsurls.txt", {st_mode=S_IFREG|0644, st_size=6200, ...}) = 0
1723 stat64("/shark/www_docs/my/website/php/script.php", {st_mode=S_IFREG|0644, st_size=2449, ...}) = 0
1723 open("/shark/www_docs/.htaccess", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
1723 open("/shark/www_docs/my/.htaccess", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
1723 open("/shark/www_docs/my/website/.htaccess", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
1723 open("/shark/www_docs/my/website/php/.htaccess", O_RDONLY|O_LARGEFILE) = 12
1723 fstat64(12, {st_mode=S_IFREG|0644, st_size=51, ...}) = 0
1723 read(12, " order deny,allow\n deny f"..., 4096) = 51
1723 read(12, "", 4096) = 0
1723 close(12) = 0
1723 open("/shark/www_docs/my/website/php/script.php/.htaccess", O_RDONLY|O_LARGEFILE) = -1 ENOTDIR (Not a directory)
1723 gettimeofday({1343736621, 550606}, NULL) = 0
1723 write(10, "[Tue Jul 31 08:10:21 2012] [erro"..., 159) = 159
729 <... read resumed> "[Tue Jul 31 08:10:21 2012] [erro"..., 65536) = 159
729 gettimeofday({1343736621, 550743}, NULL) = 0
729 gettimeofday({1343736621, 550786}, NULL) = 0
どう思いますか?
RHELバージョンのこれらのマシン間の唯一の違い。これは、NFS共有(/ shark)が異なる方法でマウントされていることを意味する場合もあります...
.htaccessを変更し、rewriteでallow、denyルールを変更しました(my.very.own.ipからのリクエストは別の場所にリダイレクトされます)。しかし...私はまだ、同じルールが異なるマシン(同じApache、同じ構成ファイル)で異なる動作をするのはなぜか疑問に思っています。