Chyba 310 (net::ERR_TOO_MANY_REDIRECTS)
- neph04
- Člen | 3
Nastaveni
Nginx/1.1.14
PHP Version 5.4.2
Nette Framework 2.0.3 stable (PHP 5.3)
Vyskyt chyby: vzdy
Spustil sem uplne cistou app ze sandboxu (zadne nastaveni sem neprovadel) a chod aplikace skoncil na chybu „Chyba 310(net::ERR_TOO_MANY_REDIRECTS): Proběhlo příliš mnoho přesměrování.“
Trosku sem badal a chyba je zpusobena tim, ze \Nette\Http\RequestFactory →
createHttpRequest() imho chybne nastavuje stav HTTPS v $url->scheme.
Konkretne:
RequestFactory.php line 60
<?php
$url->scheme = isset($_SERVER['HTTPS']) && strcasecmp($_SERVER['HTTPS'], 'off') ? 'https' : 'http';
?>
vraci
<?php
$url->scheme = 'https'
?>
i kdyz prichazim pres :80. Proto probiha nekonecny request na sebe sama…
Cely sestaveni url pak vypada takto:
<?php
class Nette\Http\UrlScript#114 (10) {
private $scriptPath => string(1) "/"
private $scheme => string(5) "https"
...
private $host => string(12) "dev.xyzyx.cz"
private $port => int(80)
private $path => string(1) "/"
private $query => string(0) ""
private $fragment => string(0) ""
private $frozen => bool(true)
}
?>
Cely je to tam divny a prehozeny :) $_SERVER[‚HTTPS‘] nemusi totiz vzdy vratit „off“. Podle dokumentace je „off“ pouze u ISAPI s IIS. Ja mam default ‚no value‘.. a pokud je off, nemelo by to vracet i tak ‚http‘ misto ‚https‘?
‚HTTPS‘ – Set to a non-empty value if the script was queried through
the HTTPS protocol.
Note: Note that when using ISAPI with IIS, the value will be off if the request
was not made through the HTTPS protocol.
- Majkl578
- Moderator | 1364
Tohle se změnilo v nginxu někde mezi verzemi 1.1.12 a 1.1.14, nevím
přesně. Narazil jsem na to taky, dočasně jsem to tehdy vyřešil
zakomentováním řádky „fastcgi_param HTTPS $https;
“ v
/etc/nginx/fastcgi_params
. Nezkoumal jsem, zda je to chyba Nette
nebo konfigurace nginxu a do dokumentace jsem se nedíval.
EDIT: Pull request: https://github.com/…tte/pull/654
- Majkl578
- Moderator | 1364
Minimálně ani v nejnovější verzi nginxe v Debianu (1.1.19 z testing) to tak není. Jinak také viz http://stackoverflow.com/a/2886224 (kontrole portu bych se ale určitě vyhnul).