ПРОЕКТЫ 


  АРХИВ 


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: Отдача большого контента через fast_cgi



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


        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 ...;
  }

        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@xxxxxxxx> написал:
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@xxxxxxxx>
написал:
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@xxxxxxxxx> написал:
правильно отгружать в статику и отдавать x-accel-redirect на
сгенерированный
файл.

25.11.2009, в 12:01, Пётр Шевцов написал(а):

Приветствую!

Дано следующее: nginx+fast_cgi+php-fpm. Есть PHP скрипт, который
генерирует и отдаёт контент (pdf). Если размер отдаваемого контента
больше ~3Мб, то файлы получаются битые, то есть отдаётся 3 мегабайта и
всё. Как настроить, чтобы можно было отдавать больше контента?

Спасибо.


--
Best regards,
Andrew A. Kopeyko <kaa@xxxxxxxx>
http://www.zvuki.ru/

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru






--
Best regards,
Andrew A. Kopeyko <kaa@xxxxxxxx>
http://www.zvuki.ru/

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.