diff --git a/6.Nginx/vhost_mediaserver-msuser.conf b/6.Nginx/vhost_mediaserver-msuser.conf
index 6460466d0ce2b60e0b9a66f02294bfdb0ecf5d02..692427aded5b969a479cef456023a191a755f1f1 100644
--- a/6.Nginx/vhost_mediaserver-msuser.conf
+++ b/6.Nginx/vhost_mediaserver-msuser.conf
@@ -1,3 +1,6 @@
+# for a 20 Mbits/s stream, we want to keep maybe 10s of video, 40 streams means 1 GB
+proxy_cache_path /tmp levels=1:2 keys_zone=livecache:10m max_size=2g inactive=30s;
+
 geo $msuser_whitelist {
 	default 0;
 	127.0.0.1 1;
@@ -54,8 +57,30 @@ server {
 		add_header Pragma public;
 		add_header Cache-Control "public";
 	}
-	location /streaming/ {
-		proxy_pass http://localhost:1935/live/;
+	location ~ ^/streaming/.*\.m3u8.*$ {
+			rewrite ^/streaming/(.*)$ /live/$1 break;
+			proxy_pass http://localhost:1935;
+			proxy_cache livecache;
+			proxy_cache_lock on;
+			expires -1;
+			proxy_cache_min_uses 1;
+			proxy_cache_valid 200 1s;
+			add_header X-Cache $upstream_cache_status;
+			add_header Access-Control-Allow-Origin "*";
+			proxy_cache_key $scheme$proxy_host$uri;
+			proxy_cache_use_stale updating;
+	}
+	location ~ /streaming/.*\.(ts).*$ {
+			rewrite ^/streaming/(.*)$ /live/$1 break;
+			proxy_pass http://localhost:1935;
+			proxy_cache livecache;
+			proxy_cache_lock on;
+			expires 2s;
+			proxy_cache_min_uses 1;
+			proxy_cache_valid 200 10s;
+			add_header X-Cache $upstream_cache_status;
+			add_header Access-Control-Allow-Origin "*";
+			proxy_cache_key $scheme$proxy_host$uri;
 	}
 	location / {
 		uwsgi_pass unix:///home/msuser/mstmp/uwsgi.sock;