Re: Что значит эта ошибка ?

Sergey Shepelev temotor at gmail.com
Tue Apr 21 22:36:49 MSD 2009


http://мой.домен
это не запрос. Это ничего не значащая строка. HTTP URL-ом она станет,
если к ней добавить /

Когда вы вводите эту строку в браузер, он [дописывает ресурс /]
создаёт запрос GET /, что равно запросу http://мой.домен/
Обратите внимание, не /index.html, а /. Это значит, что если у вас в
access.log есть GET /index.html, то либо люди руками вводят именно
этот адрес, либо ссылки ведут на именно этот адрес.

nginx, видя этот запрос, обрабатывает его в соответствии с указанными location.

(А так как запрос корня сайта - относительно частый, иногда самый
частый, то есть много смысла прописать на него отдельный location)
location = / {
    fastcgi_pass unix:/mnt/md0/php-fcgi.sock;
    include  /usr/local/nginx/conf/phpcgi.conf;
}

Поскольку на location / никаких правил не написано (по крайней мере в
том, что вы прислали), работает модуль autoindex и запрос внутри
переписывается в /+(по очереди всё из директивы index)
>>    index index.php index.html index.htm;

После первой подстановки (index.php) будет обрабатываться запрос
/index.php и сработает ваш location ~ .php$

Как вы заметили, здесь не сказано почему в error.log появляются
index.html failed (2: No such file or directory).
В связи с тремя причинами:
1) вы так и не сказали какой был запрос в результате которого возникла
ошибка. Ваш nginx сохраняет запросы в /home/logs/content_access.log
2) вполне возможно, из-за того что я плохо знаю внутреннее устройство
nginx я что-то описал неверно
3) и, наконец, самая вероятная причина - клиенты (браузеры)
действительно спрашивают /index.html. Но не браузер магически делает
это, а люди руками пишут. Или ссылки ведут на такой адрес. В любом
случае можно выяснить только с помощью access.log

Чтобы связать записи из error.log и access.log используйте время. То
есть чтобы увидеть запросы относительно ошибки
>> 2009/04/21 18:22:45 [error] 29090#0: *166570 open()
>> "/home/content/index.html" failed (2: No such file or directory), client:
нужно в access.log искать запросы произошедшие примерно в 2009/04/21 18:22:45.

В целом, если у вас всё работает - ситуация нормальная, неважно кто
куда пишет какие ошибки.
Если вас очень заботит, чтобы лог не засирался этими ошибками, можно
попробовать:
1. index index.php; # index.html index.htm
2. location = / {см.выше}  - это даже не "можно", а "нужно"
3. как выключить -
http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html#log_not_found
учтите, что эта директива может не поддерживаться в вашей версии nginx.

Также стоит посмотреть в сторону директивы try_files. Это просто
удобство, никаких проблем она не решит.

2009/4/21  <maxhl at hitline.net.ua>:
> А какой запрос делает броузер при открытии http://мой.домен
> Наверное index.html ... Тоесть это нормальная ситуация? А можно как то
> выключить ведение лога для этого файла?
>
> -----Original Message-----
> From: owner-nginx-ru at sysoev.ru [mailto:owner-nginx-ru at sysoev.ru] On Behalf
> Of Sergey Shepelev
> Sent: Tuesday, April 21, 2009 6:57 PM
> To: nginx-ru at sysoev.ru
> Subject: Re: Что значит эта ошибка ?
>
> Запрос какой был?
>
> 2009/4/21  <maxhl at hitline.net.ua>:
>> В error логе полно таких ошибок:
>> 2009/04/21 18:22:45 [error] 29090#0: *166570 open()
>> "/home/content/index.html" failed (2: No such file or directory), client:
>> ...
>> У меня везде прописан index.php а он все равно ищет index.html ...
>>
>> Конфиг вирт хоста:
>> server {
>>    listen 80;
>>    listen 81;
>>    listen 82;
>>
>>    server_name мой.домен *.мой домен;
>>    access_log /home/logs/content_access.log combined;
>>    error_log /home/logs/content_error.log info;
>>    server_name_in_redirect off;
>>    root /home/content;
>>    index index.php index.html index.htm;
>>
>> # redirect to php<----->
>>    location ~ .php$ {
>>
>>    set $path_info $fastcgi_script_name;
>>    set $real_script_name $fastcgi_script_name;
>>    if ($fastcgi_script_name ~ "(.+?.php)(/.+)$") {
>>        set $real_script_name $1;
>>        set $path_info $2;
>>    }
>>    fastcgi_param SCRIPT_FILENAME  /home/content$real_script_name;
>>    fastcgi_param SCRIPT_NAME $real_script_name;
>>    fastcgi_param PATH_INFO $path_info;
>>    fastcgi_pass unix:/mnt/md0/php-fcgi.sock;
>>    include  /usr/local/nginx/conf/phpcgi.conf;
>>    }
>>
>>    include /usr/local/nginx/conf/404;
>>    include /usr/local/nginx/conf/anti_lich;
>>    include /usr/local/nginx/conf/.ht;
>> }
>>
>>
>> #phpcgi.conf
>> fastcgi_pass_request_body off;
>> client_body_in_file_only clean;
>> fastcgi_param  REQUEST_BODY_FILE  $request_body_file;
>> fastcgi_param<->CONTENT_TYPE<--><------>$content_type;
>> fastcgi_param<->CONTENT_LENGTH<><------>$content_length;
>> fastcgi_param   DOCUMENT_ROOT<-><------>$document_root;
>> fastcgi_param<->DOCUMENT_URI<--><------>$document_uri;
>> fastcgi_param<->GATEWAY_INTERFACE<----->CGI/1.1;
>> #fastcgi_param   PATH_INFO
>> <---><------>"http://$http_host$request_uri";
>> #fastcgi_param   PATH_TRANSLATED         "/home/content$document_uri";
>> fastcgi_param<->QUERY_STRING<--><------>$query_string;
>> fastcgi_param<->REMOTE_ADDR<---><------>$remote_addr;
>> fastcgi_param<->REMOTE_PORT<---><------>$remote_port;
>> fastcgi_param<->REQUEST_URI<---><------>$request_uri;
>> fastcgi_param<->REQUEST_METHOD<><------>$request_method;
>> fastcgi_param<->SCRIPT_NAME<---><------>$request_uri;
>> fastcgi_param<->SERVER_ADDR<---><------>$server_addr;
>> #fastcgi_param<>SERVER_NAME<---><------>$server_name;
>> fastcgi_param<->SERVER_PORT<---><------>$server_port;
>> fastcgi_param<->SERVER_PROTOCOL><------>$server_protocol;
>> fastcgi_param<->SERVER_SOFTWARE <------>nginx/$nginx_version;
>>
>> fastcgi_param   REDIRECT_STATUS 200;
>> fastcgi_index  index.php;
>>
>> Заранее спасибо.
>> ____________________________
>> С уважением Max ICQ 71006063
>>
>>
>>
>>
>>
>
>
>


More information about the nginx-ru mailing list