LINUX.ORG.RU
ФорумAdmin

Проксирование nginx

 , ,


0

1

Здравствуйте. Не могли бы помочь мне понять как работает proxy_pass

Например есть конфиг

location ~ ^/tv$ {resolver 8.8.8.8; proxy_pass http://url.com:port/tv;}

У меня всё не как не получилась запустить трансляцию тв на сайте с https, вот так получилось, но не пойму как это работает.. Пользователя перекидывает по ссылке, или сервер всю трансляцию качает и отправляет пользователю? а если одновременно несколько вкладок открыть, то сервер одно и тоже как 2 файла качает и отправляет или качает как 1 файл и отправляет на 2 вкладки? не пойму :(


Гонит всё через себя. Для каждого клиента, для каждого соединения.

deep-purple ★★★★★
()
Ответ на: комментарий от Tanger

Всё, теперь поняла, спасибо всем кто помог мне объяснить

jessgt
() автор топика
Ответ на: комментарий от Tanger

Появилось ещё несколько вопросов у меня

#/etc/nginx/nginx.conf:http
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=all:32m max_size=1G; # mkdir /var/cache/nginx
#/etc/nginx/sites-enabled/default.conf:server
location ~ ^/tv$ {
if ($http_cookie ~* ".+" ) {set $do_not_cache 1;}
resolver 8.8.8.8;
proxy_pass http://url.com:port/tv;
proxy_cache all;
proxy_cache_valid 404 502 503 1m;
proxy_cache_valid any 1h;
proxy_ignore_headers Expires Cache-Control Set-Cookie X-Accel-Expires;
proxy_hide_header X-Accel-Expires Expires Cache-Control Pragma;
add_header X-Proxy-Cache $upstream_cache_status;
}

Всё верно я настроила и поняла? Так будет бесконечная чужая трансляция проходить через мой сервер, и кешироваться, чтоб качалась не как 2 файла для 2х вкладок например, а как 1 файл для 2х вкладок?

Вот эта строка там лишняя или нет или другие строки какие то лишние?

if ($http_cookie ~* ".+" ) {set $do_not_cache 1;}

jessgt
() автор топика
Ответ на: комментарий от jessgt

location ~ ^/tv$

Так.. А что там живёт? Если там кто-нибудь лежит m3u, в который добавляются ссылки на мелкие .ts - работать будет. А если поток - нет.

if ($http_cookie ~* ".+" ) {set $do_not_cache 1;}

Эта строчка отключает кеш, если задана любая cookie.

Tanger ★★★★★
()
Ответ на: комментарий от Tanger

Есть ссылка на прямую трансляцию тв канала, трансляция не моя и доступа к серверу нету, ссылка на порту 8008. На сайте отображала трансляцию через плеер VideoJS. Но после смены http на https на сайте, трансляция перестала работать, ошибка «Mixed Content». Сначала пробовала в location ~ ^/tv$ делать редирект на трансляцию, но ошибка сохранилась. Потом я и подумала что проксировать поток через код описанный выше, но раз кеширование так работать не будет и для каждого соединения сервер будет одно и тоже делать, то теперь мне кажется что это плохая идея... Как лучше сделать?

jessgt
() автор топика
Ответ на: комментарий от jessgt

после смены http на https на сайте, трансляция перестала работать, ошибка «Mixed Content»

Почитайте про активное смешанное содержимое.

Скорее всего проблема в том что блокируется необходимый скрипт, скачиваемый по http. Само видео не является активным содержимым и не должно блокироваться. (если не заданы специальные заголовки [CSP, block-all-mixed-content])

Посмотрите в консоли, какой url блокируется с ошибкой «mixed active content».

Tanger ★★★★★
()
Ответ на: комментарий от Tanger

В консоли

Mixed Content: The page at МОЙУРЛ was loaded over HTTPS, but requested an insecure НЕМОЙУРЛ. This request has been blocked; the content must be served over HTTPS.

jessgt
() автор топика
Ответ на: комментарий от Tanger

Ссылка

http://50.7.136.50:8081/kyxhya/index.m3u8?wmsAuthSign=94912f591d89db382ebbb878b5090f92-1537261991-67i771i52i49

Содержимое

#EXTM3U
#EXT-X-ALLOW-CACHE:NO
#EXT-X-TARGETDURATION:7
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:267472
#EXTINF:5.000,
2018/09/18/04/15/41-05000.ts?wmsAuthSign=94912f591d89db382ebbb878b5090f92-1537261991-67i771i52i49
#EXTINF:5.000,
2018/09/18/04/15/46-05000.ts?wmsAuthSign=94912f591d89db382ebbb878b5090f92-1537261991-67i771i52i49
#EXTINF:6.280,
2018/09/18/04/15/51-06280.ts?wmsAuthSign=94912f591d89db382ebbb878b5090f92-1537261991-67i771i52i49
#EXTINF:6.320,
2018/09/18/04/15/58-06320.ts?wmsAuthSign=94912f591d89db382ebbb878b5090f92-1537261991-67i771i52i49

Содержимое файла всё время меняется

jessgt
() автор топика
Ответ на: комментарий от jessgt

Ваш URL не открывается. Пример proxy, который будет кешировать ts, но не будет кешировать m3u8 (т.к. они меняются постоянно).

proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=cache:30m max_size=1G;
...
server {
...
location /video {
	if ( $uri ~* "\.m3u8" ) {
		set $do_not_cache 1;
	}
	proxy_pass https://video-dev.github.io/; # / на конце важен!
	proxy_cache cache;
	proxy_cache_bypass $do_not_cache;
	proxy_cache_valid 404 502 503 1m;
	proxy_cache_valid any 30m;
	proxy_ignore_headers Expires Cache-Control Set-Cookie X-Accel-Expires;
}

Проверить: mplayer http://localhost/video/streams/x36xhzz/x36xhzz.m3u8

if ($http_cookie ~* ".+" ) {set $do_not_cache 1;}

Эта строчка отключает кеш, если задана любая cookie.

В вашем примере выше она не делает ничего, так как нет строки proxy_cache_bypass $do_not_cache;

Tanger ★★★★★
()
Ответ на: комментарий от Tanger

Спасибо Вам большое. Правильно я поняла проксирование это единственный способ обхода ошибки Mixed Content?

jessgt
() автор топика
Ответ на: комментарий от jessgt

Работает?

Правильно я поняла проксирование это единственный способ обхода ошибки Mixed Content?

Мне казалось, что видео по http должно работать и так, так как не является активным контентом, а в консоль должен выкидываться только warning. (но может блокироваться настройками).

Это по информации с MDN. В chrome возможно «закрутили гайки» и по умолчанию блокируется любой mixed content. Тогда да, другого решения вроде не вижу.

Tanger ★★★★★
()
Ответ на: комментарий от Tanger

Работает?

Пока ещё не проверяла

А не подскажите можно ли как нибудь через js поймать ошибку Mixed Content ? Т.е. думаю может быть сделать если не воспроизводится то проксировать через мой сервер, а если воспроизводиться будет не через мой сервер, то продолжать воспроизведение.

Проверила через fetch('http://.....') получаю ошибку Mixed Content Пыталась через try-catch но получаю

TypeError: Failed to fetch

jessgt
() автор топика
Ответ на: комментарий от Tanger

Здравствуйте. Пока на mp4 файле решила проверить, вроде как работает, проигрыватель отображается, но видео не идет... и при открытии ссылки сервер зависает полностью и ssh зависает не 1 команда не выполняется, и сам сайт тоже и спустя минут 5 отвисает и затем при обновлении вкладки - вкладка обновляется и ssh работает, но если ссылку изменить и обновить то сервер опять на несколько минут зависнет. Сервер перед тем как воспроизвести сначала всё видео целеком себе качает?

jessgt
() автор топика
Ответ на: комментарий от Tanger

Попробовала mp4 проксировать без кеширования, не работает ((( статус 206 получаю и ошибку err_spdy_protocol_error и бесконечно пытается загрузить видео, а с кешированием просто сервер ложится и приходится его перезагружать

без кеширования - получаю ошибку err_spdy_protocol_error

location /video {
	proxy_pass http://domain/;
}

с кешированием - получаю зависший сервер

location /video {
	if ( $uri ~* "\.m3u8" ) {
		set $do_not_cache 1;
	}
	proxy_pass http://domain/;
	proxy_cache cache;
	proxy_cache_bypass $do_not_cache;
	proxy_cache_valid 404 502 503 1m;
	proxy_cache_valid any 30m;
	proxy_ignore_headers Expires Cache-Control Set-Cookie X-Accel-Expires;
}

В nginx.conf прописала

proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=cache:30m max_size=1G;

в директории /var/lib/nginx/cache появляются папки «3 5 8 9 a e»

jessgt
() автор топика
Ответ на: комментарий от jessgt

получаю ошибку err_spdy_protocol_error

Место на диске есть?

А url с видео секретный? Я б мог у себя проверить. Если не хочется в публичный доступ выкладывать, можно зашифровать:

echo "http://example.com/" | ((echo "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFuaTNNOWxMZzYxWENjZ1hNMEJacgpncEoxWmNMNFZvdTFGcGVveTFvSXpsNlNQcXhBV2YyWmlZTm9aaldMSE5zSWVaajlFcmJ5cGR4cEtJYjhFTElvClhZVEhFKzNiY3ZFQkRiZ0RLOXdra0JiaC91ajRCOGoxcmFhMG9zT21rZGJEZnIwVmlkdXFhMVh2SmloOUxmbjUKOTJoaTlJd2gyVTVEcUFuRno0VkQwcjVDaFdPcGxaTE9wSFJUTGNRelRETjVXVzhoK3ljTDRvelNuZ3JQL0lKUQpMMjFObE1GVVd0Ti9HODV0YmgrR2E1c0c1UGFkRSs1QlVVSnl0Y2FFMEZGRnRYelFNQStIUFZqdXJ2SkxGT3hiCkZpbGViSG5XUGtESmYrd245Mjc0NG8yZHVSKzYzMjJtZjFPMEt1d0NGMGRWNllIV3k0RUVFMDZORXF0bnJ1ZHYKZHdJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==" | base64 -d > /tmp/lor.pub) ; openssl rsautl -encrypt -pubin -inkey /tmp/lor.pub  | base64 ; rm /tmp/lor.pub)
Tanger ★★★★★
()
Ответ на: комментарий от Tanger

Место на диске есть. Ссылка на видео не секретная ) она просто постоянно меняется и доступна с определенного ip, поэтому тогда распишу как я её получаю.

Открываю эту ссылку https://kodik.cc/get-video?type=seria&hash=2f9c177654fc6c7cf4d2a63690726d... И там беру ссылку например https://get.kodik-cdn.com/tvseries/4c9308f0f3cf0113226960ccee783e2641a9628e/c... Проверяю в браузере работает отлично, но если получить ссылку через свой сервер то уже ссылка действительна только на сервере, вот и вспомнила не попробовать ли данный метод и на этом примере, не получилось (((

jessgt
() автор топика
Ответ на: комментарий от jessgt

Полагаю что у вас проблема в том, что используются разные домены: изначально запрос на kodik.cc, затем переход по ссылке на get.kodik-cdn.com, а оттуда переадресация на astatium.get.kodik-cdn.com.

И совсем простым конфигом такое кажется не получится сделать.

Но, насколько я вижу - по https в данном примере всё работает. Следовательно, если указать https в ссылке, а не http - будет работать без mixed content..

Tanger ★★★★★
()
Ответ на: комментарий от Tanger

Как я поняла та ссылка привязывается к ip и если у тега video указать атрибут src = https:.... то тогда он не будет показыватся ;(

jessgt
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.