listen în Nginx

Blocuri de bază Toate versiunile; http2 on din 1.25.1

Stabilește adresa IP și portul pe care un bloc server acceptă conexiuni.

Sintaxă
listen [adresă:]port [default_server] [ssl] [quic] [reuseport] [backlog=număr];

Ce face listen

Directiva listen spune pe ce adresă și port ascultă blocul server. Dacă lipsește, valoarea implicită este *:80 (sau *:8000 când Nginx rulează fără root). Adresele IPv6 se scriu între paranteze drepte: [::]:80.

Pentru HTTPS se folosește listen 443 ssl;. Începând cu Nginx 1.25.1, HTTP/2 se activează cu directiva separată http2 on;; vechiul parametru listen 443 ssl http2; încă funcționează, dar generează un avertisment de depreciere. HTTP/3 se activează din 1.25.0 cu listen 443 quic reuseport;, dacă Nginx este compilat cu modulul http_v3.

Parametrul default_server marchează blocul care primește cererile pentru care niciun server_name nu se potrivește. Parametrii care țin de socket (default_server, reuseport, backlog, ipv6only) pot fi specificați o singură dată pentru fiecare combinație adresă:port.

Opțiuni și argumente

Opțiune / Parametru Descriere
Context: server Directiva se folosește doar în blocul server.
adresă:port De exemplu 80, 127.0.0.1:8080, [::]:443 sau unix:/run/nginx.sock.
default_server Blocul implicit pentru această adresă și acest port.
ssl Toate conexiunile pe acest port folosesc TLS (necesită ssl_certificate).
quic Ascultă HTTP/3 peste QUIC (UDP), din Nginx 1.25.0.
reuseport Creează un socket separat pentru fiecare worker (performanță mai bună; necesar pentru QUIC).
http2 on; Directivă separată (1.25.1+), context http, server: activează HTTP/2. Înlocuiește parametrul depreciat listen ... http2.

Exemple

Exemplul 1: HTTP și HTTPS cu HTTP/2 (Nginx 1.25.1+)

Forma modernă, fără avertismente de depreciere:

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;
    server_name example.com;

    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    root /var/www/example.com/public;
}

Exemplul 2: Avertismentul pentru forma veche

Pe Nginx 1.25.1+, listen 443 ssl http2; funcționează, dar nginx -t afișează:

sudo nginx -t

Ieșire în terminal

nginx: [warn] the "listen ... http2" directive is deprecated, use the "http2" directive instead in /etc/nginx/sites-enabled/example.com:2
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Exemplul 3: Aplicație internă disponibilă doar local

Ascultând pe 127.0.0.1, blocul nu este accesibil din exterior:

server {
    listen 127.0.0.1:8080;
    server_name localhost;

    location /nginx_status {
        stub_status;
    }
}

Greșeli frecvente

  • Specificarea default_server pe același port în două blocuri: nginx -t eșuează cu [emerg] a duplicate default server for 0.0.0.0:80.
  • Uitarea liniei listen [::]:80;: site-ul nu răspunde clienților care se conectează prin IPv6, deși DNS-ul are înregistrare AAAA.
  • Folosirea listen 443; fără ssl: Nginx servește HTTP simplu pe portul 443, iar browserele raportează ERR_SSL_PROTOCOL_ERROR.

Comenzi înrudite

  • server: Definește un server virtual (un site) cu porturile, numele de domeniu și regulile sale.
  • ssl_certificate și HTTPS: Configurează certificatul, cheia privată, versiunile TLS (1.2/1.3) și cache-ul de sesiuni pentru HTTPS.
  • server_name: Stabilește numele de domeniu (antetul Host) pentru care răspunde un bloc server.