Проблемы с созданием proxy-CDN

PbIXTOP nginx-forum at nginx.us
Tue Jul 16 02:24:31 UTC 2013


Столкнулся с проблемой.
Имеется программа, которая обновляется используя технологию BITS от
Microsoft.
Поскольку обновляния попадаются большие, решили использовать nginx для
экономии трафика.
Версия nginx, которую возможно поставить на промежуточную машину FreeBSD
8.1, к сожелению не нова:

nginx version: nginx/0.7.67
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_stub_status_module
--with-pcre

Конфигурация достаточно стандартна:

worker_processes  8;
events { worker_connections  1024;}
http {
	include	mime.types;
	default_type	application/octet-stream;
	log_format	main	'$remote_addr - $remote_user [$time_local] "$host"
"$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"
"$http_x_forwarded_for"';
	access_log	/var/log/nginx-access.log	main;
	limit_zone softupdate	$request_uri	10m;
	sendfile	on;
	keepalive_timeout	65;
	server {
		listen 80;
		server_name proxy.cdn;
		default_type  application/octet-stream;
		limit_conn activity_threshold	1024;
		proxy_cache_valid	any	10m;
		proxy_cache_key	$uri$is_args$args;
		location / {
			if ($request_method !~ GET|HEAD) {return 405;}
			open_file_cache	max=1000;
			expires 10d;
			root /var/cache/cdn;
			try_files $uri @softupdate_it;
		}
		location @ms_au_download_it {
			open_file_cache max=1000;
			expires 3M;
			root /var/cache/cdn;
			proxy_set_header Range "";
			proxy_buffering on;
			proxy_ignore_client_abort on;
			limit_conn softupdate 1;
			proxy_store  on;
			proxy_set_header Host "parent.cdn";
    			proxy_set_header If-None-Match "";
    			proxy_set_header If-Modified-Since "";
    			proxy_pass http://127.0.0.1:3128;
		}
	}
}

Как видно при попадании запроса, если файла нет, запрос отправляется дальше
(стоит squid для проверки коректности работы).
Вроде бы все хорошо и настроенно корректо. Но как показывает Squid nginx
вместо одного потока пытается сразу соединяться как просит клиент - 4-10
потоков.
Поэтому строчки 
proxy_set_header Range "";
limit_conn softupdate 1;
были написаны чтоб избежать проблем - 206, при которой не работает
proxy_store, и множественных соеденинений. Но она как была так и осталась.
Пока маленький файл на трафике не так заметно. Но когда пытается скачаться
большой файл. эти несколько потоков убивают весь канал.

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,240884,240884#msg-240884



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