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.