Так как пока Hestia не поддерживает HTTP/3 Quic, стоит конечно же самостоятельно добавить поддержку в шаблон, и это значительно ускорит сайты.
Если у вас еще нет собственного Nginx шаблона в Hestia для сайта, то стоит его создать, делаем так, переходим в директорию и создаем копию шаблона wordpress-disable-xmlrpc.stpl и wordpress-disable-xmlrpc.tpl называем их как удобно
/usr/local/hestia/data/templates/web/nginx/php-fpm
После этого открываем шаблон wordpress-disable-xmlrpc.stpl и вносим изменения, получится вот так
server {
listen %ip%:%web_ssl_port% ssl;
listen %ip%:%web_ssl_port% quic reuseport;
server_name %domain_idn% %alias_idn%;
root %sdocroot%;
index index.php index.html index.htm;
access_log /var/log/nginx/domains/%domain%.log combined;
access_log /var/log/nginx/domains/%domain%.bytes bytes;
error_log /var/log/nginx/domains/%domain%.error.log error;
ssl_certificate %ssl_pem%;
ssl_certificate_key %ssl_key%;
ssl_stapling on;
ssl_stapling_verify on;
# TLS 1.3 0-RTT anti-replay
if ($anti_replay = 307) { return 307 https://$host$request_uri; }
if ($anti_replay = 425) { return 425; }
include %home%/%user%/conf/web/%domain%/nginx.hsts.conf*;
# HTTP/3 specific settings
ssl_protocols TLSv1.3;
ssl_prefer_server_ciphers off;
add_header Alt-Svc 'h3=":%web_ssl_port%"; ma=86400'; # Advertise that HTTP/3 is available
add_header QUIC-Status $http3;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
try_files $uri $uri/ /index.php?$args;
log_not_found off;
access_log off;
}
location ~ /\.(?!well-known\/) {
deny all;
return 404;
}
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
return 403;
}
location / {
try_files $uri $uri/ /index.php?$args;
location ~* ^.+\.(ogg|ogv|svg|svgz|swf|eot|otf|woff|woff2|mov|mp3|mp4|webm|flv|ttf|rss|atom|jpg|jpeg|gif|png|webp|ico|bmp|mid|midi|wav|rtf|css|js|pdf|jar)$ {
expires 365d;
fastcgi_hide_header "Set-Cookie";
}
location ~* /(?:uploads|files)/.*.php$ {
deny all;
return 404;
}
location ~ [^/]\.php(/|$) {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_index index.php;
fastcgi_param HTTP_HOST $host;
fastcgi_param HTTP_EARLY_DATA $rfc_early_data if_not_empty;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass %backend_lsnr%;
include %home%/%user%/conf/web/%domain%/nginx.fastcgi_cache.conf*;
if ($request_uri ~* "/wp-admin/|/wp-json/|wp-.*.php|xmlrpc.php|index.php|/store.*|/cart.*|/my-account.*|/checkout.*") {
set $no_cache 1;
}
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in|woocommerce_items_in_cart|woocommerce_cart_hash|PHPSESSID") {
set $no_cache 1;
}
}
}
location /error/ {
alias %home%/%user%/web/%domain%/document_errors/;
}
location /vstats/ {
alias %home%/%user%/web/%domain%/stats/;
include %home%/%user%/web/%domain%/stats/auth.conf*;
}
proxy_hide_header Upgrade;
include /etc/nginx/conf.d/phpmyadmin.inc*;
include /etc/nginx/conf.d/phppgadmin.inc*;
include %home%/%user%/conf/web/%domain%/nginx.ssl.conf_*;
}
Обратите внимание, что кроме
# HTTP/3 specific settings
ssl_protocols TLSv1.3;
ssl_prefer_server_ciphers off;
add_header Alt-Svc 'h3=":%web_ssl_port%"; ma=86400'; # Advertise that HTTP/3 is available
add_header QUIC-Status $http3;
Мы добавили отсутствующий в шаблоне параметр
fastcgi_param HTTP_HOST $host;
Дело в том что этот параметр по умолчанию отсутствует в шаблоне, и не причиняет сложностей, но как только мы добавляем Quic, мы получаем кучу ошибок PHP из-за того что информацию о хосте, с которого был сделан запрос не может быть передана без него. Таким образом правим и шаблон wordpress-disable-xmlrpc.tpl, в него просто добавляем fastcgi_param HTTP_HOST $host;, получается вот так
А так же мы можем добавить reuseport; только для одного сайта на одном сервере, т.е. с одним и тем же IP.(включает функцию повторного использования порта. Эта настройка удобна для сценариев с высоким трафиком, позволяя более эффективно распределять входящие соединения между несколькими рабочими процессами). Соответственно шаблон для другого сайта будет уже без reuseport; Выберите сайт с самым большим трафиком для шаблона с reuseport;
server {
listen %ip%:%web_port%;
server_name %domain_idn% %alias_idn%;
root %docroot%;
index index.php index.html index.htm;
access_log /var/log/nginx/domains/%domain%.log combined;
access_log /var/log/nginx/domains/%domain%.bytes bytes;
error_log /var/log/nginx/domains/%domain%.error.log error;
include %home%/%user%/conf/web/%domain%/nginx.forcessl.conf*;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
try_files $uri $uri/ /index.php?$args;
log_not_found off;
access_log off;
}
location ~ /\.(?!well-known\/) {
deny all;
return 404;
}
location / {
try_files $uri $uri/ /index.php?$args;
location ~* ^.+\.(ogg|ogv|svg|svgz|swf|eot|otf|woff|woff2|mov|mp3|mp4|webm|flv|ttf|rss|atom|jpg|jpeg|gif|png|webp|ico|bmp|mid|midi|wav|rtf|css|js|pdf|jar)$ {
expires 365d;
fastcgi_hide_header "Set-Cookie";
}
location ~* /(?:uploads|files)/.*.php$ {
deny all;
return 404;
}
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
return 403;
}
location ~ [^/]\.php(/|$) {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_index index.php;
fastcgi_param HTTP_HOST $host;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass %backend_lsnr%;
include %home%/%user%/conf/web/%domain%/nginx.fastcgi_cache.conf*;
if ($request_uri ~* "/wp-admin/|/wp-json/|wp-.*.php|xmlrpc.php|index.php|/store.*|/cart.*|/my-account.*|/checkout.*") {
set $no_cache 1;
}
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in|woocommerce_items_in_cart|woocommerce_cart_hash|PHPSESSID") {
set $no_cache 1;
}
}
}
location /error/ {
alias %home%/%user%/web/%domain%/document_errors/;
}
location /vstats/ {
alias %home%/%user%/web/%domain%/stats/;
include %home%/%user%/web/%domain%/stats/auth.conf*;
}
include /etc/nginx/conf.d/phpmyadmin.inc*;
include /etc/nginx/conf.d/phppgadmin.inc*;
include %home%/%user%/conf/web/%domain%/nginx.conf_*;
}
После этого сохраняем шаблоны, и пересобираем, замените user на имя пользователя в вашей Hestia
v-rebuild-web-domains user && systemctl restart nginx
Применяем шаблон в панели Hestia
И открываем порт UDP 443 для Quic в панели Hestia
Проверить в терминале что ваши сайты используют quic можно так. Вместо angelka.ru поставьте свой домен, вы увидите вывоз слушателей, в том числе quic. Если его нет вы не верно что-то настроили.
grep -R 'listen.*quic' /etc/nginx/conf.d/domains/*angelka.ru* && grep -R reuseport /etc/nginx/conf.d/domains/*angelka.ru* && grep -Ri 'listen' /etc/nginx/conf.d/domains/*angelka.ru*
Всё, можно проверять сайт, например в консоли браузера или здесь.