Puncte:0

Buclă de redirecționare fără sfârșit pe configurația nginx

drapel cn

Am o configurație nginx cu SSL configurat și două redirecționări către containerul docker. Unul din ei (Editați | × https://psono.example.com/portal) funcționează, dar cel care transmite domeniul în sine (Editați | × https://psono.example.com/) nu funcționează și, în schimb, duce la o redirecționare fără sfârșit (https://psono.example.com/psono.example.com/psono.example.com/psono.example.com/psono.example.com/...)

Aceasta este configurația mea.

Server {
    asculta 80;
    nume_server pson.example.com;
    returnează 301 https://$host$request_uri;
}

Server {
    asculta 443 ssl http2;
    nume_server pson.example.com;    
    ssl_protocols TLSv1.2;
    ssl_prefer_server_ciphers activat;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;
    ssl_capsare activată;
    ssl_stapling_verify on;
    ssl_session_timeout 1d;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;
    ssl_ciphers '';

    # Comentează asta dacă știi ce faci
    # add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

    add_header Referrer-Policy same-origin;
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";

    # Dacă aveți și serverul de fișiere admin instalat în spatele acestui domeniu proxy invers, adăugați adresa URL a serverului de fișiere, de ex. https://fs01.example.com și ca connect-src:
    add_header Content-Security-Policy "default-src 'none'; manifest-src 'self'; connect-src 'self' https://static.psono.com https://api.pwnedpasswords.com https://storage .googleapis.com https://*.digitaloceanspaces.com https://*.blob.core.windows.net https://*.s3.amazonaws.com; font-src „self”; img-src „self” ' data:; script-src 'self'; style-src 'self' 'unsafe-inline'; object-src 'self'";

    ssl_certificate /etc/letsencrypt/live/psono.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/psono.example.com/privkey.pem;

    client_max_body_size 256m;

    gzip on;
    gzip_disable „msie6”;
    
gzip_vary on;
    gzip_proxied orice;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_versiunea 1.1;
    gzip_min_length 256;
    gzip_types text/plain text/css application/json application/x-javascript application/javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image /svg+xml imagine/x-icoana;
    
    rădăcină /var/www/html;
    
    locație /server {
                rescrie ^/server/(.*) /$1 pauză;
                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_set_header X-Forwarded-Proto $schema;

        add_header Ultima modificare $date_gmt;
        add_header Pragma „fără cache”;
        add_header Cache-Control "privat, max-age=0, no-cache, no-store";
        if_modified_since off;
        expiră;
        etag off;
    
                proxy_pass http://localhost:10100;
    }
    
    locație ~* ^/portal.*\.(?:ico|css|js|gif|jpe?g|png|eot|woff|woff2|ttf|svg|otf)$ {
        expiră 30d;
        add_header Pragma public;
        add_header Cache-Control „public”;

        # Eliminați primul # din rândurile următoare dacă aveți clientul web administrativ care rulează într-un container docker
        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_set_header X-Forwarded-Proto $schema;

        proxy_pass http://localhost:10102;
        proxy_redirect http://localhost:10102 https://psono.example.com;
    }
 locație ~* \.(?:ico|css|js|gif|jpe?g|png|eot|woff|woff2|ttf|svg|otf)$ {
        expiră 30d;
        add_header Pragma public;
        add_header Cache-Control „public”;
    
        # Eliminați primul # din rândurile următoare dacă aveți clientul web care rulează într-un container docker
        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_set_header X-Forwarded-Proto $schema;

        proxy_pass http://localhost:10101;
        proxy_redirect http://localhost:10101 https://psono.example.com;
    }
    
    # Eliminați primul # din rândurile următoare dacă aveți clientul web administrativ care rulează într-un container docker
     locație /portal {
                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_set_header X-Forwarded-Proto $schema;

                proxy_read_timeout 90;

                proxy_pass http://localhost:10102;
     }
    
    # Eliminați primul # din rândurile următoare dacă clientul web administrativ NU rulează într-un container docker
    # locație /portal {
    # index index.html index.htm;
    # try_files $uri /portal/index.html; # trimite toate cererile către index.html
    # }
    
    # Eliminați primul # din rândurile următoare dacă aveți clientul web care rulează într-un container docker
    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_set_header X-Forwarded-Proto $schema;

                proxy_pass http://localhost:10101;
                proxy_read_timeout 90;
        #
                proxy_redirect http://localhost:10101 https://psono.example.com;
    }
}

Editați | × Ieșirea curl -v este:


* Încercând 5.9.74.183:443...
* TCP_NODELAY setat
* Conectat la pson.example.com (5.9.74.183) portul 443 (#0)
* ALPN, oferind h2
* ALPN, oferind http/1.1
* setați cu succes locațiile de verificare a certificatelor:
* CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), strângere de mână TLS, salut client (1):
* TLSv1.3 (IN), strângere de mână TLS, salut server (2):
* TLSv1.2 (IN), strângere de mână TLS, Certificat (11):
* TLSv1.2 (IN), strângere de mână TLS, schimb de chei de server (12):
* TLSv1.2 (IN), TLS handshake, Server terminat (14):
* TLSv1.2 (OUT), TLS handshake, Schimb cheie client (16):
* TLSv1.2 (OUT), TLS schimbă cifra, Schimbă specificația cifrului (1):
* TLSv1.2 (OUT), TLS handshake, Terminat (20):
* TLSv1.2 (IN), strângere de mână TLS, Terminat (20):
* Conexiune SSL folosind TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server acceptat să utilizeze h2
* Certificat de server:
* subiect: CN=psono.example.com
* data începerii: 1 decembrie 14:53:24 2021 GMT
* data expirării: 1 martie 14:53:23 2022 GMT
* subjectAltName: gazda „psono.example.com” a corespuns cu „psono.example.com” a certificatului
* emitent: C=US; O=Let's Encrypt; CN=R3
* Verificare certificat SSL ok.
* Utilizând HTTP2, serverul acceptă utilizarea multiplă
* Starea conexiunii a fost schimbată (HTTP/2 confirmat)
* Copierea datelor HTTP/2 din bufferul de flux în bufferul de conexiune după actualizare: len=0
* Folosind ID-ul fluxului: 1 (mâner ușor 0x557ac8936e10)
> GET / HTTP/2
> Gazdă: psono.example.com
> user-agent: curl/7.68.0
> accept: */*
>
* Starea conexiunii a fost schimbată (MAX_CONCURRENT_STREAMS == 128)!
< HTTP/2 403
< server: nginx/1.18.0 (Ubuntu)
< data: Joi, 02 Dec 2021 06:53:11 GMT
< tipul de conținut: text/html
< lungimea conținutului: 162
<
<html>
<head><title>403 Interzis</title></head>
<corp>
<center><h1>403 Interzis</h1></center>
<hr><center>nginx/1.18.0 (Ubuntu)</center>
</corp>
</html>

drapel us
Care este adresa URL care declanșează bucla de redirecționare? Care este rezultatul `curl -v` pentru acea adresă URL?
drapel cn
@TeroKilkanen Mi-am actualizat întrebarea.
drapel us
Trebuie să furnizați acreditările de autentificare HTTP cu `-u :` opțiune în curl pentru a obține rezultate utile.
drapel cn
Folosind autentificarea obțin același rezultat, de asemenea, pagina principală nu ar trebui să necesite autentificare în sine, ci să afișeze o pagină de conectare.
drapel us
Exemplul dvs. nu are o redirecționare, deci nu poate provoca o buclă de redirecționare. Afișează „403 Interzis”, ceea ce înseamnă că nu au fost transmise acreditările adecvate la cerere.
drapel cn
Știu, teoretic asta aș spune dacă aș fi în locul tău. Am mai încercat câteva și se dovedește că aceasta este o problemă specifică doar acestui browser de pe mașina mea, folosind un browser diferit sau același browser pe o altă mașină, pot accesa pagina de pornire fără o buclă de redirecționare. Am mai încercat câteva și am șters complet cookie-urile din domeniu și acum pot accesa pagina de start, pare a fi o problemă specifică aplicației. Îți mulțumesc că te-ai uitat la asta.
Puncte:1
drapel cn

Se pare că aceasta nu este o problemă nginx, ci o problemă legată de psono. M-am autentificat mai întâi la pagina /portal, acest lucru a setat niște cookie-uri și apoi nu m-am mai putut autentifica în pagina principală /, rezultând în bucla de redirecționare. Ștergerea cookie-urilor pentru domeniu îmi permite să mă autent la pagina principală. Am deschis o problemă la psonos pentru asta: https://gitlab.com/psono/psono-server/-/issues/212

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.