忍者ブログ

カウンター

プロモーション

カレンダー

02 2024/03 04
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

AntinomyMy の実験室

   私のWEBアプリ実験室です!

ブログ内検索

楽天でお買い物

twitter

最新トラックバック

最新コメント

忍者アナライズ

ウェザーニュース

バーコード

本を買う

アクセス解析

Google+

[PR]

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


No Image

Apache でcgi-bin を閲覧で「403 Forbidden」になる原因はScriptAlias(Alias)で「/」が無かったから。

Apache の調べ物

勿論メモ書き(きっちり箇条書きとかで纏めてはいないので)
とりあえず、cgi-bin を閲覧 で403になる原因を調べてみた。
Apache 2.2 系と2.4系では、ネットで調べると、
Order ディレクティブ は、 Require ディレクティブ に変更になったので
Order とかAllow とか使わずに、Require を使う事は分かった。
 
だけどデフォルトで然程触ったつもりもないし、
htdocs のディレクトリの設置とも変わりがない権限な気がした。
なのでとりあえず、異常じゃないと思えたので、
error ログを見てみた。
error ログで
[Sat Nov 21 15:04:12.193888 2015] [authz_core:error] [pid 23584:tid 952] [client ::1:51703] AH01630: client denied by server configuration: C:/Apache/cgi-binperl_test.cgi
[Sat Nov 21 15:04:13.222947 2015] [authz_core:error] [pid 23584:tid 952] [client ::1:51703] AH01630: client denied by server configuration: C:/Apache/cgi-binperl_test.cgi
[Sat Nov 21 15:04:13.872984 2015] [authz_core:error] [pid 23584:tid 952] [client ::1:51703] AH01630: client denied by server configuration: C:/Apache/cgi-binperl_test.cgi
[Sat Nov 21 15:04:14.056995 2015] [authz_core:error] [pid 23584:tid 952] [client ::1:51703] AH01630: client denied by server configuration: C:/Apache/cgi-binperl_test.cgi
[Sat Nov 21 15:04:14.233005 2015] [authz_core:error] [pid 23584:tid 952] [client ::1:51703] AH01630: client denied by server configuration: C:/Apache/cgi-binperl_test.cgi
[Sat Nov 21 15:04:14.403015 2015] [authz_core:error] [pid 23584:tid 952] [client ::1:51703] AH01630: client denied by server configuration: C:/Apache/cgi-binperl_test.cgi
[Sat Nov 21 15:04:14.559024 2015] [authz_core:error] [pid 23584:tid 952] [client ::1:51703] AH01630: client denied by server configuration: C:/Apache/cgi-binperl_test.cgi
みたいなのが、起動しようと思うと必ず出てきたので、疑問に思いました。
初めはこれを見て、何処にもcgi-binperl_test なんていうのは設定していないのに・・・と
思ってよく見たら、何か繋がっていそうだったので気がついて、
これは・・・ディレクトリの指定まちがってる?!って思ったので、
ディレクトリを設定している場所(ScriptAlias もしくはAlias)を見たのでした。
とりあえず、私の場合のミスは、
cgi-binperl_test
は、
cgi-bin/perl_test.cgi
本当で
perl_test.cgi を閲覧しようとしているのにパスの指定が悪くて、
こうなんだろうと思えました。 
 
 
 
そこで、cgi-bin のディレクトリを設定している部分を調べてみた。 
 
 私の場合は、なにやらいじっているので、367行前後にあるが
    #ScriptAlias /cgi-bin/ "${SRVROOT}/cgi-bin/"
これを編集して
    ScriptAlias /cgi-bin/ "${CGI-BINROOT}"
つまり強制的にhtdocs(私の環境の場合)に乗せてる感じにしてる記述している訳であるので、
別名のエイリアスなんだろうなって、そのままなんだけど、その理解であってると思う。
 
少し余談だが、 
よく分からないので、まず自分のパスを眺めなおした。
私の場合は、
Apache / cgi-bin
            / htdocs
            / apache2.2.xx
            / apache2.4.xx-x86
            / apache2.4.xx-x64
 
といった並びになっている
 
Apache2.4.xx~~~ は、本来、サーバールートとして設定し、
つまりApache 本体になる。
 
これは設定したとしても、cgi-bin とhtdocs の場所は変えられるのだ。
 
Apache のバージョンとコンパイルが32bit か64bit かを色々変えられる様に設定しているので、
共通であるコンテンツとcgi-bin は、極力上部ディレクトリに退避したいのでこんな構成にしている。
では、余談気味でもあるが、一応説明を終えて、話を戻す。
細かな何度も使う固有の設定はDefine で指定している。
 
2.4.16の64bit の一例))
Define SRVROOT "C:\Apache\httpd-2.4.16-x64-vc11"
ServerRoot "${SRVROOT}"
 
Define CGI-BINROOT "C:\Apache\cgi-bin"
Define DOCUMENTROOT "C:\Apache\htdocs"
 
となっている。
 
上記な様に設定をしていたのだが、これを
前途のお手本となる
   #ScriptAlias /cgi-bin/ "${SRVROOT}/cgi-bin/"
と比べた。
 
まず、
<Directory パス>のDrirecty ディレクティの場合
 
DocumentRoot "${DOCUMENTROOT}"
と書いた上で、
 
<Directory "${DOCUMENTROOT}">
と書いても
<Directory "${DOCUMENTROOT}/">
と書いても換わらない
(余談だけど、なぜかWindows で
<Directory "${DOCUMENTROOT}\">
つまり、ディレクトリのマークを\ だと動かない)
つまりディレクトリであると自動で判断してくれている
でも、ScriptAlias や、Alias は、違う!
完全にしっかり最後をディレクトリであると
/ か\ で閉じなければならない。
試してないが、多分ディレクトリだけでなく、
単体のファイル1つを別名として使えるのかもしれない。
なので、私の場合は
<Directory パス> で使う予定でdefine していたので
Define CGI-BINROOT "C:\Apache\cgi-bin"
となり、
これをそのままScriptAlias で
    ScriptAlias /cgi-bin/ "${CGI-BINROOT}"
としていたので、最後を閉じていなかったのでこれが原因だった!!!!
つまり、正解は
    ScriptAlias /cgi-bin/ "${CGI-BINROOT}"
ではなく、
    ScriptAlias /cgi-bin/ "${CGI-BINROOT}/"
である。
また余談だが、<Directry パス>のディレクティブも
ScriptAlias も、ディレクトリの指定に \ が使えない\ が使える。
前途の通り、Directry ディレクティブは端折れるが、ScriptAlias やAliasは端折れない。
バグの元なので統一して欲しい、ややこしい・・・・・w
こんな単純なミスで必死に時間費やして、頭回して、変な疲労があるから、
案外モチベは下がるから、余計に時間はかかる。
Apache の小さな躓きは、毎回時間がかかって辛い^^;
Apache の設定って1度動けば、毎回触るところじゃないから、
まいったなー!と思いながら、それでもアレコレ触っちゃってたりするんです。
-------------------
余談ですが、
-------------------
ScriptAlias でなく、Alias を選ぶと、
スクリプトの設定以外を多少省けるが、
ScriptAlias の設定をすると、スクリプト以外のファイルを閲覧するならば
スクリプト以外のファイルタイプをDirectry ディレクティブの中に
書かなければいけない。
例えば、html を閲覧したければ、
初めからAlias ディレクティブでcgi-bin を公開する方法もあるが、
ある意味丸見えなので、極力避けるべきなんだろうと思う。
むしろ極力避けたいので、ScriptAlias という、ほぼ目的としては
cgi 用のディレクティブがあるのだと思う。
例 ScriptAlias の場合)
Define CGI-BINROOT "C:\Apache\cgi-bin"
ScriptAlias /cgi-bin/ "${CGI-BINROOT}/"
と設定し、
http://localhost/cgi-bin/_index.html
を閲覧しようとすると
500 Internal Server Error
となる。
スクリプトだけ許可される設定なので、
html などは見られない、設定が成されていないので。
なので、
<Directory "${CGI-BINROOT}">
AddHandler text/html .html
~~略~~
とAddHandler をつけなければ表示されない
どっちが便利なのかとか分からないが
セキュリティーなどどがえしして、簡易設定か
もしくは、全部がっちり手動で設定をするならば
    ScriptAlias /cgi-bin/ "${CGI-BINROOT}/"
でなく
    Alias /cgi-bin/ "${CGI-BINROOT}/"
でもいいかもしれない。
デバッグのときだけ、Alias 、実際の運営はScriptAlias とか使い分けるのも
良いかもしれないが、そもそもcgi-bin にテストの目的以外で
html のファイルや、それらがリンクする画像や、ファイルを置く意味は薄いかもしれない。
やっぱ、基本、cgi-bin は、個人的にScriptArias にしておこうかなと思っているのでした。
最後に・・・・余談だらけじゃないか!www
そしてApache を毎回何かを直そうとするとこんな感じになる。
いったりきたり、えらーログとアクセスログを眺めたり@x@
実際のパスの構成とかまで考えて
しかもバージョンによって2.2から2.4とかは閲覧できる権限設定がちがったりするし、
ネットでも探したり。
人が作った環境であると、そもそもPerl がうまく動いていない場合もあるので、
本当にcgi-bin が見える以前の問題もある。
まぁ・・・・一応解決できたからよかったと、忘れない為にメモしました。
お粗末<_ _>

拍手[0回]

PR

No Image

qualified domain name(FQDN:完全修飾ドメイン名)のエラー

Apache の調べ物

 なにやら?!毎回Apache のエラーに出ているメッセージが気になる。

httpd.exe: Could not reliably determine the server's fully qualified domain name,
using xxx.xxx.xxx.xxx for ServerName

これが出るので調べてみた。

なんだかこれは「確実なサーバの完全修飾ドメイン名を決定することができなかった。」らしい

 つまりドメインネームサーバー(DNS)を設定しているのなら、そこから自身の名前を照会して
解決する様だが、DNSもないし、単純に名前が解決していない様だ。

私の場合はApache のWebサーバーのドメイン名をlocalhost としているが、
それでもこのエラーは出るらしい。

まぁなんだか良くわからない部分もあるが、とりあえず確実に名前を解決してあげる方法が
ある様なので設定してみたいと思う。

なぜかこれはhttpd ファイル(Apache の設定ファイル)では無い。
Apache が適当に回避してくれれば楽なのだが、とても忠実にOSから見えるドメインに対しての
設定をしないといけない様だ。

OS(私はWindows XP)でそのドメインの設定のファイル(通称:ホスト名解決ファイル と言うらしい)は、
%Systemroot%\System32\Drivers\Etc にある。

これはWindows によって場所が違うらしい
-------------------------------------------------------------------------------------------------
   Windows NT                    %Systemroot%\System32\Drivers\Etc
   Windows 95                    <ドライブ>\<Windows フォルダ>
   Windows for Workgroups        <ドライブ>\<Windows フォルダ>
   Windows 3.1                   <ドライブ>\<Windows フォルダ>
   MS-Client 3.0                 <起動ボリューム>\Net
   Lan Manager 2.2c クライアント  <起動ボリューム>\Net
-------------------------------------------------------------------------------------------------

でそのフォルダにある、「hosts」と言うのが今回変更しようとしているホスト名解決の順序が
記載されているファイルである。

これに、
127.0.0.1        localhost.localdomain localhost
とあるハズだが、これの下に一行自身のIPアドレスと、Apache の設定ファイルで
指定したドメインの名前を入れて保存すれば完了である。

127.0.0.1        localhost.localdomain localhost
xxx.xxx.xxx.xxx       ????.???

xxx.xxx.xxx.xxx=PCのIPアドレス
????.???=Apache で付けたドメインの名前


追伸:やはり私の設定ではドメインの名前をlocalhost としてしまっているので
xxx.xxx.xxx.xxx にはApache で指定したアドレスのlocalhost は使えない様だ。


追伸の追伸: でも何かこの方法のみでは解決できなくて、同じApache Service のえらーが
イベント ビューア で残ってしまう。

 やはり思ったのだが、普通はWeb上でDNSが紹介してくれる物を
擬似的にローカルに構築したWebサーバーなので、DNS関係の設定が出来るルーターがあれば
そのルーターに擬似的と言うか仮想的にそのドメインの名前をIPアドレスで返す設定を
組み込んだ方が実験の意味では実際のWeb上に近しい模擬テストになり正解!
なのだと思う。

 でもルーターの設定をいじりたく無いが、そのPCでのみApache でエラーを出さない用に
したいなら、route コマンド できっと経由ルートを作り、自身のPCに指定したら
多分だがエラー は出なくなると思う。

参考の route コマンド の説明URL
route - ルーティングテーブルの表示/設定を行う(@ITより)

route コマンドの使用方法 - テクニカルサポート(Cisco Systems より)


一応メモであるっ!

拍手[1回]


久しぶりにApache を入れ直す!の巻きorz

久しぶりにApache を入れ直す!の巻きorz

Apache の調べ物


概要


 前にPHP のインストールでApache のインストールで迷ったと説明したが
迷った場所の説明だけでそれ以上なにも記述してないなかったので、
結局自分自身も見直しが効かなかったorzw

そんな訳でマイペースすぎる役立たずブログ(個人のメモ帳もどきw)だが、
今回もそんなペースで何かメモっておこう!!!

前回このブログで


 前にPHPのインストールでApache をWindows にインストールしたときに、
Apache のインストーラーを使わなかったのではなくて、
PHP のインストーラーを使わなかったのだが、これも自身の中では
Apache のインストーラーなのか?と誤解する様な内容だったorz(ゴメン)

 それなので結局Apache はどんな形態で配布されているかわからない
ブログだったw(やっぱりゴメンw)

 アパッチの公式サイトで見てみると2010/03/27 現在でWindows の
物はmsi 形式のインストーラーのみの様でした。

 まぁ誤解はさておき、このインストーラーを用いると、
Webサーバーをサービスに登録してくれたり、Windows の通知領域に
Apache サービスの開始や停止、再起動が出来る物もインストールされるが、
これを毎回手動でする事を考えたら、インストーラーを使おうと言う気になるだろう、
しかし本来は何をしているか設定を把握する為、不都合が生じたときに
メンテナンスが出来る様に後々全部知りたい所ではあります・・・・w



今回参考にしたサイト


 今回と言うか前回もこの辺りのサイトを参考に行ったのだと思う。

2php : Apacheのインストール(Windows)

Apache 1.3.33 > インストール [サーバ環境のWindowsへのインストールと設定]~コンテンツ

 基本同じ様な事を言っているが、ローカルサーバーとしてのApache がインストールされているPCの
名前、つまりドメイン名の名前の付け方が違う。

<Server Information画像>
Server Information 


Network Domain (e.g. somenet.com) と Server Name (e.g. www.somenet.com)
をどう扱うかが違った。

具体的にはサイトによって、ドメインを somenet.com とするか、
localhost 又は、127.0.0.1 にするかの違いがある。

 どちらも簡単にしか述べていないが、何か気持ちが悪い物があったので、
実験やらなんやらしてみた。

まず、www.somenet.com が存在するかどうかやってみた・・・・
なにやら得体のしれないサイトに飛んだあと、また他の得体の知れないサイトに飛ばされた。

なんだこりゃ?と思い、ドメインを管理している所を調べると、
ultsearch.com という所が出てきた、もちろんそのアドレスも入れてみたが、
やっぱりこれはローカルで使えたとしても、Web上では使えない名前であるのは
間違えなかった。

 私的にはsomenet.com はローカルでしか使えない、使わないとしても
なんだかイヤだった。

 そこでやはり、localhost 又は、127.0.0.1 にするかなぁ と思い、これも一応調べてみた。

ローカル・ループバック・アドレス(127.0.0.1)とは? - @IT
例によって他サイトですが上記サイトによれば、
- - - - -
ローカル・ループバック・アドレスとは、自分自身を表す特別なIPアドレスの1つであり、TCP/IPが有効なコンピュータでは常に利用可能なIPアドレスである。一般的には「127.0.0.1」というIPアドレス(IPv4の場合)が利用されるが、実際にはIPアドレスの最上位のバイト(最上位の8bit)の内容が「127」でありさえすればよいので、「127.0.0.1~127.255.255.254」の範囲内ならばどのIPアドレスでも利用できる(127.0.0.0と127.255.255.255の2つはブロードキャスト・アドレスのため除外される)。
- - - - -
とある。

 この話では、一応127.0.0.1~127.255.255.254 なら使用できるとあるが、
Apache をインストールしてから試すと、127.0.0.2 とか出来ない、
127.0.0.1 しか通らない。

 ここで昔何かDOSコマンドでルーティングテーブル を表示するコマンドを思い出した、
なんだかIP に振り分けられた情報が載っている謎の一覧表みたいな物です。

 コマンドも忘れていたので色々調べていると、route コマンド(他サイト説明) である事を思い出しました。
route コマンド の実行結果(一部)
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0    xxx.xxx.xxx.o   xxx.xxx.xxx.?       10
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
    xxx.xxx.xxx.0    255.255.255.0    xxx.xxx.xxx.?   xxx.xxx.xxx.?       10
    xxx.xxx.xxx.?  255.255.255.255        127.0.0.1       127.0.0.1       10
  xxx.xxx.xxx.255  255.255.255.255    xxx.xxx.xxx.?   xxx.xxx.xxx.?       10
        ---.0.0.0        ///.0.0.0    xxx.xxx.xxx.?   xxx.xxx.xxx.?       10
  255.255.255.255  255.255.255.255    xxx.xxx.xxx.?   xxx.xxx.xxx.?       1
Default Gateway:     xxx.xxx.xxx.o
===========================================================================


へー
いい加減な話だが、ルーティングテーブルに127.0.0.1 しか自身として登録されていないので、
127.0.0.1~127.255.255.254 を自身として用いる為に使用できるルールで使われているとしても
実際はWindows(ここではXPでした)では、デフォルトで1つしかルーティングテーブルに
登録されていない事が判った。

まぁなので、ルーティングテーブルを用いて変更とかするのならばlocalhost の名前の方が良い気がした。
しかし今度はじゃぁ、localhost って呼び方の設定は何処にあるのか?

これはApache で設定しなくとも、アドレスとしてlocalhost を用いたら、自身の事を指し示すはず。
なのでこれも他に自身の事をlocalhost ではなく、別の名前にしてしまう設定が
何処かにあるのだろうけど、あえてlocalhost まで自身で変えて使用しないだろうと思えたので、
loclalhost の名前を使う事にした。

余談ですが自身のローカルネットワークのアドレスでも勿論見れました。
<ローカルアドレスのステータス>
LocalAreaStatus 

拍手[0回]


  • Home
[PR]