API関連のプログラムを作成中に
RESTfulなAPIを作成して、テストしているのだけれど、ノート上では通ったテストがデスクトップ上のマシンだと通らない事象が発生…。
なぜか、403 forbiddenが返ってくる。
まずは、ブラウザでPOST/GETのテスト。
問題なく動作する(これはこれで、なぜだ…)
なので、動いているかと思い、PUT/DELETEなどのmethodもテストする。
ブラウザでは無理なので、
Postmanを使っている。
ノートでは、正常にレスポンスが返ってくるのに、デスクトップだとエラー。
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<h1>Forbidden</h1>
<p>You don't have permission to access /~yoshimura/xxxxx/api/yyyyy/12345
on this server.
<br />
</p>
<hr>
<address>Apache/2.4.29 (Ubuntu) Server at localhost Port 80</address>
</body>
</html>
なんで〜。
念の為、ログを見る。
::1 - - [02/Feb/2019:12:17:44 +0900] "POST /~yoshimura/xxxxx/api/yyyyy/12345 HTTP/1.1" 200 198 "-" "PostmanRuntime/7.4.0"
::1 - - [02/Feb/2019:12:19:00 +0900] "PUT /~yoshimura/xxxxx/api/yyyyy/12345 HTTP/1.1" 403 539 "-" "PostmanRuntime/7.4.0"
::1 - - [02/Feb/2019:12:39:39 +0900] "GET /~yoshimura/xxxxx/api/yyyyy/12345 HTTP/1.1" 200 2150 "-" "PostmanRuntime/7.4.0"
::1 - - [02/Feb/2019:12:41:09 +0900] "DELETE /~yoshimura/xxxxx/api/yyyyy/12345 HTTP/1.1" 403 539 "-" "PostmanRuntime/7.4.0"
::1 - - [02/Feb/2019:12:41:36 +0900] "PATCH /~yoshimura/xxxxx/api/yyyyy/99999 HTTP/1.1" 403 539 "-" "PostmanRuntime/7.4.0"
パーミッションが無いって言われても、同じプログラムにアクセスしてるんでっせ…。
むむむ。POSTとGETは通るのに…。
noteでは、localhost直で叩いていたけれど、デスクトップは他のプロジェクトなどもあるので、ユーザディレクトリで動かしているからか?→ピーン! 🔔
解決!
apache上のuserで動作するように、mods-enabledにuserdirを突っ込んでいる。
( # a2enmod userdir )
この設定ファイルuserdir.confを見ると、
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit Indexes Options
Options MultiViews Indexes FollowSymlinks IncludesNoExec
Require method GET POST OPTIONS
</Directory>
あった!
require method に getとpostしか許可していなかった…。
これを
Require method GET POST PUT DELETE OPTIONS
と書き換えて、apacheを再起動。
無事に、受け取るようになった…。
しょうもない設定漏れで、2時間程無駄に費やしたゎ。
ということで、wwwroot以外で動作させる場合に、userdir.confの設定にも気をつけようという備忘録です。
コメント
コメントを投稿
励みになりますので、簡単で良いので一言くださいませ。