Ce face internal
Un location marcat cu internal; răspunde cu 404 Not Found la cererile venite direct de la client. Este folosit doar când Nginx ajunge acolo singur: printr-un error_page, index, try_files, rewrite, o subcerere (auth_request) sau antetul X-Accel-Redirect trimis de aplicație.
Cazul cel mai util este descărcarea protejată: aplicația PHP verifică dacă utilizatorul are dreptul la fișier și răspunde doar cu antetul X-Accel-Redirect: /protejat/factura.pdf. Nginx trimite apoi fișierul eficient, iar adresa /protejat/ nu poate fi accesată direct.
Nginx limitează redirecționările interne la 10 pentru o cerere, ca să evite buclele infinite (eroarea rewrite or internal redirection cycle).
Parametri
| Parametru | Descriere |
|---|---|
Context |
location. |
Fără argumente |
Directiva nu primește valori. |
Ce returnează
404 pentru cererile externe; conținutul normal pentru redirecționările interne.
Exemple
Exemplul 1: Descărcări verificate de PHP (X-Accel-Redirect)
Fișierele stau în afara directorului public. PHP verifică dreptul și îi spune lui Nginx ce fișier să trimită.
# configurația Nginx
location /protejat/ {
internal;
alias /var/www/facturi/;
}
# descarca.php
<?php
if (!utilizator_are_acces($_GET['id'])) {
http_response_code(403);
exit;
}
header('Content-Type: application/pdf');
header('X-Accel-Redirect: /protejat/factura-1042.pdf');
Exemplul 2: Cerere directă față de cerere prin aplicație
curl -I https://exemplu.ro/protejat/factura-1042.pdf
curl -I -b sesiune=ana https://exemplu.ro/descarca.php?id=1042
Ieșire în terminal
HTTP/2 404
server: nginx
content-type: text/html
HTTP/2 200
server: nginx
content-type: application/pdf
content-length: 84512
Exemplul 3: Pagini de eroare care nu pot fi deschise direct
error_page 404 /erori/404.html;
location /erori/ {
internal;
root /var/www/exemplu.ro;
}
Greșeli frecvente
- Pui
internalpe unlocationfolosit și de linkurile din pagini: vizitatorii primesc 404. - Folosești
X-Accel-Redirectcu calea reală de pe disc (/var/www/facturi/...). Antetul primește un URI, care trebuie să se potrivească unuilocationdin Nginx.