Проблема с 404 и fastcgi
Igor Sysoev
is at rambler-co.ru
Fri Aug 26 16:38:11 MSD 2005
On Fri, 26 Aug 2005, Igor Sysoev wrote:
> On Fri, 26 Aug 2005, Andrei Nigmatulin wrote:
>
>> Есть вот такая конфигурация:
>>
>> fastcgi_index index.phtml;
>> fastcgi_redirect_errors on;
>>
>> server {
>> listen 80;
>>
>> location / {
>> root html;
>> index index.html index.htm;
>> }
>>
>> # serve php scripts
>> location ~ (/$|\.phtml$|\.php$) {
>> fastcgi_param DOCUMENT_ROOT $document_root;
>> fastcgi_param PATH_TRANSLATED
>> $document_root/$fastcgi_script_name;
>> fastcgi_param SCRIPT_NAME $fastcgi_script_name;
>> fastcgi_param QUERY_STRING $query_string;
>> fastcgi_param SERVER_NAME $server_name;
>> fastcgi_param REQUEST_URI $request_uri;
>> fastcgi_param DOCUMENT_URI $document_uri;
>> fastcgi_param REQUEST_METHOD $request_method;
>> fastcgi_pass 127.0.0.1:8002;
>> }
>>
>> error_page 404 =200 /404.phtml ;
>> }
>>
>> Как видно, все запросы, которые заканчиваются на "/" обрабатываются через
>> fastcgi (/index.phtml).
>>
>> 1) при запросе /non-existent отрабатывает скрипт 404.phtml.
>> 2) при запросе /non-existent/ вижу сообщение "No input file specified".
>> Хочется чтобы эти запросы тоже обрабатывались скриптом /404.phtml. Как это
>> можно сделать ?
>
> По идее, должны. Можно прислать мне отлаочный лог запроса /non-existent/ ?
Судя по логу, дело вот в чём. Значение переменной $fastcgi_script_name
кэшируется после первого определения. Для запроса "/non-existent/"
$fastcgi_script_name равна /non-existent/index.phtml. На этот запрос
fastcgi возвращает 404. error_page перехватывает ошибку и делает опять
запрос к fastcgi. Но так как $fastcgi_script_name закэшировано, то
PATH_TRANSLATED опять будет равен .../non-existent/index.phtml и
fastcgi опять возврашает ошибку 404. Она уже не перенаправляется
на error_page, а отдаётся, как есть.
Чтобы избежать такой ситуации, нужно описать отдельный location для
/404.phtml и указать там
fastcgi_param PATH_TRANSLATED $document_root/404.phtml;
или
fastcgi_param PATH_TRANSLATED /path/to/fastcgi/404.phtml;
Игорь Сысоев
http://sysoev.ru
More information about the nginx-ru
mailing list