ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: nginx отдает неправильный хе дер Content-Type


  • To: nginx-ru@xxxxxxxxx
  • Subject: Re: nginx отдает неправильный хе дер Content-Type
  • From: Sergey Shepelev <temotor@xxxxxxxxx>
  • Date: Thu, 29 Oct 2009 08:20:31 +0300
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=f/6TtkkywxnLEhMk097cK4l82Yad+xGl+geCaPQvTXg=; b=Ihiw8ihKBD4KfgfUx1OmULXTezV/C05q0RznvdzkBMNCb+SKSou3asZrNafqvT6Xka GvlJKe+UZlQBOS1ev87kPqyN0NplfhmO61MIN51h2HUAQ5cKIP1OU9vNtPTb+6dIMemP B4UWf7rJfRDrDmsx6dCu460GD+0KAx4ZyM4+0=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; b=YvYzItlGpAoIAsTnxvPXGCy8c23hk1tWiRSkWuEfDDergQw648MwVDY1yp0QZiZc+3 D0f+EocOYA3nFDIDyJ1OFbMdUsF0exyrCua6db+NhESQC9stmOnTbLZ7oA830lTyhlbC /1zXOKUKzm1OfqNGVOX/4vfGQ4J/BcWmccYX0=
  • In-reply-to: <4AE8DE9E.6060905@xxxxxxx>
  • References: <4AE89D20.4030105@xxxxxxx> <2d8fb9950910281611j1265db6bg5800ea7a22034d39@xxxxxxxxxxxxxx> <4AE8DE9E.6060905@xxxxxxx>

2009/10/29 Станислав <server_inc@xxxxxxx>:
> Sergey Shepelev пишет:
>>
>> 2009/10/28 Станислав <server_inc@xxxxxxx>:
>>
>>>
>>> Здравствуйте!
>>> Вот недавно столкнулся с проблемой...
>>>
>>> Linux Gentoo
>>>
>>> $ nginx -V
>>> nginx version: nginx/0.7.62
>>> configure arguments: --prefix=/usr --conf-path=/etc/nginx/nginx.conf
>>> --http-log-path=/var/log/nginx/access_log
>>> --error-log-path=/var/log/nginx/error_log --pid-path=/var/run/nginx.pid
>>> --http-client-body-temp-path=/var/tmp/nginx/client
>>> --http-proxy-temp-path=/var/tmp/nginx/proxy
>>> --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --with-md5-asm
>>> --with-md5=/usr/include --with-sha1-asm --with-sha1=/usr/include
>>> --with-http_realip_module --with-http_flv_module --with-http_ssl_module
>>> --with-http_perl_module --with-http_stub_status_module
>>>
>>> есть директория /forum/style_images/
>>>
>>> изначально все прекрасно...
>>> говорю энджинксу превед
>>> GET /forum/style_images/css_2.css HTTP/1.0
>>> ........
>>> отвечает нормально
>>> HTTP/1.1 200 OK
>>> Server: nginx
>>> Date: Wed, 28 Oct 2009 19:16:36 GMT
>>> Content-Type: text/css
>>> Content-Length: 31730
>>> Last-Modified: Sat, 18 Apr 2009 09:48:59 GMT
>>> Connection: close
>>> Accept-Ranges: bytes
>>>
>>> решил дать права энджинксу на запись этой директории... пускай люди
>>> грузят
>>> туда картинки и файлы стилей через админку...
>>> но предварительно убрав выполнения фэст-цги скриптов ... ибо ну нафиг
>>>
>>> location ^~ /forum/style_images/ {
>>>          root   /var/www/blahblah.ru;
>>>          types {
>>>              text/plain php php3 php4 php5 phtml phps pl pm;
>>>          }
>>>      }
>>>
>>>
>>
>> Вы не "убрали выполнение FastCGI скриптов", а попытались заставить
>> nginx отдавать файлы с определёнными расширениями с неправильным
>> content-type text/plain.
>>
>> FastCGI скрипты тем и отличаются от CGI скриптов, что их "выполняет"
>> не вебсервер, а какой-то внешний скрипт. Это не апач. nginx не
>> запускает CGI скрипты. FastCGI скрипты не запускает никто, кроме вас,
>> админа, который должен настроить запуск spawn-fcgi, php-fpm или
>> другого спавнера.
>>
>> Наверное, у вас есть локейшн типа
>>
>> location ~ \.php { fastcgi_pass ... }
>>
>> который, является локейшном по регекспу.
>> И указанный выше локейшн
>>
>> location ^~ /forum/style_images/ {
>>   root   /var/www/blahblah.ru;
>> }
>>
>> Он просто отработает первым и до регекспа не дойдёт дело. Не нужно
>> никаких приседаний, извращающих content-type.
>>
>> Если php вы обрабатываете как-то иначе, давайте посмотрим ваш конфиг.
>>
>>
>>>
>>> и тут пдыщ......
>>> вот что мне энджинкс ответил
>>>
>>> HTTP/1.1 200 OK
>>> Server: nginx
>>> Date: Wed, 28 Oct 2009 19:21:31 GMT
>>> Content-Type: application/octet-stream
>>> Content-Length: 31730
>>> Last-Modified: Sat, 18 Apr 2009 09:48:59 GMT
>>> Connection: close
>>> Accept-Ranges: bytes
>>>
>>> в mime.types четко написано
>>> .....
>>> text/css                              css;
>>> .....
>>> application/octet-stream              bin exe dll;
>>> application/octet-stream              deb;
>>> application/octet-stream              dmg;
>>> application/octet-stream              eot;
>>> application/octet-stream              iso img;
>>> application/octet-stream              msi msp msm;
>>> ......
>>> nginx.conf
>>> ....
>>> http {
>>>      include         /etc/nginx/mime.types;
>>>      default_type    application/octet-stream;
>>> ....
>>>
>>> из-за неправильного ответа, Лиса вообще не загружает файлы стиля...
>>> матерится.... говорит :
>>> "Ошибка: Таблица стилей http://...../forum/style_images/css_2.css не была
>>> загружена, потому что её MIME-тип (?application/octet-stream?) не
>>> ?text/css?."
>>> Оперу и IE8.0 вроде как все устраивает... видимо они пофигистически
>>> относится к неправильному заголовку...
>>>
>>> собственно вопросик... это баг или фича?
>>>
>>>
>>>
>>>
>>>
>>>
>
> Эхх... спасибо большое, что направили на верный путь... и чего это меня
> потянуло делать тексплеин... наверное старая привычка со времен апача...
>
> обработка файлов с расширением php так:
>
> location ~ \.php$ {
>            limit_req zone=qghsdubphp burst=1;
>            fastcgi_pass   unix:/var/run/php-fpm.sock;
>            fastcgi_param  SCRIPT_FILENAME
>  /var/www/блабла.ru$fastcgi_script_name;
>            include        /etc/nginx/fastcgi_params;
>       }
> перечитал несколько раз
> http://sysoev.ru/nginx/docs/http/ngx_http_fastcgi_module.html не понял, а
> как собственно выключить обработку...
>
> т.е.
>
> location ~ ^/forum/style_images/.+\.php$ {
>  root   /var/www/blahblah.ru;
> }

И опять апач. Нет никакой обработки. Не надо "выключать обработку".
Почему конфиг nginx так приятно писать, так это потому, что он больше
всего напоминает программу, а директивы location - функции-обработчики
запросов. Не знаю насколько это корректно учитывая внутренности, но
мне удобно думать о локейшонах, как о колбеках, в которые попадает
управление, когда URI совпадает с определённой маской.
Надо сделать так, чтоб запрос не попал в локейшн с fastcgi_pass. И
дальше перечитайте мой первый совет.
(здесь, для удобства)

Указанный выше локейшн

location ^~ /forum/style_images/ {
  root   /var/www/blahblah.ru;
}

просто отработает первым и до регекспа не дойдёт дело. Не нужно
никаких приседаний.

location ^~ это текстовый поиск совпадения, который запрещает проверку
регекспов в случае успеха. То есть, если URI начинается с
/forum/style_images/, то в регексповый локейшн \.php$ управление уже
не попадёт.
Вы ведь даже именно ^~ использовали, а не просто location
/forum/style_images/. Я думал, вы не просто так это сделали.
Оказалось, случайность.


 




Copyright © Lexa Software, 1996-2009.