Welcome! Log In Create A New Profile

Advanced

Question: http video streaming and nginx ram usage

March 06, 2011 10:02AM
Hi everyone,

I'm using Nginx to forward incoming http requests (from the Internet) to an Aviosys 9100A+ (low-cost) IP video server.


My Nginx 0.7.64 runs on a small embedded linux device under OpenWRT - the device has only 13 MB of
free ram when nginx is loaded. The user's http requests get forwarded to nginx on the OpenWRT box, and nginx
reverse proxies the requests on to the video server over LAN.

The job of nginx is to prevent people on the Internet from changing the settings of the video server via the http interface - only viewing of the streams should be allowed! Therefore, nginx acts as a reverse-proxy and forwards only the allowed URL on to the server. So the viewers of the stream cannot change the video server's settings via the web interface, because my nginx config does not forward the "banned" URLs.

It is OK for me for now that e.g. 3 simultaneous viewers consume 3 times the bandwidth.

[ Just if you are wondering : It is not possible to set a password on the video server, since I can only disable authentication altogether. It is a low-cost device and configuration options are very limited. ]


Now here is where I get stuck:

This video server transfers the images to the viewing person's web browser in one long http response in real-time.

As I wrote, In my setup, I reverse-proxy only the allowed URLs (i.e. the ones to "get the video") on to the video server with nginx. This works fine, but nginx seems to buffer the http data that it forwards locally. So while viewing the video stream, nginx consumes more and more RAM until the little linux device crashes.

However, if I stop viewing the stream after 1 or 2 minutes, before RAM runs out, the memory gets freed again.
I believe it frees the ram because the request is finished.

On a Linux PC server, it all works perfectly. But in order to save electricity, I would like to use the small linux device.

Has anyone got a hint for me what I could do to stop nginx from keeping the long request in RAM (this is what I think what happens, at least)?

Any help would be greatly appreciated!




Here is my nginx.conf. 192.168.3.46 Is the IP of the video server.

user root;
worker_processes 1;

#access_log off;
error_log off;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;


events {
worker_connections 10;
}


http {
include mime.types;
default_type application/octet-stream;

#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';

#access_log logs/access.log main;

sendfile on;
#tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 65;

proxy_buffering off;
proxy_buffer_size 4k;
proxy_buffers 10 4k;
proxy_max_temp_file_size 0;

client_body_buffer_size 4k;
client_header_buffer_size 1k;
client_max_body_size 4k;
large_client_header_buffers 1 1k;



#gzip on;

server {
listen 80;
server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

# location / {
# root html;
# index index.html index.htm;
# }


location /GetStatus.cgi?JsVar=sStatus {
proxy_buffering off;
proxy_ignore_client_abort off;
proxy_intercept_errors on;
proxy_next_upstream error timeout invalid_header;
proxy_redirect off;
proxy_set_header X-Host $http_host;
# proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_pass http://192.168.3.46/GetStatus.cgi?JsVar=sStatus;
}
location /Simple/home.htm?IMG {
proxy_buffering off;
proxy_ignore_client_abort off;
proxy_intercept_errors on;
proxy_next_upstream error timeout invalid_header;
proxy_redirect off;
proxy_set_header X-Host $http_host;
# proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_pass http://192.168.3.46/Simple/home.htm?IMG;
}
location /Simple/home.htm?ATV {
proxy_buffering off;
proxy_ignore_client_abort off;
proxy_intercept_errors on;
proxy_next_upstream error timeout invalid_header;
proxy_redirect off;
proxy_set_header X-Host $http_host;
# proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_pass http://192.168.3.46/Simple/home.htm?IMG;
}


location /Simple/core.jar {
proxy_buffering off;
proxy_ignore_client_abort off;
proxy_intercept_errors on;
proxy_next_upstream error timeout invalid_header;
proxy_redirect off;
proxy_set_header X-Host $http_host;
# proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_pass http://192.168.3.46:80;
}


location /Simple/home.htm {
proxy_buffering off;
proxy_ignore_client_abort off;
proxy_intercept_errors on;
proxy_next_upstream error timeout invalid_header;
proxy_redirect off;
proxy_set_header X-Host $http_host;
# proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_pass http://192.168.3.46/Simple/home.htm;
}


location /GetData.cgi {
proxy_buffering off;
proxy_ignore_client_abort off;
proxy_intercept_errors on;
proxy_next_upstream error timeout invalid_header;
proxy_redirect off;
proxy_set_header X-Host $http_host;
# proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_pass http://192.168.3.46/GetData.cgi;
}

location /GetStatus.cgi {
proxy_buffering off;
proxy_ignore_client_abort off;
proxy_intercept_errors on;
proxy_next_upstream error timeout invalid_header;
proxy_redirect off;
proxy_set_header X-Host $http_host;
# proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_pass http://192.168.3.46/GetStatus.cgi;
}



location /Jpeg/ {
proxy_buffering off;
proxy_ignore_client_abort off;
proxy_intercept_errors on;
proxy_next_upstream error timeout invalid_header;
proxy_redirect off;
proxy_set_header X-Host $http_host;
# proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_pass http://192.168.3.46/Jpeg/;
}

location /Simple/WinWebLite.cab {
proxy_buffering off;
proxy_ignore_client_abort off;
proxy_intercept_errors on;
proxy_next_upstream error timeout invalid_header;
proxy_redirect off;
proxy_set_header X-Host $http_host;
# proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_pass http://192.168.3.46/Simple/WinWebLite.cab;
}
location /Simple/bg1.jpg {
proxy_buffering off;
proxy_ignore_client_abort off;
proxy_intercept_errors on;
proxy_next_upstream error timeout invalid_header;
proxy_redirect off;
proxy_set_header X-Host $http_host;
# proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_pass http://192.168.3.46/Simple/bg1.jpg;
}


location /html/favicon.ico {
proxy_buffering off;
proxy_ignore_client_abort off;
proxy_intercept_errors on;
proxy_next_upstream error timeout invalid_header;
proxy_redirect off;
proxy_set_header X-Host $http_host;
# proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_pass http://192.168.3.46/html/favicon.ico;
}



location /simple_load.swf {
proxy_buffering off;
proxy_ignore_client_abort off;
proxy_intercept_errors on;
proxy_next_upstream error timeout invalid_header;
proxy_redirect off;
proxy_set_header X-Host $http_host;
# proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_pass http://192.168.3.46/simple_load.swf;
}



# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}


}

}
Subject Author Posted

Question: http video streaming and nginx ram usage

birdy March 06, 2011 10:02AM

Re: Question: http video streaming and nginx ram usage

Francis Daly March 08, 2011 05:38PM

Re: Question: http video streaming and nginx ram usage

Maxim Dounin March 09, 2011 06:58AM

Re: Question: http video streaming and nginx ram usage

birdy March 10, 2011 12:02PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 55
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready