proxy_ignore_client_abort + internal location

Dmytro Sychevsky dmytrosychevsky на gmail.com
Пн Янв 25 12:44:59 MSK 2010


Есть nginx который должен забирать с бэкэндов видео отдавать
пользователю и параллельно ложить это видео в локальный кэш - все это
реализовано на основе proxy_store (что бы можно было использовать flv
и mp4 модули) - все настроено и просто прекрастно работает и вот
захотелось бы ко всему этому счастью прикрутить X-Accel-Redirect -
прикрутил и вылезла одна неприятная вещь - если location помечен как
internal то proxy_ignore_client_abort совсем неработает - те тогда
когда отваливается медленный клиент файл перестает тянуться из бэкенда
- если internal убрать то все работает как часы - это баг или фича ?

пример конфига

 server {

        ..skiped..

                proxy_buffering                 on;
                proxy_ignore_client_abort       on;
                proxy_intercept_errors          on;


                location /video {
                        root   /path/toroot
                        index  index.html index.htm index.php;
                        if (!-e $request_filename) {
                                rewrite ^/video(.*)$ /index.php?$1 last;
                        }
                }

                location ~ \.php$ {

                        fastcgi_pass   fcgihost.com;
                        fastcgi_index  index.php;

                        fastcgi_param  SCRIPT_FILENAME
path/to/script/$fastcgi_script_name;
                        include         fastcgi_params;

                }

                location ~^\/vc(.+)\.m4v$ {

#                        internal;
                        try_files      $uri  @hdfs_fetch;

                        root                 /path/to/cache;
                        mp4;

                        limit_rate_after  1M;
                        limit_rate        48k;

                        location ~^\/vc(.+)\/1\.m4v$ {
#                                       internal;
                                       mp4;
                                       try_files      $uri  @hdfs_fetch;
                                       limit_rate_after 4M;
                                       limit_rate       350k;
                        }

                        location ~^\/vc(.+)\/2\.m4v$ {
#                                       internal;
                                       mp4;
                                       try_files      $uri  @hdfs_fetch;
                                       limit_rate_after 2M;
                                       limit_rate       96k;
                        }


                }



                location @hdfs_fetch {
                                       internal;

                                       proxy_pass
http://hadoop_HDFS$uri;
                                       proxy_store          on;
                                       proxy_store_access   user:rw
group:rw  all:r;
                                       proxy_temp_path      /path/to/cache;

                                       root                 /path/to/cache;;
               }
}

nginx version: nginx/0.8.32
configure arguments: --prefix=/usr/local/etc/nginx --with-cc-opt='-I
/usr/local/include' --with-ld-opt='-L /usr/local/lib'
--conf-path=/usr/local/etc/nginx/nginx.conf
--sbin-path=/usr/local/sbin/nginx --pid-path=/var/run/nginx.pid
--error-log-path=/var/log/nginx-error.log --user=www --group=www
--http-client-body-temp-path=/var/tmp/nginx/client_body_temp
--http-proxy-temp-path=/var/tmp/nginx/proxy_temp
--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi_temp
--http-log-path=/var/log/nginx-access.log --with-http_flv_module
--with-http_gzip_static_module
--add-module=/usr/ports/www/nginx/work/nginx_mod_h264_streaming-2.2.7
--with-http_realip_module --with-http_stub_status_module --with-pcre

----------------------------------------------------------------------

Dmytro Sychevsky


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