Puncte:0

Faceți redirecționare nginx către HTTPS chiar și cu expresii regex ale locației concurente

drapel cn

Am următoarea configurație în interiorul unui nginx Server {...} bloc:

locație /o aplicație { 
  dacă ( $https != „pornit” ) { 
    returnează 301 https://$server_name$request_uri;
  } 

  locație ~ \.php$ { 
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php-fpm.sock;
  } 
} 

Problema este că:

  • când accesez http://example.com/someapp/somefile.html (sau doar /o aplicație), sunt redirecționat către HTTPS,
  • dar când accesez http://example.com/someapp/somefile.php, nu sunt redirecționat către HTTPS.

Apropo, acest lucru este în concordanță cu doc, asta spune:

Pentru a găsi locația care se potrivește cu o anumită solicitare, nginx verifică mai întâi locațiile definite folosind șirurile de prefix (locații de prefix). Printre acestea, locația cu cel mai lung prefix care se potrivește este selectată și reținută. Apoi se verifică expresiile regulate, în ordinea apariției lor în fișierul de configurare. Căutarea expresiilor regulate se termină la prima potrivire și este utilizată configurația corespunzătoare. Dacă nu se găsește nicio potrivire cu o expresie regulată, atunci se utilizează configurația locației prefixului amintită mai devreme.

Deci când locație ~ \.php$ este o potrivire, locație /o aplicație este ignorată, chiar dacă cererea este pentru .../someapp/somefile.php.

Având locație ~ \.php$ {...} blocați în afara părintelui locație /o aplicație {...} bloc nu schimbă acest comportament.

Cum pot redirecționa fiecare solicitare HTTP către HTTPS către /o aplicație fără trebuind să dubleze dacă și întoarcere linii în blocul de locație php?

drapel us
Vă rugăm să adăugați configurația nginx completă la întrebare, așa cum este arătat de comanda `nginx -T`.
drapel cn
@TeroKilkanen Nu pot adăuga atât de multe informații din motive de confidențialitate. Totuși, am adăugat câteva fragmente de document nginx, ceea ce face natura problemei mele mai clară, sper.
djdomi avatar
drapel za
totor, te-ai gândit poate să înlocuiești domeniul real sau ips-ul cu example.com?
drapel us
Fără context mai larg, nu este posibil să se propună o soluție bună a problemei.
Puncte:3
drapel za

Sugestia mea ar fi

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

aceasta ar crea un server de bază pentru portul 80 și ar spune browserului să folosească permanent 443

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.