1

Название звучит немного гнусно, но на самом деле это не так.

У меня есть несколько IP-камер в моем доме. Все они имеют возможность обслуживать движущиеся изображения в виде потока multipart-jpeg. Например, если я захожу на http://frontdoor-cam/videostream.cgi я получаю multipart-jpeg, показывающий мое переднее крыльцо.

Прямо сейчас все эти камеры используют базовую аутентификацию HTTP. Нет возможности отключить его.

Я хотел бы иметь веб-страницу, где я мог бы посмотреть на все эти камеры, не вводя n комбинаций идентификаторов пользователей и паролей. Я пробовал встраивать изображения с использованием таких URL-адресов, как http://userid:password@frontdoor-cam/videostream.cgi но Chrome (и, по-видимому, другие браузеры), очевидно, удаляет поддержку этого стиля URL по "соображениям безопасности". (Я предполагаю, что это связано с фишинг-атаками.)

Поэтому я хотел бы, чтобы на моем компьютере с Linux работало программное обеспечение, которое будет выступать в роли посредника. Запрос для http://mylinuxbox/whatever/frontdoor.foo будет выполнять запрос к http://frontdoor-cam/videostream.cgi , передавая учетные данные (которые я бы просто включил в его конфигурацию) и направляя обратно ответ (потоковая передача важна, так как бесконечный поток изображений JPEG отправляется обратно).

Я надеюсь, что что-то уже существует, что может сделать это довольно легко. Программное обеспечение может быть либо чем-то автономным, работающим на собственном порте, либо модулем Apache. (У меня уже работает Apache 2.2 на моей машине.)

2 ответа2

3

Это уточнение ответа Хардида, больше всего на свете. Основываясь на его ответе, вот что я в итоге сделал в моей конфигурации Apache:

LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so

...

<Proxy *>
    Allow from all
</Proxy>

ProxyPassMatch ^/cams/noauth/([-a-z]*)/(.*)$ http://$1-cam/$2

<LocationMatch "/cams/noauth/">
    RequestHeader set Authorization "Basic dXNlcmlkOnBhc3N3ZA=="
</LocationMatch>

Это делает так, что любой запрос к http://mylinuxbox/cams/noauth/LOCATION/WHATEVER обратит прокси к http://LOCATION-cam/WHATEVER , и будет отправлен соответствующий заголовок авторизации.

Одно предостережение, которое я обнаружил во время этого: браузеры обычно имеют ограничение на количество одновременных запросов, которые они отправляют на один хост. С Chrome предел составляет 6. Firefox имеет аналогичный лимит по умолчанию, хотя его можно настроить в about: config. Поскольку все камеры, как представляется, поступают с одного хоста, и поскольку они "транслируются", оставляя соединение открытым, будут отображаться только первые несколько камер на одной странице, а оставшиеся изображения будут блокироваться в ожидании завершения работы других камер. (чего никогда не бывает).

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

3

Что вам нужно, так это обратный прокси, работающий на вашем Linux-компьютере. Затем вы можете получать запросы к прокси-серверу на доступ к камерам, используя http://username:password@domain/ синтаксис. Большинство программного обеспечения веб-сервера можно настроить в качестве обратного прокси-сервера.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .