h2o web serverでLaravelをfastcgi(php-fpmに繋げて)で動かそうとして詰んでる。誰か助けて too many internal delegations
もう、一日詰んでいる。
GitHubに質問するほど自分の設定に自信がなくて自分のブログにゲロする。
環境
Ubuntu h2o 2.2.4とか2.3.0-DEV@5597dbeとか (1.3DEVから今日、アップデーとしてダメになった) Laravel 5.6 PHP7.2
設定状況
php-fpmに繋げたいので下記の設定を入れている
file.index: [ 'index.html', 'index.htm', 'index.txt', 'index.php' ] file.custom-handler: extension: .php fastcgi.connect: port: /run/php/php7.2-fpm.sock type: unix
"aaaa.com:443": listen: port: 443 ssl: certificate-file: /etc/letsencrypt/live/aaaa.com/fullchain.pem key-file: /etc/letsencrypt/live/aaaa.com/privkey.pem cipher-suite: "EECDH+AESGCM:AES256+EECDH:AES128+EECDH" minimum-version: TLSv1.2 paths: "/": file.dir: /path/to/public redirect: url: /index.php/ internal: YES # internal: NO status: 307
状況
エラー: too many internal delegations
- GET https://aaaaa.comではindex.php稼働
- GET https://aaaa.com/ではindex.php稼働
- GET https://aaaa.com/index.php/hogeでhogeが稼働
- GET https://aaaa.com/hogeはブラウザにエラー表示
- internal:NOにするとindex.php/hogeに307されて動く
internale:YESでindex.php/hogeが内部で動いて欲しい。
動いて欲しいです。
上記のエラーはh2o/lib/core/request.cの370行目で吐かれてるように見える
if (req->num_delegated == req->conn->ctx->globalconf->max_delegations) { /* TODO log */ h2o_send_error_502(req, "Gateway Error", "too many internal delegations", 0);
この値は設定ファイルのmax_delegationsで設定できるように見えるが
max-delegations: 10000000
とかしてもエラー状況は変わらず。
internal: YESにしたら内部的にループしちゃっている感じもするけどC言語が読めないのでわからない。
Laravelの動きも関係するのかもしれないがわからない。
.htaccessでのRewriteは関係ないはずだけれども一応入れている。
ver1.3devの頃は動いていた気がする。
ver2からなんか挙動が変わったよ、というのもあるので関係あるのかないのか。。。
don't redirect (with `/` added) in core; do it in the `file.dir` handler by kazuho · Pull Request #820 · h2o/h2o · GitHub
もうかれこれ8時間ぐらい詰まっているのでわけがわからない。
誰か助けてください。。
助けて。。
追記
わからないなりにソースに手を加えてみる。
char buf[128]; snprintf(buf, 128, "too many internal delegations %d", req->num_delegated); h2o_send_error_502(req, "Gateway Error", buf, 0);
結果
too many internal delegations 10000000
あちゃー。これはあちゃー。
なぜこんなことが助けて。。。
Github行こうかな。
追記 自己解決
コンフィグをコメントアウトしていったら
下記が原因だった
"aaaa.com": listen: port: 80 paths: "/": redirect: "https://aaaa.com"
を
"aaaa.com:80": listen: port: 80 paths: "/": redirect: "https://aaaa.com"
にしたら解決した。