Apacheで何が何でもステータス200
Apacheで何が何でもステータス200
0.改訂履歴
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番で返却されていることがわかる.