Перейти к основному содержимому

HTTP/3 в Nginx

Настройка современного протокола HTTP/3 (QUIC) для максимальной производительности.

Конфигурация HTTP/3

Основная настройка в nginx.conf

# /etc/nginx/nginx.conf

http {
# HTTP/3 и QUIC
quic_retry on;
ssl_early_data on;

# Улучшенные настройки для QUIC
quic_gso on;
quic_host_key /etc/nginx/ssl/quic_host.key;

# Заголовки для HTTP/3
add_header Alt-Svc 'h3=":443"; ma=86400' always;
add_header QUIC-Status $quic always;

include /etc/nginx/conf.d/*.conf;
}

Настройка виртуального хоста

# /etc/nginx/conf.d/example.com.conf

server {
listen 443 ssl http2;
listen 443 quic reuseport; # HTTP/3

server_name example.com www.example.com;

# SSL сертификаты
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

# SSL настройки для HTTP/3
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;

# QUIC/HTTP3 специфичные настройки
ssl_early_data on;
quic_retry on;

# Заголовки HTTP/3
add_header Alt-Svc 'h3=":$server_port"; ma=86400' always;
add_header QUIC-Status $quic always;

root /var/www/example.com;
index index.php index.html index.htm;

# Логи с информацией о протоколе
access_log /var/log/nginx/example.com.access.log combined buffer=16k flush=2m;
error_log /var/log/nginx/example.com.error.log;

location / {
try_files $uri $uri/ =404;
}

# PHP обработка
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;

# HTTP/3 заголовки для PHP
fastcgi_param HTTP3 $http3;
fastcgi_param QUIC $quic;
}
}

# Редирект HTTP на HTTPS
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}

Проверка HTTP/3

Проверка работы HTTP/3

curl -I --http3-only https://example.com

curl -sI https://example.com | grep -i alt-svc

Проверка поддержки браузером

# Проверка через OpenSSL
openssl s_client -connect example.com:443 -alpn h3

# Проверка заголовков
curl -sI https://example.com | grep -E "(alt-svc|quic)"

Мониторинг производительности

Логирование протоколов

# Кастомный формат лога с информацией о протоколе
log_format extended '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'protocol=$server_protocol quic=$quic';

access_log /var/log/nginx/access.log extended;

Метрики для мониторинга

# Статус страница Nginx
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}

Оптимизация производительности

Тюнинг QUIC

# Дополнительные настройки QUIC
http {
quic_gso on; # Generic Segmentation Offload
quic_max_concurrent_streams 128;
quic_initial_max_data 10M;
quic_initial_max_stream_data_bidi_local 1M;
quic_initial_max_stream_data_bidi_remote 1M;
quic_initial_max_stream_data_uni 1M;
}

Оптимизация SSL для HTTP/3

# Специальные настройки SSL для QUIC
ssl_session_cache shared:QUIC:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
ssl_early_data on;

# 0-RTT данные
ssl_conf_command Options PrioritizeChaCha;
ssl_conf_command Ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256;
Производительность

HTTP/3 может значительно улучшить производительность, особенно при плохом качестве соединения и высокой задержке.

Совместимость

Не все клиенты поддерживают HTTP/3. Обязательно настройте fallback на HTTP/2.