Attached is an nginx configuration file which sets up nginx to be a reverse proxy for the popular Steam Game Distribution platform; essentially creating a local steam cache server. The intent is to allow a large number of gamers to share an inexpensive, and therefore slow, internet connection without having serious problems due to everyone trying to update the same game at the same time (i.e. bandwidth contention issues at LAN parties).

This work is based on the nginx configuration file written for the same purpose by Steven Hartland at Multiplay. However the attached configuration file iterates on the idea in the following ways:

  1. Tweaked for Ubuntu Linux rather than FreeBSD (can be tweaked to work on FreeBSD again of course). Will probably work on Debian without modification.
  2. Will cache steam content other than the main depots, such as the big images and videos used on the store and community pages. Will honour source set expiry dates, privacy flags, etc.
  3. Created a per user bandwidth limit
  4. Blocked crash reports from being sent to valve
  5. Ensured that the correct Host header is always returned

Many thanks to Valve for introducing SteamPipe which makes this possible.

Related Software Websites

  1. Utunbu Server
  2. nginx reverse proxy server


  1. nginx valve steam cache configuration file for ubuntu (text/plain ~ 9 KB)


Extensive testing required – use at your own risk.

The author shall accept no responsibility for any errors, omissions or misleading statements, or for any loss which may arise from reliance on materials contained herein.

There may be links to external Internet sites, and other external Internet sites may link to this website. The author is not responsible for the content of any external Internet sites.

No mention of any organisation, company or individual, whether on these pages or on other sites to which these pages are linked, shall imply any approval or warranty as to the standing and capability of any such organisations, companies or individuals on the part of the author.

21 thoughts on “Valve SteamPipe Reverse Proxy

  1. Thanks for doing this. I tried redoing the FreeBSD config myself on Ubuntu and wasn’t able to get it working, this overall works.

    However, I have to comment out the * block or steam starts in offline mode. The log files on the server said I was getting a 401 error.

  2. I am getting steam offline too after commenting out the * and I get this error in the logs:

    [emerg] 1055#0: invalid parameter “level=1″ in /etc/nginx/nginx.conf:28

    I typed it in exactly as it was in the file. any ideas?

    • Obviously I don’t want to turn my blog in to a technical support forum now.
      Sounds like you may be using a different version, or have a typo someplace. Try updating your copy of nginx and downloading the configuration file (rather than typing it in).

    • I suggest clearing the cache only once you start running out of drive space, and then doing so based on last access time rather than last modified time. If you’ve turned off access time recording on your filesystem (a good idea for higher read performance) then you’ll need to rely on parsing the log files for determining which parts of the cache are worthwhile clearing out.

  3. Pingback: Thank you, Valve

  4. Have you looked back at the original multiplay post lately, they have two updates. One they added content[1-8] as additional content server hosts and two they changed $uri to $request_uri I believe to solve authentication issues. Thoughts on updating your script?
    I am in the process of building a steam cache server for a large LAN, was going to use CentOS since I know it best. Wanted to get the best nginix configuration, and I am torn between the multiplay one and yours.

  5. Pingback: Lan Party – Caching Steam and League of Legends. |

  6. Pingback: LANCache: Caching games downloads/patches. |

  7. Pingback: Thank you, Valve | Lantastic!

  8. Pingback: Steam update server...? Can it be done!?

Leave a reply


<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>