Puncte:3

De ce nginx returnează codul de stare 301 când încearcă să deschidă un director?

drapel zm

Încerc să înțeleg cum funcționează Nginx. Acum lucrez la index și try_files directive. Fișierul meu de configurare este acesta:

evenimente {}
http {
  rewrite_log on;
  error_log /var/log/nginx/localhost.error_log depanare;

  Server {
    root /app;
    asculta 8080;
    index index.html;
    Locație / {
      try_files $uri $uri/ =404;
    }
  }
}

De asemenea /app/ directorul arborescent este:

/app
|-- abcd.html
|-- fisier.php
|-- index.html
|-- index.php
|-- sss
| `-- index.html
|-- style.css
`-- thumb.png

Când încerc să deschid localhost:8080 totul funcționează conform așteptărilor. Se folosește mai întâi Locație / context. Apoi foloseste $uri/ pentru a citi directorul rădăcină. Apoi, deoarece numele fișierului index a fost specificat, folosește fișierul index în acel director. De asemenea, fișierul jurnal poate arăta că:

...
2021/10/27 11:37:49 [depanare] 1297#1297: *1 locație de testare: „/”
2021/10/27 11:37:49 [depanare] 1297#1297: *1 folosind configurația „/”
...
2021/10/27 11:37:49 [depanare] 1297#1297: *1 fază generică: 12
2021/10/27 11:37:49 [depanare] 1297#1297: *1 încercați gestionarea fișierelor
2021/10/27 11:37:49 [depanare] 1297#1297: *1 var script http: "/"
2021/10/27 11:37:49 [depanare] 1297#1297: *1 încercând să utilizeze fișierul: "/" "/app/"
2021/10/27 11:37:49 [depanare] 1297#1297: *1 var script http: "/"
2021/10/27 11:37:49 [depanare] 1297#1297: *1 încearcă să folosească dir: "/" "/app/"
2021/10/27 11:37:49 [depanare] 1297#1297: *1 încercați fișierul uri: "/"
2021/10/27 11:37:49 [depanare] 1297#1297: *1 fază generică: 13
2021/10/27 11:37:49 [depanare] 1297#1297: *1 fază de conținut: 14
2021/10/27 11:37:49 [depanare] 1297#1297: *1 index deschis „/app/index.html”
2021/10/27 11:37:49 [depanare] 1297#1297: *1 redirecționare internă: „/index.html?”
...

Dar când deschid localhost:8080/sss, Mai întâi răspunde cu o redirecționare către localhost:8080/sss/, apoi deschide fișierul index în interiorul sss/ director. Iată jurnalele:

2021/10/27 11:46:07 [depanare] 1297#1297: *3 locație de testare: „/”
2021/10/27 11:46:07 [depanare] 1297#1297: *3 folosind configurația „/”
2021/10/27 11:46:07 [depanare] 1297#1297: *3 http cl:-1 max:1048576
27/10/2021 11:46:07 [depanare] 1297#1297: *3 faza de rescriere: 3
2021/10/27 11:46:07 [depanare] 1297#1297: *3 faza post-rescriere: 4
2021/10/27 11:46:07 [depanare] 1297#1297: *3 faza generică: 5
...
2021/10/27 11:46:07 [depanare] 1297#1297: *3 încercați gestionarea fișierelor
2021/10/27 11:46:07 [depanare] 1297#1297: *3 http script var: "/sss"
2021/10/27 11:46:07 [depanare] 1297#1297: *3 încercând să utilizeze fișierul: „/sss” „/app/sss”
2021/10/27 11:46:07 [depanare] 1297#1297: *3 http script var: "/sss"
2021/10/27 11:46:07 [depanare] 1297#1297: *3 încercând să utilizeze dir: „/sss” „/app/sss”
2021/10/27 11:46:07 [depanare] 1297#1297: *3 încercați fișierul uri: „/sss”
2021/10/27 11:46:07 [depanare] 1297#1297: *3 fază generică: 13
27/10/2021 11:46:07 [depanare] 1297#1297: *3 fază de conținut: 14
...
2021/10/27 11:46:07 [depanare] 1297#1297: *3 fază de conținut: 18
2021/10/27 11:46:07 [depanare] 1297#1297: *3 http nume de fișier: „/app/sss”
2021/10/27 11:46:07 [depanare] 1297#1297: *3 adăugați curățare: 000055AA4A146290
2021/10/27 11:46:07 [depanare] 1297#1297: *3 http fd static: -1
2021/10/27 11:46:07 [depanare] 1297#1297: *3 http dir
2021/10/27 11:46:07 [depanare] 1297#1297: *3 Solicitare de finalizare http: 301, "/sss?" a:1, c:1
2021/10/27 11:46:07 [depanare] 1297#1297: *3 răspuns special http: 301, "/sss?"
2021/10/27 11:46:07 [depanare] 1297#1297: *3 http set pentru eliminarea corpului
...

De ce nu a răspuns cu fișierul index din interiorul sss/ director, la fel ca directorul rădăcină, fără redirecționare externă?

Puncte:3
drapel jp

The $uri/ termen pe a try_files declarația funcționează în același mod ca și comportamentul implicit Nginx.

Dacă furnizați un URI fără un traseu / care indică un director, Nginx va adăuga mai întâi o sfârșit / folosind o redirecționare externă (de ex. 301).

Dacă furnizați un URI cu un traseu / care indică un director, the index directiva va fi invocată și poate genera o redirecționare internă către orice fișier specificat (de ex. index.html).

Cu toate că documentatia este clar că o urmă / este cerut de către index directivă. Nu pot găsi unde este documentat comportamentul anterior.

drapel zm
Deci, de ce nu i se răspunde la prima solicitare cu redirecționare externă, chiar dacă nu are următorul `/`? adică `localhost:8080`. De asemenea, în contextul locației, am specificat să încerc un fișier cu `/` adăugat.
Richard Smith avatar
drapel jp
Are un `/` final. Bara de adrese a browserului dvs. v-o ascunde, dar serverul primește URI-ul ca `GET /` - vedeți jurnalul de acces.

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.