Не могу добиться работы X-Accel-Redirect

Alex, the Marrch Ca'at marrch.caat на gmail.com
Чт Окт 21 23:02:00 MSD 2010


Всем доброго времени суток, камрады!

Есть тривиальная, в общем-то, задача: перед скачиванием файлов из
определенной папки показываться пользователю некую страницу, чтобы тот так
или иначе подтвердил, что он имеет право его скачивать. Скрипт отдает
X-Accel-Redirect заголовок после проверки, после чего nginx возвращает 404,
хотя файл есть.

Вот как собран nginx (раньше был 0.6.что-то-там из портов, обновил в попытке
решить проблему):

nginx version: nginx/0.8.53
built by gcc 4.3.2 (Debian 4.3.2-1.1)
TLS SNI support enabled
configure arguments: --conf-path=/etc/nginx/nginx.conf
--error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx.pid
--lock-path=/var/lock/nginx.lock --http-log-path=/var/log/nginx/access.log
--http-client-body-temp-path=/var/lib/nginx/body
--http-proxy-temp-path=/var/lib/nginx/proxy
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi --with-debug
--with-http_stub_status_module --with-http_flv_module --with-http_ssl_module
--with-http_dav_module --without-mail_pop3_module --without-mail_imap_module
--without-mail_smtp_module

Вот конфиг:
server {
    listen   80;
    server_name  lmml.name;

    access_log  /var/log/nginx/lmml.name.access.log;
    error_log  /var/log/nginx/lmml.name.error.log debug;

    location / {
        root   /var/www/lmml.name/httpdocs;
        index  index.php index.html index.htm;
    }

    location /data {
        internal;
        error_page 404 /download.php?path=$uri;
        root /var/www/lmml.name/httpdocs;
    }

    location ~ \.php$ {
        fastcgi_pass    unix:/var/run/php-fpm/default.socket;
        fastcgi_index    index.php;
        fastcgi_param    SCRIPT_FILENAME  /var/www/
lmml.name/httpdocs$fastcgi_script_name;
        include     fastcgi_params;
    }

    location ~ /\.ht {
        deny  all;
    }
}

Вот debug log:

2010/10/21 18:51:08 [debug] 28390#0: *4 http upstream connect: 0

2010/10/21 18:51:08 [debug] 28390#0: *4 http upstream send request

2010/10/21 18:51:08 [debug] 28390#0: *4 chain writer buf fl:0 s:1192

2010/10/21 18:51:08 [debug] 28390#0: *4 chain writer in: 09FACA60

2010/10/21 18:51:08 [debug] 28390#0: *4 writev: 1192

2010/10/21 18:51:08 [debug] 28390#0: *4 chain writer out: 00000000

2010/10/21 18:51:08 [debug] 28390#0: *4 event timer add: 14:
60000:3477507303

2010/10/21 18:51:08 [debug] 28390#0: *4 http finalize request: -4,
"/download.php?path=/data/test.test" a:1, c:3

2010/10/21 18:51:08 [debug] 28390#0: *4 http request count:3 blk:0

2010/10/21 18:51:08 [debug] 28390#0: *4 http finalize request: -4,
"/download.php?path=/data/test.test" a:1, c:2

2010/10/21 18:51:08 [debug] 28390#0: *4 http request count:2 blk:0

2010/10/21 18:51:08 [debug] 28390#0: *4 post event B7B7A0A4

2010/10/21 18:51:08 [debug] 28390#0: *4 delete posted event B7B7A0A4

2010/10/21 18:51:08 [debug] 28390#0: *4 http upstream request:
"/download.php?path=/data/test.test"

2010/10/21 18:51:08 [debug] 28390#0: *4 http upstream dummy handler

2010/10/21 18:51:08 [debug] 28390#0: *4 post event B7BAF0A4

2010/10/21 18:51:08 [debug] 28390#0: *4 post event B7B7A0A4

2010/10/21 18:51:08 [debug] 28390#0: *4 delete posted event B7B7A0A4

2010/10/21 18:51:08 [debug] 28390#0: *4 http upstream request:
"/download.php?path=/data/test.test"

2010/10/21 18:51:08 [debug] 28390#0: *4 http upstream dummy handler

2010/10/21 18:51:08 [debug] 28390#0: *4 delete posted event B7BAF0A4

2010/10/21 18:51:08 [debug] 28390#0: *4 http upstream request:
"/download.php?path=/data/test.test"

2010/10/21 18:51:08 [debug] 28390#0: *4 http upstream process header

2010/10/21 18:51:08 [debug] 28390#0: *4 malloc: 09FACCD8:4096

2010/10/21 18:51:08 [debug] 28390#0: *4 recv: fd:14 184 of 4096

2010/10/21 18:51:08 [debug] 28390#0: *4 http fastcgi record byte: 01

2010/10/21 18:51:08 [debug] 28390#0: *4 http fastcgi record byte: 06

2010/10/21 18:51:08 [debug] 28390#0: *4 http fastcgi record byte: 00

2010/10/21 18:51:08 [debug] 28390#0: *4 http fastcgi record byte: 01

2010/10/21 18:51:08 [debug] 28390#0: *4 http fastcgi record byte: 00

2010/10/21 18:51:08 [debug] 28390#0: *4 http fastcgi record byte: 9D

2010/10/21 18:51:08 [debug] 28390#0: *4 http fastcgi record byte: 03

2010/10/21 18:51:08 [debug] 28390#0: *4 http fastcgi record byte: 00

2010/10/21 18:51:08 [debug] 28390#0: *4 http fastcgi record length: 157

2010/10/21 18:51:08 [debug] 28390#0: *4 http fastcgi parser: 0

2010/10/21 18:51:08 [debug] 28390#0: *4 http fastcgi header: "X-Powered-By:
PHP/5.2.6-1+lenny4.fpm.4"

2010/10/21 18:51:08 [debug] 28390#0: *4 http fastcgi parser: 0

2010/10/21 18:51:08 [debug] 28390#0: *4 http fastcgi header:
"X-Accel-Redirect: /data/test.test"

2010/10/21 18:51:08 [debug] 28390#0: *4 http fastcgi parser: 0

2010/10/21 18:51:08 [debug] 28390#0: *4 http fastcgi header: "Content-type:
"

2010/10/21 18:51:08 [debug] 28390#0: *4 http fastcgi parser: 0

2010/10/21 18:51:08 [debug] 28390#0: *4 http fastcgi header:
"Content-Disposition: attachment; filename="test.test""

2010/10/21 18:51:08 [debug] 28390#0: *4 http fastcgi parser: 1

2010/10/21 18:51:08 [debug] 28390#0: *4 http fastcgi header done

2010/10/21 18:51:08 [debug] 28390#0: *4 finalize http upstream request: -5

2010/10/21 18:51:08 [debug] 28390#0: *4 finalize http fastcgi request

2010/10/21 18:51:08 [debug] 28390#0: *4 free rr peer 1 0

2010/10/21 18:51:08 [debug] 28390#0: *4 close http upstream connection: 14

2010/10/21 18:51:08 [debug] 28390#0: *4 event timer del: 14: 3477507303

2010/10/21 18:51:08 [debug] 28390#0: *4 internal redirect:
"/data/test.test?"

2010/10/21 18:51:08 [debug] 28390#0: *4 rewrite phase: 0

2010/10/21 18:51:08 [debug] 28390#0: *4 test location: "/"

2010/10/21 18:51:08 [debug] 28390#0: *4 test location: "data"

2010/10/21 18:51:08 [debug] 28390#0: *4 test location: ~ "\.php$"

2010/10/21 18:51:08 [debug] 28390#0: *4 test location: ~ "/\.ht"

2010/10/21 18:51:08 [debug] 28390#0: *4 using configuration "/data"

2010/10/21 18:51:08 [debug] 28390#0: *4 http cl:-1 max:1048576

2010/10/21 18:51:08 [debug] 28390#0: *4 rewrite phase: 2

2010/10/21 18:51:08 [debug] 28390#0: *4 post rewrite phase: 3

2010/10/21 18:51:08 [debug] 28390#0: *4 generic phase: 4

2010/10/21 18:51:08 [debug] 28390#0: *4 generic phase: 5

2010/10/21 18:51:08 [debug] 28390#0: *4 access phase: 6

2010/10/21 18:51:08 [debug] 28390#0: *4 access phase: 7

2010/10/21 18:51:08 [debug] 28390#0: *4 post access phase: 8

2010/10/21 18:51:08 [debug] 28390#0: *4 content phase: 9

2010/10/21 18:51:08 [debug] 28390#0: *4 content phase: 10

2010/10/21 18:51:08 [debug] 28390#0: *4 content phase: 11

2010/10/21 18:51:08 [debug] 28390#0: *4 content phase: 12

2010/10/21 18:51:08 [debug] 28390#0: *4 http filename: "/var/www/
lmml.name/httpdocs/data/test.test"

2010/10/21 18:51:08 [debug] 28390#0: *4 add cleanup: 09FACC2C

2010/10/21 18:51:08 [debug] 28390#0: *4 http static fd: 14

2010/10/21 18:51:08 [debug] 28390#0: *4 http set discard body

2010/10/21 18:51:08 [debug] 28390#0: *4 posix_memalign: 09FADCE0:4096 @16

2010/10/21 18:51:08 [debug] 28390#0: *4 HTTP/1.1 404 Not Found

Server: nginx/0.8.53

Date: Thu, 21 Oct 2010 14:51:08 GMT

Content-Type: application/octet-stream

Content-Length: 4

Connection: keep-alive

Content-Disposition: attachment; filename="testwww-lmml-rutest"

2010/10/21 18:51:08 [debug] 28390#0: *4 write new buf t:1 f:0 09FADD74, pos
09FADD74, size: 233 file: 0, size: 0

2010/10/21 18:51:08 [debug] 28390#0: *4 http write filter: l:0 f:0 s:233

2010/10/21 18:51:08 [debug] 28390#0: *4 http output filter
"/data/test.test?"

2010/10/21 18:51:08 [debug] 28390#0: *4 http copy filter: "/data/test.test?"

2010/10/21 18:51:08 [debug] 28390#0: *4 http postpone filter
"/data/test.test?" BFEE6B08

2010/10/21 18:51:08 [debug] 28390#0: *4 write old buf t:1 f:0 09FADD74, pos
09FADD74, size: 233 file: 0, size: 0

2010/10/21 18:51:08 [debug] 28390#0: *4 write new buf t:0 f:1 00000000, pos
00000000, size: 0 file: 0, size: 4

2010/10/21 18:51:08 [debug] 28390#0: *4 http write filter: l:1 f:0 s:237

2010/10/21 18:51:08 [debug] 28390#0: *4 http write filter limit 0

2010/10/21 18:51:08 [debug] 28390#0: *4 writev: 233

2010/10/21 18:51:08 [debug] 28390#0: *4 sendfile: @0 4

2010/10/21 18:51:08 [debug] 28390#0: *4 sendfile: 4, @0 4:4

2010/10/21 18:51:08 [debug] 28390#0: *4 http write filter 00000000

2010/10/21 18:51:08 [debug] 28390#0: *4 http copy filter: 0
"/data/test.test?"

2010/10/21 18:51:08 [debug] 28390#0: *4 http finalize request: 0,
"/data/test.test?" a:1, c:2

2010/10/21 18:51:08 [debug] 28390#0: *4 http request count:2 blk:0

2010/10/21 18:51:08 [debug] 28390#0: *4 http finalize request: -4,
"/data/test.test?" a:1, c:1

2010/10/21 18:51:08 [debug] 28390#0: *4 set http keepalive handler

2010/10/21 18:51:08 [debug] 28390#0: *4 http close request

2010/10/21 18:51:08 [debug] 28390#0: *4 http log handler

2010/10/21 18:51:08 [debug] 28390#0: *4 run cleanup: 09FACC2C

2010/10/21 18:51:08 [debug] 28390#0: *4 file cleanup: fd:14

2010/10/21 18:51:08 [debug] 28390#0: *4 free: 09FACCD8

2010/10/21 18:51:08 [debug] 28390#0: *4 free: 09FABCC0, unused: 4

2010/10/21 18:51:08 [debug] 28390#0: *4 free: 09FADCE0, unused: 3382

2010/10/21 18:51:08 [debug] 28390#0: *4 event timer add: 13:
65000:3477512305

2010/10/21 18:51:08 [debug] 28390#0: *4 free: 09FA3908

2010/10/21 18:51:08 [debug] 28390#0: *4 free: 09FA3500

2010/10/21 18:51:08 [debug] 28390#0: *4 hc free: 00000000 0

2010/10/21 18:51:08 [debug] 28390#0: *4 hc busy: 00000000 0

2010/10/21 18:51:08 [debug] 28390#0: *4 post event B7BAF070

2010/10/21 18:51:08 [debug] 28390#0: *4 delete posted event B7BAF070

2010/10/21 18:51:08 [debug] 28390#0: *4 http keepalive handler

2010/10/21 18:51:08 [debug] 28390#0: *4 malloc: 09FA3500:1024

2010/10/21 18:51:08 [debug] 28390#0: *4 recv: fd:13 -1 of 1024

2010/10/21 18:51:08 [debug] 28390#0: *4 recv() not ready (11: Resource
temporarily unavailable)

2010/10/21 18:52:13 [debug] 28390#0: *4 event timer del: 13: 3477512305

2010/10/21 18:52:13 [debug] 28390#0: *4 http keepalive handler
2010/10/21 18:52:13 [debug] 28390#0: *4 close http connection: 13

- видно, что получив ответ от FCGI, nginx правильно определил путь к файлу,
но после этого почему-то вернул 404. Что происходит - понять не могу.

При этом я ровно такую же схему совсем недавно уже реализовывал на другом
серваке, и там все работало правильно. К сожалению, того сервера уже нет в
живых, чтобы сравнить и понять, в чем отличие...

Буду благодарен за любые конструктивные идеи и подсказки!

Алекс Марртовский.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20101021/09990bd9/attachment-0001.html>


Подробная информация о списке рассылки nginx-ru