Puncte:2

Proxy invers pentru camera IP

drapel it

Folosesc o cameră Amcrest care necesită autentificare de bază pentru a-și reda fluxul (documentație - pagina 17). Camera este accesată prin intermediul http://admin:password@IP_CAMERA/cgi-bin/mjpg/video.cgi .

Când încerc să lovesc :56700, mi se solicită autentificare chiar dacă este codificată (mai jos). Chiar și atunci când introduc acreditările corecte, nu reușește. ce fac greșit?

    Server {
        asculta 56700;
        Locație / {
            proxy_set_header Gazdă $gazdă;
            proxy_set_header X-Real-IP $adresă_la distanță;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://IP_CAMERA/cgi-bin/mjpg/video.cgi;
            proxy_set_header Autorizare „XXX de bază”;
        }
    }

Am incercat si eu sa adaug proxy_pass_header Autorizare; așa cum este descris Aici.

CrazyTux avatar
drapel in
Cred că ați amestecat sintaxa `rtsp` cu sintaxa `http`, încercați `http:///cgi-bin/realmonitor.cgi?action=getStream&channel=&subtip=` pentru `http` și apoi autentificați-vă cu numele de utilizator și parola SAU utilizați `rtsp` cu `VLC` cu această sintaxă `rtsp://:@:/cam/realmonitor?channel=&subtip=`
Kermit avatar
drapel it
@CrazyTux Pot accesa adresa URL de mai sus în browser-ul meu fără nicio problemă
Puncte:2
drapel us

După cum s-a spus mai sus, poate fi rezolvată prin

proxy_set_header Autorizare „Basic dXNlcjpwYXNzd29yZA==";

Unde dXNlcjpwYXNzd29yZA== este rezultatul comenzii: echo -n „utilizator:parolă” | baza64

Presupun că ai încercat deja asta

oricum, cred că locația corectă va arăta

Locație / {
    proxy_set_header Gazdă $gazdă;
    proxy_set_header X-Real-IP $adresă_la distanță;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://IP_CAMERA;
    proxy_set_header Autorizare „Basic dXNlcjpwYXNzd29yZA==";
    proxy_set_header Autorizare „$http_authorization de bază”; # Pentru modul interactiv
}

fără /cgi-bin/mjpg/video.cgi deoarece va trece la browser sau pe partea clientului http

SAU Dacă nu funcționează pentru tine, poate fi legat de acest caz https://stackoverflow.com/questions/14839712/nginx-reverse-proxy-passthrough-basic-authenication

Dacă Camera are unele verificări de tărâm, puteți cunoaște tărâmul așteptat prin Instrumentele dezvoltatorului, la fila Antete - secțiunea Antete de răspuns.

Dar va trebui să compilați nginx cu headers-more-nginx-module

O poți face cu acest script

cd /usr/src
NGINXFILE=$(wget -qO- http://nginx.org/en/download.html | tr ' ' '\n' | egrep -o 'nginx.+?tar.gz' | head -1)
wget http://nginx.org/download/${NGINXFILE}
tar zxvf ${NGINXFILE}
cd ${NGINXFILE%.*.*}

cp -r /etc/nginx /root/nginx_$(data +%F) #Fă backup configurațiilor curente nginx

cd /usr/src
clona git https://github.com/openresty/headers-more-nginx-module.git

./configure --add-module=/usr/src/headers-more-nginx-module --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/ lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/ nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/ nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/ var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with -threads --cu-http_addition_module --cu-http_auth_request_module --cu-http_dav_module --cu-http_flv_module --cu-http_gunzip_module --cu-http_gzip_static_module --cu-http_mp4_module --cu-index-modul-http_lip --cu-modul-http_random -http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_s tub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' - -with-ld-opt='-Wl,-z,relro -Wl,-z,acum -pie'
face
face instalarea

odată ce ați terminat, puteți încerca o astfel de configurație:

Locație / {
  proxy_http_versiunea 1.1;
  proxy_pass_request_headers activat;
  proxy_set_header Gazdă $gazdă;
  proxy_set_header X-Real-IP $adresă_la distanță;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  more_set_input_headers 'Autorizare: dXNlcjpwYXNzd29yZA=='; 
  #more_set_input_headers 'Autorizare: $http_authorization'; # Pentru modul interactiv
  proxy_set_header Acceptare-Codificare „”;

  proxy_pass http://IP_CAMERA;
  proxy_redirect implicit;
  more_set_headers -s 401 'www-authenticate: Basic realm="Autentificare necesară"';
}

Unde www-authenticate: domeniul de bază = "Autentificare necesară" datele dvs. reale ale acestui antet

Am verificat ambele cazuri, la mine funcționează, l-am testat pe o aplicație cu balon personalizat. Din păcate, nu am o astfel de cameră pentru depanare personală

Puncte:1
drapel cl

Editați cu soluția specifică Amcrest

La un moment dat (în jurul anului 2017?) Amcrest a lansat o actualizare de firmware care a eliminat autentificarea de bază de la camerele lor IP, lăsând Digest Authentication ca singura opțiune.

Acest răspuns Stack Overflow poate fi cea mai bună opțiune pentru a elimina autentificarea Digest așa cum doriți, folosind FastCGI și nginx.

Ori asta sau poate puteți găsi o modalitate de a downgrade firmware-ul camerei dvs. pentru a accepta din nou autentificarea de bază.


Răspuns anterior

Codați în Base64 numele de utilizator și parola cu două puncte între ele?

Pentru Autentificare de bază HTTP, va trebui să faceți următoarele:

proxy_set_header Autorizare „XXX de bază”;

Inlocuieste xxx cu Base64(<nume utilizator>:<parolă>). Adică, găsiți-vă un codificator Base-64, introduceți numele de utilizator, două puncte literale (:) și parola și înlocuiți-l pe xxx cu şirul rezultat.

De exemplu, dacă numele de utilizator este admin, iar parola este vânător2, am putea rula următoarele la un prompt Bash:

printf %s 'admin:hunter2' | baza64

și puneți șirul rezultat în antet astfel:

proxy_set_header Autorizare „Basic YWRtaW46aHVudGVyMg==";

Kermit avatar
drapel it
Numele de utilizator și parola sunt codificate Base64 cu `:`, da.
Puncte:0
drapel ne

Împușcat în întuneric

Știu că uneori, dacă permisiunile pentru fișiere nu sunt setate corect, puteți obține o casetă de conectare care, în unele cazuri, este pentru nivelul de permisiuni pentru fișiere și nu pentru nivelul de conexiune, dacă acest lucru are sens. Poate că asta se întâmplă este un fel de problemă cu permisiunea fișierelor la capătul serverului web? Puteți ajunge cu două acreditări diferite, una bazată pe conexiune/serviciu și apoi cu una de nivel de fișier dacă conexiunea/serviciul nu are permisiunea de fișier.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.