Closed fhibler closed 7 years ago
Seems I got it working. Has to be changed from http_range to http_slice. Then caching works just as expected. I'll post it in the pull request.
it is working for me Origin.
note my setup I have a self signed ssl for the domain
computer one downloaded a game and on another computer two downloaded the same game and pulled all contact from the cash.
if you like i can send you my current configs.
[image: Inline image 1]
server { listen lancache-origin deferred default; servername origin ;
access_log /srv/lancache/logs/lancache-origin-access.log main buffer=128k flush=1m;
error_log /srv/lancache/logs/lancache-origin-error.log;
# Origin Node
include lancache/resolver;
location / {
# Currently Origin: * Blocks caching so we have to ignore Expires and Cache-Control. * Puts sauth=<authkey> in the query string so we use $uri
# instead of $request_uri
# in the cache key. * Uses a single archive file with range requests and refuses requests to download the entire file. To combat this we
#pass-through the Range headers and include the range to the cache key and allow caching of 206 responses. Eproxy_ignore_headers Expires
#Cache-Control; proxy_set_header Range $http_range; proxy_set_header If-Range $http_if_range; proxy_cache_key "$server_name$uri $http_range";
#proxy_cache_valid 206 90d; proxy_read_timeout 150;
# Use Origin cache proxy_cache origin; include lancache/proxy-cache;
# Request Slicing
set $no_cache ""; if ($request_uri ~* "/(Origin-Client-Download/origin/live/)") { set $no_cache "1"; } proxy_no_cache $no_cache; proxy_cache_bypass $no_cache;
# Supported in nginx 1.9.8
slice 1m;
# Cache Location
proxy_cache origin;
# Cache Settings
proxy_bind x.x.x.x;
proxy_ignore_headers Expires Cache-Control;
proxy_cache_key $uri$slice_range;
proxy_cache_valid 200 206 120d;
proxy_set_header Range $slice_range;
# Use proxy_cache method
include lancache/proxy-cache;
#include lancache/proxy-pass;
}
}
The slice config indeed was the fix. This was not in the Repo yet thou :)
@nexusofdoom I see you are excluding the client from caching. Is that really a good idea or would it be better to set a value of 3h or so before revalidating? The client can also easily have 100+M.
what would you have me change and test out?
@nexusofdoom I am just wondering if it makes sense to have some kind of "short term caching with revalidation" for the clients. What's your opinion on it?
the client still has issue updating with my config so off and on I download the full installer to get it updated. the game files cache works fine its just the client does not update I have to update manually
I see ... the origin client downloader uses https, which I actually route through sniproxy, so it's not being cached anyways. Just confirmed this with a tcpdump.
@nexusofdoom @fhibler updated the conf of Origin; if any other fixes you see; please feel free to post here. Haven't really had the time to further test / improve the LC but any help is always welcome :-)
Hi, I managed to get lancache up and running without using the lc-installer (currently working on an updated version and will add a pull request soon to incorporate all the changes).
I was able to test it successfully in the following setup:
I was able to verify that it worked for Steam, Blizzard and Microsoft. Unfortunately we haven't used anything else during our small lan party.
For Origin it seems to be a bit different. nginx was able to cache the files correctly, but if another client downloads the same game it caches everything again instead of serving it from the cache. I wonder if the issue belongs to the ?sauth= argument Origin adds to each download. I already checked the nginx config, but that one seems to use the correct argument for proxy_cache_key ($uri instead of $request_uri).
Any ideas?