UJP - 技術情報1

Life is fun and easy!

不正IP報告数

Okan Sensor
 
メイン
ログイン
ブログ カテゴリ一覧

Apacheで何が何でもステータス200

Apacheで何が何でもステータス200


0.改訂履歴

  • 2005.12.11 新規作成

1.はじめに

 このドキュメントでは,Apache 1.3.34を「ただいま混雑しています」等の定型的な文言とステータス200番を返すだけの改造を行う. サービス繁盛時期に,あらかじめ計画したアクセスを超過したものに対しての応答,あるいはブックマークアクセスのコントロールなどを行う. 携帯電話によっては,HTTPのステータスで404を返すとエラーと表示されてしまって,こちらで意図する文言を出せないことがあるのでステータスも変更している.

2.Apacheのソースを改造

  • Apacheのアーカイブを展開する.
  • 今回利用したのは,1.3.34である.
[root@neptune include]# pwd
/home/shinnai/Download/apache_1.3.34/src/include
[root@neptune include]#  
  • ステータスコードはhttpd.hに書かれている.
  • ファイルを次のように変更する
変更前
#define HTTP_BAD_REQUEST                   400
#define HTTP_UNAUTHORIZED                  401
#define HTTP_PAYMENT_REQUIRED              402
#define HTTP_FORBIDDEN                     403
#define HTTP_NOT_FOUND                     404
#define HTTP_METHOD_NOT_ALLOWED            405
#define HTTP_NOT_ACCEPTABLE                406
#define HTTP_PROXY_AUTHENTICATION_REQUIRED 407
#define HTTP_REQUEST_TIME_OUT              408
#define HTTP_CONFLICT                      409
#define HTTP_GONE                          410

〜略〜


#define NOT_ACCEPTABLE      HTTP_NOT_ACCEPTABLE
#define LENGTH_REQUIRED     HTTP_LENGTH_REQUIRED
#define PRECONDITION_FAILED HTTP_PRECONDITION_FAILED
#define SERVER_ERROR        HTTP_INTERNAL_SERVER_ERROR
#define NOT_IMPLEMENTED     HTTP_NOT_IMPLEMENTED
#define BAD_GATEWAY         HTTP_BAD_GATEWAY
#define VARIANT_ALSO_VARIES HTTP_VARIANT_ALSO_VARIES
変更後
#define HTTP_BAD_REQUEST                   400
#define HTTP_UNAUTHORIZED                  401
#define HTTP_PAYMENT_REQUIRED              402
#define HTTP_FORBIDDEN                     403
#define HTTP_NOT_FOUND                     200
#define HTTP_METHOD_NOT_ALLOWED            405
#define HTTP_NOT_ACCEPTABLE                406
#define HTTP_PROXY_AUTHENTICATION_REQUIRED 407
#define HTTP_REQUEST_TIME_OUT              408
#define HTTP_CONFLICT                      409
#define HTTP_GONE                          410

〜略〜


#define NOT_ACCEPTABLE      HTTP_NOT_ACCEPTABLE
#define LENGTH_REQUIRED     HTTP_LENGTH_REQUIRED
#define PRECONDITION_FAILED HTTP_PRECONDITION_FAILED
#define SERVER_ERROR        HTTP_OK
#define NOT_IMPLEMENTED     HTTP_OK
#define BAD_GATEWAY         HTTP_BAD_GATEWAY
#define VARIANT_ALSO_VARIES HTTP_VARIANT_ALSO_VARIES
  • この修正で,404,500,501エラーは,すべて200番でステータスが返却される.
  • 修正後,make clean,make installを行う.

3.メッセージページを作成する

  • デフォルトで表示されるページを作成する.
[root@neptune htdocs]# pwd
/usr/local/apache/htdocs
[root@neptune htdocs]# cat index.html
<html>
<title>ただいま大変混雑しております</title>
申し訳ございませんが、ただいまシステムが大変混雑しております。 お手数ですが、

もう少したってから、再度アクセスをお願いします。

</html>
[root@neptune htdocs]# 
  • httpd.confファイルで,サーバステータスが200番の時に表示させるページを設定する.
#ErrorDocument 500 "The server made a boo boo.
#  n.b.  the single leading (") marks it as text, it does not get output
#
#    2) local redirects
#ErrorDocument 404 /missing.html
ErrorDocument 200 /index.html

#  to redirect to local URL /missing.html
  • エラー404,500,501エラーはすべて200番で返却されるので,どのようなページが呼び出されてもこのページが呼び出されることになる.

4.テストを行う

  • curlコマンドを使って,存在しないファイルを呼び出してみる.
  • 通常であれば,404エラーになる.
  • curl -Iで,ヘッダステータスだけ表示させてみる.
[root@neptune include]# curl -I http://localhost/aa.html
HTTP/1.1 200 OK
Date: Sun, 11 Dec 2005 04:57:44 GMT
Server: Apache/1.3.34 (Unix)
Last-Modified: Sun, 11 Dec 2005 04:40:22 GMT
ETag: "1cea34b-e9-5963adb6;4649adb6"
Accept-Ranges: bytes
Content-Length: 217
Content-Type: text/html

[root@neptune include]#  
  • ステータスが200と返却されていることが確認できた.
  • 普通のページを呼び出してみる.
[root@neptune htdocs]# curl http://localhost/aa.html
<html>
<title>ただいま大変混雑しております</title>
申し訳ございませんが、ただいまシステムが大変混雑しております。 お手数ですが、 
もう少したってから、再度アクセスをお願いします。 
</html>

[root@neptune htdocs]#  
  • httpd.confで設定した200番のステータス時のデフォルト文言が表示される.
  • 次に501番のエラーを発生させてみる.
[root@neptune htdocs]# telnet 127.0.0.1 80
Trying 127.0.0.1...
Connected to neptune (127.0.0.1).
Escape character is '^]'.
eeeeeee
<html>
<title>ただいま大変混雑しております</title>
申し訳ございませんが、ただいまシステムが大変混雑しております。 お手数ですが、

もう少したってから、再度アクセスをお願いします。

</html>

Connection closed by foreign host.
[root@neptune htdocs]#  
  • アクセスログを確認してみる.
[root@neptune logs]# pwd
/usr/local/apache/logs
[root@neptune logs]# tail access_log 
127.0.0.1 - - [11/Dec/2005:14:49:31 +0900] "GET /aa.html HTTP/1.1" 200 217
127.0.0.1 - - [11/Dec/2005:14:51:21 +0900] "eeeeeee" 200 217
127.0.0.1 - - [11/Dec/2005:14:56:35 +0900] "GET /aa.html HTTP/1.1" 200 217
127.0.0.1 - - [11/Dec/2005:14:56:37 +0900] "GET /aa.html HTTP/1.1" 200 217
[root@neptune logs]#  
  • ステータスがすべて200番で返却されていることがわかる.


広告スペース
Google