Ce face return
Directiva return oprește imediat procesarea cererii și trimite răspunsul către client. Nu evaluează nicio expresie regulată, deci este mai simplă și mai rapidă decât rewrite ori de câte ori nu ai nevoie să transformi calea cu grupuri regex.
Pentru redirecționări (codurile 301, 302, 303, 307, 308), al doilea argument este interpretat ca URL pentru antetul Location. Dacă scrii doar un URL care începe cu http:// sau https:// fără cod, Nginx folosește implicit codul 302 (redirecționare temporară).
Pentru alte coduri (200, 403, 404, 503), al doilea argument opțional este chiar corpul răspunsului (util pentru un /healthz rapid sau un mesaj scurt). Codul nestandard 444 este specific Nginx: închide conexiunea TCP fără a trimite niciun octet clientului.
Opțiuni și argumente
| Opțiune / Parametru | Descriere |
|---|---|
Context: server, location, if |
Poate fi pus direct în server (de exemplu pentru redirecționarea întregului domeniu) sau în location. |
301 URL |
Redirecționare permanentă (Moved Permanently); browserele și motoarele de căutare o memorează. |
302 URL |
Redirecționare temporară (Found); utilă în teste sau pentru pagini temporare. |
307 / 308 URL |
Redirecționare temporară (307) sau permanentă (308) care păstrează obligatoriu metoda HTTP și corpul cererii (de exemplu POST rămâne POST). |
200 "text" |
Trimite un răspuns 200 cu textul dat. |
444 |
Cod intern Nginx: închide conexiunea imediat, fără antete HTTP. |
Exemple
Exemplul 1: Redirecționarea www către domeniul fără www
Un bloc server separat este mai curat și mai rapid decât un if ($host = ...):
server {
listen 80;
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
return 301 https://example.com$request_uri;
}
Exemplul 2: Endpoint /healthz direct din Nginx, fără backend
Util pentru verificările de sănătate ale unui load balancer:
location = /healthz {
access_log off;
default_type text/plain;
return 200 "ok\n";
}
Exemplul 3: Redirecționarea unei pagini vechi către una nouă
Potrivire exactă cu location = și return 301:
location = /contact.html {
return 301 /despre-noi/contact/;
}
Greșeli frecvente
- Folosirea
$uriîn loc de$request_uriîn redirecționări:$urinu conține șirul de interogare (?id=10) și este deja decodat;$request_uripăstrează exact calea și parametrii trimiși de client. - Testarea redirecționărilor cu
301în browser: browserul memorează agresiv un 301 și nu mai întreabă serverul chiar dacă ai schimbat configurația. Testează cu302sau cucurl -I, și pune301la final. - Folosirea
301/302pentru un API care primește cereriPOST: multe clienți transformăPOSTînGETla redirecționare; folosește308(permanent) sau307(temporar).
Comenzi înrudite
rewrite: Modifică URI-ul cererii pe baza unei expresii regulate, pentru redirecționări externe sau rescrieri interne.Redirecționare HTTP → HTTPS: Tiparul recomandat pentru redirecționarea traficului de pe portul 80 pe HTTPS (și canonizarea cu sau fără www).server_name: Stabilește numele de domeniu (antetul Host) pentru care răspunde un bloc server.location: Potrivește calea URI a cererii (exact, cu prefix sau cu expresie regulată) și aplică regulile corespunzătoare.
Întrebări & Exemple de Cod:
returnAi o nelămurire despre utilizarea comenzii
returnsau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.