error_page 404 403 =200 /index.php; выдаёт 200 но не index.php :(

Igor Sysoev is at rambler-co.ru
Mon Sep 24 23:17:02 MSD 2007


On Mon, Sep 24, 2007 at 08:56:43PM +0400, Name Last name wrote:

> error_page 404 403 =200 /index.php;
> 
> location / {
>   root /some/path/;
>   index index.php;
> }
> 
> запрос: http://web1.server/something
> 
> судя по заголовкам, эта конструкция выдаёт ответ HTTP/1.x 200 OK
> 
> Но браузер показывает страничку Not found.
> 
> Что странно, поскольку хотелось добиться показа индексной странички в случае
> 403 и 404.
> 
> Желаемого результата удалось добится написав error_page 403 404 =200
> http://web1.server/index.php; . Собственно, цель достигнута. Но вопрос
> остался не до конца ясным: так и должно быть, или, возможно дело в том, что
> error_page указан до директивы root?
> 
> Ниже конфиг для этого сервера.
> 
>    server {
>         listen       192.168.0.20:80;
>         server_name  web1.server;
> 
>         rewrite         ^/(.*)/(.*).html$
> /view_video.php?viewkey=$1&title=$2 last;
>         rewrite         ^/flvideo/flvplayer.swf$        /pl.php last;
>         rewrite         "^/(flvideo|thumb|members|la1vc2b4ag3)/(.+)$"
> http://media1.server/$1/$2 permanent;
> 
>         access_log /var/log/nginx/web1.server.access.log  main;
> 
>         error_page 403 404 =200 /index.php;
> 
>         location / {
>             root        /srv/www/vhosts/server.com;
>             index       index.php;
>         }
> 
>         location /swfs {
>             internal;
>             root /srv/www/vhosts/server_internal;
>         }
> 
>         location ~ \.php$ {
>             proxy_pass         http://127.0.0.1:80;
>             proxy_redirect     off;
> 
>             proxy_set_header   Host             $host;
>             proxy_set_header   X-Real-IP        $remote_addr;
>             proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
> 
>             client_max_body_size       506m;
>             client_body_buffer_size    128k;
> 
>             proxy_connect_timeout      3005;
>             proxy_send_timeout         3005;
>             proxy_read_timeout         3005;
> 
>             proxy_buffer_size          4k;
>             proxy_buffers              4 32k;
>             proxy_busy_buffers_size    64k;
>             proxy_temp_file_write_size 64k;
> 
>         }
> 
>         location ~ /\.ht {
>             deny all;
>         }
>     }

Это фича.
      proxy_pass         http://127.0.0.1:80;
без URI part передаёт оригинальный URI клиента, а не /index.php (в данном
случае).

Лечится так:

       location ~ \.php$ {
            proxy_pass         http://127.0.0.1:80;
       }

       location = /index.php {
            proxy_pass         http://127.0.0.1:80/index.php;
       }

Всё остальное proxy_... можно вынести на уровень сервера, чтобы не дублировать.


-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list