Вопрос или проблема
Я пытаюсь выяснить, что, хотя nginx настроен на прослушивание HTTP1.2, все запросы в логах – это HTTP1.1
[11/Oct/2024:11:53:41 +0300] "GET /el_gr/tapetsaries-toixou/fototapetsaries-toixou/zoa/filtra/xromatikes_omades-psychra-kitrina-xroma-oxia_fusiko-gkri_mpez-leuko-anoichto_mob-mob-somon-anoichto_gkri-anthraki-gkri-thema_fototapetsarias-artistic-apoxrosi_fototapetsarias-egchromo?price=amshopby_slider_from-amshopby_slider_to HTTP/1.1" 200 50347 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.6668.89 Mobile Safari/537.36 (compatible; GoogleOther)"
[11/Oct/2024:11:53:41 +0300] "GET /el_gr/catalog/product/view/id/144583/s/144583-fototsapetsaries-diafora-sxedia-megethi-100-159102/ HTTP/1.1" 200 55818 "-" "Mozilla/5.0 (compatible; Pinterestbot/1.0; +http://www.pinterest.com/bot.html)"
[11/Oct/2024:11:53:43 +0300] "GET /el_gr/catalog/product/view/id/134022/s/134022-fototsapetsaries-diafora-sxedia-megethi-100-148541/ HTTP/1.1" 200 56234 "-" "Mozilla/5.0 (compatible; Pinterestbot/1.0; +http://www.pinterest.com/bot.html)"
[11/Oct/2024:11:53:43 +0300] "GET /el_gr/catalog/product/view/id/153049/s/153049-fototsapetsaries-diafora-sxedia-megethi-100-167568/ HTTP/1.1" 200 55991 "-" "Mozilla/5.0 (compatible; Pinterestbot/1.0; +http://www.pinterest.com/bot.html)"
54.236.1.13 [ 54.236.1.13, 54.236.1.13, 127.0.0.1] [11/Oct/2024:11:53:46 +0300] "GET /el_gr/catalog/product/view/id/151013/s/151013-fototsapetsaries-diafora-sxedia-megethi-100-165532/ HTTP/1.1" 200 56020 "-" "Mozilla/5.0 (compatible; Pinterestbot/1.0; +http://www.pinterest.com/bot.html)"
[11/Oct/2024:11:53:47 +0300] "GET /el_gr/tapetsaries-toixou/fototapetsaries-toixou/zoa/filtra/xromatikes_omades-psychra-pastel-mov-therma-xroma-oxia_fusiko-gkri_mpez-leuko-anoichto_mob-mob-somon-kokkino-anoichto_gkri-kafe-thema_fototapetsarias-artistic-louloudia-vintage-apoxrosi_fototapetsarias-egchromo?price=amshopby_slider_from-amshopby_slider_to HTTP/1.1" 200 56578 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.6668.89 Mobile Safari/537.36 (compatible; GoogleOther)"
[11/Oct/2024:11:53:48 +0300] "GET /el_gr/50369-tapetsaria-arts-crafts-prasino-no-36159-by-casadeco HTTP/1.1" 200 63129 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.6668.89 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
[11/Oct/2024:11:53:48 +0300] "GET /el_gr/catalog/product/view/id/142099/s/142099-fototsapetsaries-diafora-sxedia-megethi-100-156618/ HTTP/1.1" 200 55810 "-" "Mozilla/5.0 (compatible; Pinterestbot/1.0; +http://www.pinterest.com/bot.html)"
[11/Oct/2024:11:53:49 +0300] "GET /el_gr/49391-wing-kremasto-ntoulapi-oikologiko-tzaki-no-14297-by-abb?swatch_colour_att=11095 HTTP/1.1" 200 69558 "-" "Mozilla/5.0 (compatible; Pinterestbot/1.0; +http://www.pinterest.com/bot.html)"
[11/Oct/2024:11:53:49 +0300] "GET /el_gr/catalog/product/view/id/90457/s/58177-diaxoristika-domatiou-diafora-sxedia-102723/ HTTP/1.1" 200 68402 "-" "Mozilla/5.0 (compatible; Pinterestbot/1.0; +http://www.pinterest.com/bot.html)"
Это мой vhost:
server {
listen 443 ssl;
http2 on;
server_name www.example.com;
ssl_certificate /etc/nginx/ssl/2023/ssl_bundle.crt;
ssl_certificate_key /etc/nginx/ssl/2023/example.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'AES128+EECDH:AES128+EDH:!aNULL';
return 301 https://example.com$request_uri;
# Nginx Bad Bot Blocker Includes
# REPO: https://github.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker
##
include /etc/nginx/bots.d/ddos.conf;
include /etc/nginx/bots.d/blockbots.conf;
# применить правила для ratebot
limit_req zone=ratebot_soft nodelay;
limit_req zone=ratebot_medium nodelay;
limit_req zone=ratebot_hard nodelay;
}
server {
listen 443 ssl;
http2 on;
server_name example.com;
proxy_headers_hash_bucket_size 128;
proxy_headers_hash_max_size 1024;
ssl_certificate /etc/nginx/ssl/2023/ssl_bundle.crt;
ssl_certificate_key /etc/nginx/ssl/2023/example.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'AES128+EECDH:AES128+EDH:!aNULL';
include /etc/nginx/bots.d/ddos.conf;
include /etc/nginx/bots.d/blockbots.conf;
# применить правила для ratebot
limit_req zone=ratebot_soft nodelay;
limit_req zone=ratebot_medium nodelay;
limit_req zone=ratebot_hard nodelay;
location / {
proxy_pass http://127.0.0.1:6081;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Server $http_host;
proxy_set_header Host $http_host;
proxy_buffering off;
proxy_buffer_size 16k;
proxy_buffers 64 4k;
proxy_busy_buffers_size 24k;
fastcgi_buffer_size 32k;
fastcgi_buffers 16 32k;
if ($cors_origin) {
add_header 'Access-Control-Allow-Origin' '$cors_origin' всегда;
add_header 'Access-Control-Allow-Methods' 'GET,POST,PUT,DELETE,HEAD,PATCH' всегда;
add_header 'Access-Control-Allow-Headers' '*' всегда;
add_header 'Access-Control-Allow-Credentials' 'true' всегда;
}
}
}
Это выделенный сервер в Hetzner. Он находится за файрволом, который отключен. Также мы не используем панели управления, только ОС Ubuntu 22. Файрвол CSF включен
Nginx работает как прокси для varnish с завершением SSL. Таким образом, Varnish обрабатывает первые запросы
Перед этим сервером также включен Cloudflare с поддержкой http1.2
Что я здесь упускаю, ребята?
Ответ или решение
Проблема с HTTP/1.2 в Nginx: подходим к решению
Введение
Вы описали ситуацию, когда Nginx настроен на поддержку HTTP/1.2, однако все запросы в журнале фиксируются как HTTP/1.1. В данной статье мы рассмотрим возможные причины проблемы и предложим пути ее решения.
Причины проблемы
-
Настройки Nginx: Прежде всего, стоит убедиться, что ваша конфигурация действительно поддерживает HTTP/1.2. В вашем конфиге установлено
http2 on;
, что относится к версии HTTP/2, и это может вызывать путаницу. -
Версия протокола: Обратите внимание, что HTTP/1.2 фактически не был стандартизован. Протоколы, с которыми вы можете работать, это HTTP/1.0, HTTP/1.1 и HTTP/2. Несмотря на это, многие пользователи иногда подразумевают под HTTP/1.2 улучшения, которые фактически уже реализованы в HTTP/1.1.
-
Промежуточные прокси и кэширование: Ваш сервер находится за Cloudflare, который также может влиять на заголовки и протоколы. Cloudflare поддерживает HTTP/2, но если его клиенты подключаются по HTTP/1.1, они могут генерировать запросы, фиксируемые вашим сервером как HTTP/1.1. Если запросы приходят через Varnish, также следует проверить, какой протокол используется между Cloudflare и вашим Varnish сервером.
-
Настройки SSL: Протоколы SSL (TLSv1, TLSv1.1, TLSv1.2) не влияют на версию HTTP, однако могут быть связующими факторами для связи между клиентами и вашим серверами.
Рекомендации по решению
-
Перепроверьте конфигурацию Nginx:
- Убедитесь, что конфигурация действительно допускает использование HTTP/2. Если это так, следует проверить соответствующие заголовки и параметры.
server { listen 443 ssl http2; # Здесь правильно указано http2 ... }
-
Проверка Varnish: Убедитесь, что настройки Varnish поддерживают необходимые протоколы. Varnish может работать с HTTP/1.1 или HTTP/2 в зависимости от конфигурации.
-
Мониторинг запросов через Cloudflare:
- Проверьте панель управления Cloudflare, чтобы убедиться, что запросы исходят с поддержкой нужных версиях HTTP. Можете воспользоваться инструментами мониторинга запросов с Cloudflare.
-
Тестирование локально: Для тестирования запроса в локальной сети можно использовать инструменты, такие как
curl
, с указанием необходимых параметров:curl -I -http2 https://example.com
-
Логи и диагностика: Следите за логами Nginx для понимания, как обработчики запросов обрабатывают протоколы. Включение дополнительного уровня логирования может помочь выявить, какие запросы могут приходить в обернутом или некорректном виде.
Заключение
Ваша проблема заключается не в том, что Nginx не поддерживает HTTP/1.2, а, скорее, в том, что этот протокол не стандартизирован как полноценный. Проверьте конфигурацию Cloudflare и Varnish, и убедитесь, что они согласованы с требованиями вашего сайта.
Надеюсь, эти рекомендации помогут вам диагностировать и решить проблему. Если вопрос сохраняется, возможно, стоит обратиться за дополнительной помощью в сообщество Nginx или к вашему хостинг-провайдеру.