Кэширование обратного прокси Steam stream

В настоящее время я использую nginx для кэширования загрузок Steam для моей локальной сети, как описано в Multiplay. Это прекрасно работает, но в Steam есть функция просмотра игр других пользователей через поток, не похожий на Twitch, но по запросу. У меня проблемы с прокси-сервером, который не может кэшировать поток. Я не против (и, возможно, это предпочтительнее) не кэшировать этот контент, но я не могу понять это, поскольку я новичок в nginx.

Удаляемый сервер valve#.cs.steampowered.com и все ищут под /broadcast/... Вот пример запроса и ответа:

GET /broadcast/2671935884594669886/manifest/94/?broadcast_origin=br02.broadcast.iad.steamstatic.com:80&viewer=10502638835558921467 HTTP/1.1
Host: valve65.cs.steampowered.com
Accept: application/json, text/javascript, */*; q=0.01
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-CA,en;q=0.8,en-US;q=0.6
Origin: http://steamcommunity.com
Referer: http://steamcommunity.com/broadcast/watch/76561198065147403
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36

HTTP/1.1 404 Not Found
Connection: keep-alive
Content-Length: 570
Content-Type: text/html
Date: Sun, 07 Feb 2016 03:15:58 GMT
Server: nginx/1.6.2

Вот пример запроса и ответа с трафиком, перенаправленным с прокси:

GET /broadcast/1432112925536035508/manifest/94/?broadcast_origin=valve66.broadcast.sea.steamstatic.com:80&viewer=10502638835558921467 HTTP/1.1
Host: valve63.cs.steampowered.com
Accept: */*
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-CA,en;q=0.8,en-US;q=0.6
Origin: http://steamcommunity.com
Referer: http://steamcommunity.com/broadcast/watch/76561198015566908
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36

HTTP/1.1 200 OK
Access-Control-Allow-Headers: 
Access-Control-Allow-Methods: GET,HEAD,OPTIONS
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: Date
cache-control: no-cache,must-revalidate
content-length: 2621
content-type: application/xml
Date: Sun, 07 Feb 2016 03:25:20 GMT
expires: Mon, 26 Jul 1997 05:00:00 GMT

expires выглядит смешно (1997?), но no-cache установлено. Соответствующие конфиги, которые я использую, можно найти на моем GitHub с node-steam быть соответствующим используемым.

Я попытался добавить следующее без удачи (раньше location /):

location /broadcast/ {
    proxy_cache_bypass $arg_nocache;
    proxy_no_cache $arg_nocache;
}

Что я могу сделать, чтобы обойти прокси-запросы?

Изменить: Вот еще несколько подробностей о реальной проблеме. Я использую nginx в качестве обратного прокси для кеширования загрузок Steam, которые приходят из *.cs.steampowered.com и это работает нормально. Steam также имеет функцию трансляции, где пользователи могут смотреть, как другие играют в свои игры в прямом эфире. Здесь их список. Когда вы пытаетесь просмотреть один из них, трансляция будет сидеть там неограниченно долго, но чат и остальная часть страницы будут загружены. Обход nginx снимает эту проблему.

Посмотрев на запросы в прямом эфире, я вижу, что любые запросы *.cs.steampowered.com/broadcast/ вернуть 404-е. Здесь есть некоторое досадное совпадение между серверами контента и серверами вещания. Там нет правил для location / так что я бы подумал, что они все равно будут проходить через прокси.

1 ответ

Решение

Было несколько вещей, происходящих. location / был кеширован, что изначально привлекло трафик.

Добавление следующих правил сработало, но только после очистки изначально использованного кеша по какой-то причине мне все еще предстоит выяснить.

location /broadcast/ {
    # Proxy
    proxy_next_upstream error timeout http_404;
    proxy_pass http://$host$request_uri;
    proxy_redirect off;

    # Upstream request headers
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    # Useful headers for debugging / stats
    add_header X-Upstream-Status $upstream_status;
    add_header X-Upstream-Response-Time $upstream_response_time;
    add_header X-Upstream-Cache-Status $upstream_cache_status;

    # New settings - 2014-04-12 (i52)
    proxy_ignore_client_abort on;

    # Increase proxy timeout to increase throughput
    proxy_read_timeout 300;
}

Содержимое этого расположения аналогично тому, как я работаю с прокси везде.

Другие вопросы по тегам