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