Отдача статики скриптом. Что лучше?

C001_UsEr

Новичок
Отдача статики скриптом. Что лучше?

Есть небходимость отдавать больше статические файлы скриптом, file_get_contents() тут, естественно, не подходит.
Когда встал вопрос, чем отдавать, админ сервака сказал, что установлен nginx.
Я пробывал отдавать так
header("Content-Type: video/mpeg");
header("X-Accel-Redirect: /path/to/file");
В итоге файл мнгновенно отдаётся, но с дефолтным мим-тайпом text/html.
На своём серваке прекрутил к Apache 2.2.x mod_xsendfile.
Принцип работы тот же
header("Content-Type: video/mpeg");
header("X-Sendfile: /path/to/file");
Отдаются "на отличненько" даже очень большие файлы (более 2 Гб), и с верным мим-тайпом, однако под нагрузкой проверить производительность данного чуда программистской мысли нет возможности :(
Так вот вопросы —
1) Как заставить nginx отдавать файлы с верным мим-типом?
2) Какой из вариантов отдачи лучше, или даже так — не хуже ли по производительности второй вариант первого.
Заранее спасибо за ответ.
P.S. Поиск юзал, там про Content-Type ничего не пишут, гугленье по первому вопросу тоже не очень помогло.
P.S. PHP5, Apache 1.3.39, FreeBSD 6.3 -- STABLE. Версия nginx — хз.
 

phprus

Moderator
Команда форума
В итоге файл мнгновенно отдаётся, но с дефолтным мим-тайпом text/html.
http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html#default_type
http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html#types
Случайно не оно?

2) Какой из вариантов отдачи лучше, или даже так — не хуже ли по производительности второй вариант первого.
nginx должен расходовать меньше ресурсов сервера, чем apache.

Прочитай комментарии на этой странице:
http://blog.kovyrin.net/2006/11/01/nginx-x-accel-redirect-php-rails/lang/ru/
Там описана проблема с text/html, может быть это то-же, что и у тебя.

Хотя странно. nginx должен передавать заголовок Content-Type без изменений. Постарайся узнать какая у тебя версия nginx и нет ли чего подозрительного в логах.

Можешь еще прочитать вот это: http://wiki.codemongers.com/NginxXSendfile там описан принццип конфигурирования для использования X-Accel-Redirect.
 

C001_UsEr

Новичок
http://wiki.codemongers.com/NginxXSendfile

You should also know that the following headers aren't modified by nginx
... Content-Type ...
Вот тут написано что не меняет он этот заголовок, хотя на деле — меняет.

Сейчас тестирую на другом сервере, с последними версиями софта —
apache-2.2.8 Version 2.2 of Apache web server with prefork MPM.
nginx-0.6.31 Robust and small WWW server
php5-5.2.6 PHP Scripting Language

OS — FreeBSD 7.0 -- RELEASE.
Ситуация та же. В логах ничего по этой теме нет :(
 

phprus

Moderator
Команда форума
C001_UsEr
Попробуй посмотреть какие заголовки на самом деле отправляет твой скрипт, например, запросив его telnet'ом. У меня есть подозрения, что он шлет чтото еще кроме того, что ты явно отправляешь.
У тебя php-скрипт как запущен? под апачем?
 

C001_UsEr

Новичок
Да, под апачем, заголовки смотрел, ничего интересного.
GET /tst.php HTTP/1.1
User-Agent: Opera/9.50 (Windows NT 5.1; U; ru)
Host: ***:8081
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Connection: Keep-Alive, TE
TE: deflate, gzip, chunked, identity, trailers


HTTP/1.1 200 OK
Server: nginx/0.6.31
Date: Sat, 14 Jun 2008 09:31:23 GMT
Content-Type: text/plain
Connection: keep-alive
Last-Modified: Sat, 14 Jun 2008 05:28:09 GMT
ETag: "2ebd60-19415ca50-44f99a8e4cc40"
Accept-Ranges: bytes
Content-Length: 6779423312
[/QOUTE]

Вот сам скрипт

PHP:
<?php
header("Content-Type: video/mpeg");
header("X-Accel-Redirect: /tmp/file");
?>
Вот, нашёл патч как раз для моего случая
http://osdir.com/ml/web.nginx.russian/2006-01/msg00151.html
, расковырял указанный файл (хз, опять же, так ли это нужно делать, или спец софту тот куоск кода кормить надо), нужные строки добавил, собралось, но ничего не изменилось вообще.

Предвидя последующие вопросы скажу — сначала я естественно ставил nginx из портов. Была та же проблема, что и в первом посте.

-~{}~ 24.06.08 22:22:

Вообщем весь гугл перерыл, так ничего и не нашёл. Ап что-ли:)

-~{}~ 25.06.08 14:13:

Вообщем я получил ответ от самого Игоря Сысоева — автора nginx:)

от Igor Sysoev <*@*> скрыть сведения 13:36 (35 мин. назад)
кому C001_ UsEr <*@*>
дата 25.06.2008 13:36
тема Re: nginx, content-type из бэкенда, проблема
- Показать цитируемый текст -
В данном случае Content-Type получается от второго проксируемого сервера.
Должно вылечится добавлением

location /out {
proxy_hide_header Content-Type;

За что ему огромное спасибо! Побольше бы таких людей:) Можно закрывать, всем кто пытался помочь тоже спасибо;)
 
Сверху