Puncte:0

nginx nu respectă valoarea server_name

drapel in
Server{
    ..
    nume_server some_altul_nume_domeniu.com;
    ..
}

Mi-am mapat numele de domeniu la IP-ul public al VM-ului meu prin godaddy.

Când introduc numele domeniului în browser, atunci acesta poate accesa site-ul web găzduit pe VM (prin nginx). Cu toate acestea, mă așteptam ca cererea să nu fie permisă de nginx, deoarece proprietatea server_name este setată la some_other_domain_name.com

Nginx nu verifică proprietatea server_name?

Richard Smith avatar
drapel jp
Vedeți [cum procesează Nginx o cerere](http://nginx.org/en/docs/http/request_processing.html).
drapel in
Deci server_name este folosit numai atunci când există o ciocnire cu combinația IP:port?
drapel us
`server_name` este întotdeauna folosit. Problema este probabil cu blocul de server implicit, așa cum este explicat mai jos.
Puncte:1
drapel br

Există o explicație bună a modului în care nginx alege blocurile de server și locație pentru a continua cererea pe Digital Ocean Înțelegerea serverului Nginx și a algoritmilor de selectare a blocurilor de locație.

Pe scurt, nginx alege mai întâi cea mai bună potrivire(e) pe baza asculta directive. Și cecuri numele serverului numai dacă există mai multe potriviri. În acest caz, dacă nu există numele serverului meci, atunci va alege Mod implicit bloc. Blocul implicit este fie declarat ca implicit_server în asculta directivă, sau primul.

drapel in
Dacă blocul de server ascultă doar 443 (de exemplu), și acesta este singurul bloc de server, atunci înseamnă că orice solicitare de pe portul 80 nu va fi servită? Sau acest bloc va fi implicit și pentru portul 80?
drapel br
Dacă blocul de server ascultă doar portul 443, acesta nu se va potrivi la primul pas și nu va fi niciodată considerat candidat pentru a servi cererea către portul 80.
drapel in
Dar când nu se găsește niciun bloc de server care se potrivește, atunci nu folosește primul bloc de server, indiferent de ceea ce ascultă primul bloc de server?
drapel br
@variabil, nu. Încă o dată, nginx alege blocul implicit numai în cele care au *cel mai bine* potrivire directivă `ascultă`. Ai aruncat o privire la articol?
drapel in
Da, amice, dar nu mi-am băgat acel punct în cap.
Puncte:0
drapel us

Nu v-ați partajat configurația nginx completă, așa că aceasta este o ghicire a ceea ce lipsește din configurație.

nginx servește întotdeauna ceva pentru fiecare cerere. Dacă nu există Server bloc care are o potrivire numele serverului pentru cerere, nginx folosește implicit Server bloc.

Un implicit Server blocul poate fi blocul unde asculta directiva are implicit_server modificator.

Dacă nu există un astfel de bloc, primul Server bloc este implicit.

În cazul dvs., cred că trebuie să configurați un bloc de server implicit ca acesta:

Server {
    asculta 80 default_server;
    întoarcere 444; # întrerupe conexiunea. Poate fi 404 dacă doriți să returnați HTTP 404 negăsit
}
drapel in
„Dacă nu există un astfel de bloc, primul bloc de server este implicit.” - dar dacă primul bloc de server ascultă doar 443 (de exemplu), atunci înseamnă că toate cererile de pe portul 80 nu vor fi servite?
drapel us
Nu știu, deoarece toate cazurile mele de utilizare necesită ascultarea ambelor porturi 80 și 443.
drapel br
@variable, există un articol bun despre DO https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms

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.