PUTメソッドとmod_jkについて調べる
TweetPosted on Tuesday Jan 21, 2014 at 09:34AM in Technology
環境
- さくらVPS 1G
- CentOS 6.5
- Apache 2.2.15
- mod_jk設定済み
$ /usr/sbin/httpd -v Server version: Apache/2.2.15 (Unix) Server built: Aug 13 2013 17:29:28 $
GETを送ってみる
全部APサーバに飛ばす設定にしているのでAPサーバのウェルカム画面的なものが返る。
$ curl -v http://localhost:80/ -X GET * About to connect() to localhost port 80 (#0) * Trying 127.0.0.1... connected * Connected to localhost (127.0.0.1) port 80 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2 > Host: localhost > Accept: */* > < HTTP/1.1 200 OK < Date: Tue, 21 Jan 2014 00:28:59 GMT < Server: Apache/2.2.15 (CentOS) < Last-Modified: Sun, 22 Dec 2013 06:12:49 GMT < Content-Length: 2417 < Connection: close < Content-Type: text/html; charset=UTF-8 < <!-- ~ JBoss, Home of Professional Open Source. ~ Copyright (c) 2011, Red Hat, Inc., and individual contributors ~ as indicated by the @author tags. See the copyright.txt file in the ...
PUTを送ってみる
デフォルトで拒否されるっぽい
$ curl -v http://localhost:80/ -X PUT * About to connect() to localhost port 80 (#0) * Trying 127.0.0.1... connected * Connected to localhost (127.0.0.1) port 80 (#0) > PUT / HTTP/1.1 > User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2 > Host: localhost > Accept: */* > < HTTP/1.1 405 Method Not Allowed < Date: Mon, 20 Jan 2014 23:55:11 GMT < Server: Apache/2.2.15 (CentOS) < Content-Length: 83 < Connection: close < Content-Type: text/html; charset=UTF-8 < * Closing connection #0 <html><head><title>Error</title></head><body>405 - Method Not Allowed</body></html>
インストールしてからmod_jkでAPサーバに全リクエスト飛ばす設定をした他は、何も設定変更していないのだけど拒否されている。PUTも飛ぶのかと思っていたけど違うようだ。
他のメソッドも試してみる
PUT, DELETE, OPTIONSは405
$ curl -LI http://localhost:80/ -X GET -o /dev/null -w '%{http_code}\n' -s 200 $ curl -LI http://localhost:80/ -X POST -o /dev/null -w '%{http_code}\n' -s 200 $ curl -LI http://localhost:80/ -X PUT -o /dev/null -w '%{http_code}\n' -s 405 $ curl -LI http://localhost:80/ -X DELETE -o /dev/null -w '%{http_code}\n' -s 405 $ curl -LI http://localhost:80/ -X OPTIONS -o /dev/null -w '%{http_code}\n' -s 405 $
知らなかった。そういえば少し前に脆弱性が報告されていたような。そのせいでApache側でデフォルトオフになったのだろうか。mod_jkの設定がどうのというよりそもそもApacheで受け付けない設定になっている感じ。
許可するには?
そもそも最近のApacheでは全面的にオフになっていて、[7]によると何やらモジュールの有効化などが必要らしい。何か大変そうなので今回はここまでにしておく。
参考文献
- Issue with HTTP methods (DELETE,PUT) not being accepted (returning 405 Method not allowed) (Apache Users)
- Re: Issue with HTTP methods (DELETE,PUT) not being accepted (returning 405 Method not allowed) (Apache Users)
- Tomcat + Apache mod_jk PUT gives 405 (Tomcat forum at JavaRanch)
- [Tomcat-users] mod_jk PUT request-method returns 405 Error - Grokbase
- Agile Testing: Configuring Apache 2 and Tomcat 5.5 with mod_jk
- cURLでHTTPステータスコードだけを取得する - Qiita [キータ]
- PUTやDELETEを使うために - PukiWiki
Tags: apache