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

Peter A. Shevtsov mera на mera.com.ru
Чт Ноя 26 11:30:13 MSK 2009


26 ноября 2009 г. 14:05 пользователь Andrew Kopeyko <kaa at zvuki.ru> написал:
> 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;
>
> Да вы, батенька, извращенец!
>
> Сделайте нескольки виртуальный серверов, например
>  server {
>    listen 80 default;
>    server_name fake.default.host;
>    return 444;
>  }
>  server {
>    listen 80;
>    server_name mera.com.ru www.mera.com.ru ; # и все прочие ваши имена
>    ...;
>  }
> и вы избавитесь от ужасающей логики
>         if ($host ~* www\.(.*)) {
>                 set $host_without_www $1;
>                 rewrite ^(.*)$ http://$host_without_www$1 permanent;
>         }
>         if ($host !~* www\.(.*)) {
>                 set $host_without_www $host;
>         }
>

Ужасающая логика нужна, чтобы был редирект с www.domain.tld на
domain.tld и логи создавались вида domain.access.log. Или можно как-то
изящнее это изобразить?

>>
>>        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;
>>                }
>>        }
>
> добавьте
>  location /files/ {
>    internal;
>    root ...;
>  }
>

А root тут куда вести должен? По запросу
myblog.tld/files/file_name.ext идёт рерайт на blogs.php который уже
делает x-accel-redirect на /blogs.dir/$myblog_id/files/file_name.ext

>>        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
>>>
>>
>>
>>
>
>
> --
> 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