Отдача большого контента через fast_cgi

Peter A. Shevtsov mera на mera.com.ru
Пт Ноя 27 12:58:18 MSK 2009


Ругается на строчку server_name  ~^www\.(?<name>.+)$;
[emerg]: pcre_compile() failed: unrecognized character after (?< in
"^www\.(?<name>.+)$" at "name>.+)$" in
/etc/nginx/conf.d/virtual.conf:7
configuration file /etc/nginx/nginx.conf test failed


26 ноября 2009 г. 23:22 пользователь Igor Sysoev <igor at sysoev.ru> написал:
> On Thu, Nov 26, 2009 at 12:54:43PM +0600, Peter A. Shevtsov wrote:
>
>> server {
>>         if ($host ~* www\.(.*)) {
>>                 set $host_without_www $1;
>>                 rewrite ^(.*)$ http://$host_without_www$1 permanent;
>>         }
>>
>>         if ($host !~* www\.(.*)) {
>>                 set $host_without_www $host;
>>         }
>>
>>         if ($host !~*
>> ^(mera.com.ru|www.mera.com.ru|m3ra.ru|www.m3ra.ru|mhra.ru|www.mhra.ru|mhera.ru|www.mhera.ru|time-to-live.net.ru|www.time-to-live.net.ru|dotu.ru|www.dotu.ru)$
>> ) {
>>                 return 444;
>>         }
>>
>>         access_log  /var/log/nginx/$host_without_www.access.log main;
>>         error_log   /var/log/nginx/wpmu.error.log info;
>>
>>         root         /var/www/html/default;
>>         limit_conn   myzone  5;
>>         listen       80;
>>         server_name  mera.com.ru www.mera.com.ru m3ra.ru www.m3ra.ru
>> mhra.ru www.mhra.ru mhera.ru www.mhera.ru time-to-live.net.ru
>> www.time-to-live.net.ru dotu.ru www.dotu.ru;
>>         client_max_body_size 40m;
>
> Вышеприведённый кошмар нужно заменить на элегантное
>
> error_log    /var/log/nginx/wpmu.error.log info;
>
> server {
>      listen  80;
>      server_name  _;
>      return   444;
> }
>
> server {
>      listen 80;
>      server_name  ~^www\.(?<name>.+)$;
>      rewrite   ^  http://$name$request_uri? permanent;
>
>      # медленно
>      access_log   /var/log/nginx/$name.access.log main;
>      # нужен для лога с переменными
>      root         /var/www/html/default;
> }
>
> server {
>      listent 80;
>      server_name  mera.com.ru ...;
>
>      location / {
>      ...
> }
>
> Нужно понимать, что логи с переменнымии - это зло: при запросе
> www.чего.то.там создаётся /var/log/nginx/чего.то.там.access.log.
> Единственный способ это контролировать - через существование root'а
> /var/www/html/default/чего.то.там. Лучше же создать кучу серверов с
> нормальными логами.
>
>>         location / {
>>                 index  index.php;
>>                 rewrite ^.*/files/(.*) /wp-content/blogs.php?file=$1;
>>                 if (!-e $request_filename) {
>>                         rewrite ^.+?(/wp-.*) $1 last;
>>                         rewrite ^.+?(/.*\.php)$ $1 last;
>>                         rewrite ^ /index.php last;
>>                 }
>>         }
>
> Это не работает: /files/чего-то-там переписывается в
> /wp-content/blogs.php?file=чего-то-там, а потом проверяется существование
> /var/www/html/default/wp-content/blogs.php, а не /files/чего-то-там.
>
> location /files/ {
>     try_files  $uri   /wp-content/blogs.php?file=$uri;
> }
>
> Скрипт должен возвразать что-то вроде
>     "X-Accel-Redirect: /protected/чего-то-там"
>
> location /protected/ {
>     internal;
>     alias  /var/www/html/default/files/;
> }
>
>>         location = /favicon.ico {
>>                 return 204;
>>         }
>>
>>         location ~ \.php$ {
>>             include fastcgi_params;
>>             fastcgi_pass   unix:/var/lib/php/php-fpm.sock;
>>             fastcgi_index  index.php;
>>             fastcgi_read_timeout 600;
>>             fastcgi_intercept_errors on;
>>         }
>>
>>         # deny access to .htaccess files, if Apache's document root
>>         # concurs with nginx's one
>>         #
>>         location ~ /\.ht {
>>             deny  all;
>>         }
>> }
>>
>> 25 ноября 2009 г. 18:54 пользователь Andrew Kopeyko <kaa at zvuki.ru> написал:
>> > Peter A. Shevtsov wrote:
>> >>
>> >> В конфиге следующее:
>> >> location / {
>> >>    index  index.php;
>> >>    rewrite ^.*/files/(.*) /wp-content/blogs.php?file=$1;
>> >>    if (!-e $request_filename) {
>> >>        rewrite ^.+?(/wp-.*) $1 last;
>> >>        rewrite ^.+?(/.*\.php)$ $1 last;
>> >>        rewrite ^ /index.php last;
>> >>    }
>> >> }
>> >
>> > Подозреваю, что это далеко не весь конфиг - в приведённом куске нет никаких
>> > намёков на упоминаемый вами fast-cgi.
>> >
>> > Пожалуйста, приведите полный конфиг виртуального сервера.
>> >
>> >> Скрипт /wp-content/blogs.php раздаёт файлы из директории
>> >> wp-content/blogs.dir/
>> >>
>> >> Для кого надо писать отдельный location, чтобы отдавать x-accel-redirect?
>> >
>> > Повторюсь - запросы на
>> >  /files/19970604_Proses_mirivozzrencheskix_transformatsiy.pdf
>> > не должны уходить на upstream
>> >  "fastcgi://unix:/var/lib/php/php-fpm.sock:",
>> >
>> >
>> >> 25 ноября 2009 г. 18:24 пользователь Andrew Kopeyko <kaa at zvuki.ru>
>> >> написал:
>> >>>
>> >>> On Wed, 25 Nov 2009, Peter A. Shevtsov wrote:
>> >>>
>> >>>> В предыдущем письме я не точно выразился. Скрипт не генерит файл, а
>> >>>> отдаеёт его через readfile(); Если это важно, то скрипт - blogs.php из
>> >>>> Wordpress MU для раздачи файлов. И он даже сам может посылать
>> >>>> заголовок x-accel-redirect. Но после "переключения" на
>> >>>> x-accel-redirect получаю ошибки:
>> >>>>
>> >>>> 2009/11/25 14:58:52 [error] 3989#0: *222 rewrite or internal
>> >>>> redirection cycle while processing "/wp-content/blogs.php", client:
>> >>>> 65.55.106.232, server: mera.com.ru, request: "GET
>> >>>> /files/19970604_Proses_mirivozzrencheskix_transformatsiy.pdf
>> >>>> HTTP/1.0", upstream: "fastcgi://unix:/var/lib/php/php-fpm.sock:",
>> >>>> host: "dotu.ru"
>> >>>
>> >>> Вероятно, и вас
>> >>>  /files/19970604_Proses_mirivozzrencheskix_transformatsiy.pdf
>> >>> тоже проксируется на fast-cgi.
>> >>> А для того, чтобы работал x-accel-redirect, оно должно отдаваться
>> >>> локально.
>> >>>
>> >>> Вам надо описать отдельный location для отдаваемых через x-accel-redirect
>> >>> файлов - и наступит вам счастье.
>> >>>
>> >>>
>> >>> 25 ноября 2009 г. 15:15 пользователь Alexandr Kutuzov
>> >>> <alleteam at gmail.com> написал:
>> >>>>
>> >>>> правильно отгружать в статику и отдавать x-accel-redirect на
>> >>>> сгенерированный
>> >>>> файл.
>> >>>>
>> >>>> 25.11.2009, в 12:01, Пётр Шевцов написал(а):
>> >>>>
>> >>>>> Приветствую!
>> >>>>>
>> >>>>> Дано следующее: nginx+fast_cgi+php-fpm. Есть PHP скрипт, который
>> >>>>> генерирует и отдаёт контент (pdf). Если размер отдаваемого контента
>> >>>>> больше ~3Мб, то файлы получаются битые, то есть отдаётся 3 мегабайта и
>> >>>>> всё. Как настроить, чтобы можно было отдавать больше контента?
>> >>>>>
>> >>>>> Спасибо.
>> >>>>>
>> >
>> >
>> > --
>> > Best regards,
>> > Andrew A. Kopeyko <kaa at zvuki.ru>
>> > http://www.zvuki.ru/
>> >
>> > _______________________________________________
>> > nginx-ru mailing list
>> > nginx-ru at nginx.org
>> > http://nginx.org/mailman/listinfo/nginx-ru
>> >
>>
>>
>>
>> --
>> Пётр Шевцов
>> _______________________________________________
>> nginx-ru mailing list
>> nginx-ru at nginx.org
>> http://nginx.org/mailman/listinfo/nginx-ru
>
> --
> Игорь Сысоев
> http://sysoev.ru
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru at nginx.org
> http://nginx.org/mailman/listinfo/nginx-ru
>



-- 
Пётр Шевцов


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