Puncte:1

NGNIX impune HTTPS

drapel ph

pentru aplicația mea web (Angular App) folosim NGNIX ca server web. Am o sarcină în care trebuie să mă asigur că toate elementele/imaginile sunt încărcate prin HTTPS.

În instrumentele Browser Dev, văd că cererea este trimisă prin HTTPS. Cu toate acestea, antetul locației răspunsului revine ca o adresă URL HTTP (vezi captura de ecran de mai jos).

captură de ecran din instrumentele de dezvoltare ale browserului

Iată configurațiile actuale NGNIX:

Server {
    asculta 80;
    nume_server gazdă locală;
    root /usr/share/nginx/html;

    # ucide memoria cache
    add_header Ultima modificare $date_gmt;
    add_header Cache-Control 'no-store, no-cache';
    if_modified_since off;
    expiră;
    etag off;

    # Aplicați HSTS
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" întotdeauna;

    # Dezactivează iFrames
    add_header x-frame-options „SAMEORIGIN” întotdeauna;

    # detectează și respinge CRLF
    dacă ($request_uri ~* "%0A|%0D" ) {
      întoarce 400;
    }

    # Revenire la limba implicită dacă nu a fost definită nicio preferință de browser
    if ($accept_language ~ "^$") {
      setați $accept_language "de";
    }

    # Redirecționează „/” către aplicația Angular în limba preferată a browserului
    rescrie ^/$ /$accept_limba permanent;

    if ($uri !~ ^/(en-US|de)) {
      returnează 301 /$accept_language$uri$args;
    }

    # Tot ce se află sub aplicația Angular este întotdeauna redirecționat către Angular în limba corectă
    locație ~ ^/(en-US|de) {
        try_files $uri$args $uri$args/ /$1/index.html;

      # Adăugați anteturi de securitate dintr-un fișier separat
      # include /etc/nginx/security-headers.conf;
    }

    locație / sănătate {
      access_log off;
      returnează 200;
      add_header Content-Type text/plain;
      # Aplicați HSTS
      add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" întotdeauna;
    }
}

Orice ajutor este foarte apreciat. Mulțumiri

drapel in
Blocul de server pentru portul 80 este destul de irelevant aici, trebuie să postați blocul de server pentru portul 443.
drapel ph
@GeraldSchneider Nu avem niciun bloc de server pentru portul 443 - NGNIX trăiește în spatele unui Load Balancer.
Richard Smith avatar
drapel jp
Folosiți [`absolute_redirect off;`](http://nginx.org/en/docs/http/ngx_http_core_module.html#absolute_redirect) sau specificați `https` în mod explicit în instrucțiunile dvs. `rewrite` și `return` așa cum este descris în raspunde mai jos.
Puncte:1
drapel cn

Văd că nginx redirecționează către /en-US/ in cazul tau.

if ($uri !~ ^/(en-US|de)) {
  returnează 301 /$accept_language$uri$args;
}

Presupun că, deoarece comunicarea internă (între LB și nginx) are loc peste http/80, nginx doar redirecționează echilibratorul de încărcare peste http și de aceea vezi http în antetul locației.

Nu sunt sigur dacă fișierele .png sunt de fapt livrate utilizatorului prin http. Puteți accesa fișierele .png direct de pe http? Dacă nu, accesul este livrat de fapt prin https, iar comunicarea http are loc doar intern. Dacă puteți, atunci ar trebui să configurați redirecționarea de la http la https pe partea de echilibrare a încărcăturii.

Dacă doriți să forțați https și intern, aș încerca așa:

returnează 301 https://$host/$accept_language$uri$args;

De asemenea, puteți verifica redirecționare_absolută așa cum a menționat Richard în comentarii.

drapel ph
Mulțumesc pentru răspunsul tău perspicace. Le-am încercat pe toate înainte și, de asemenea, am setat LB să redirecționeze HTTP la HTTPS, care funcționează, de asemenea, bine. Tocmai am făcut o altă descoperire, antetele răspunsurilor au o valoare diferită a locației în mai multe browsere. Chrome: locație: http://host/en-US/assets/images/yammer.png FireFox: locație: https://host/en-US/assets/images/yammer.png Edge: locație: https://host/en-US/assets/images/yammer.png Ai idee ce ar putea cauza acest comportament?
GChuf avatar
drapel cn
Browserele fac o mulțime de lucruri în mod diferit, de la interpretarea css la anteturi... Nu vă pot răspunde la întrebare, de obicei accept doar faptul că diferite browsere se comportă diferit. Dacă puteți confirma (cu curl, de exemplu) că nu vă puteți accesa fișierele prin http și că sunteți redirecționat, nu mi-ar face griji în legătură cu ce spun anteturile.
drapel ph
O buclă se comportă așa cum era de așteptat. Solicitarea HTTP este redirecționată către HTTPS și văd că redirecționarea este făcută de LB. Vă mulțumim pentru sprijinul dumneavoastră până acum.

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.