AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1166472
Accepted
G. G.
G. G.
Asked: 2024-10-11 17:12:15 +0800 CST2024-10-11 17:12:15 +0800 CST 2024-10-11 17:12:15 +0800 CST

Problema com Nginx HTTP 1.2

  • 772

Estou tentando descobrir que, embora o nginx esteja configurado para ouvir HTTP1.2, todas as solicitações nos logs são 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)" 

Este é meu 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;

# apply ratebot rules
    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;

# apply ratebot rules
    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' always;
    add_header 'Access-Control-Allow-Methods' 'GET,POST,PUT,DELETE,HEAD,PATCH' always;
    add_header 'Access-Control-Allow-Headers' '*' always;
    add_header 'Access-Control-Allow-Credentials' 'true' always;
    }

    }
}

Este é um servidor dedicado em Hetzner. Ele está atrás de um firewall que está desligado. Também não estamos usando nenhum painel, apenas o Ubuntu 22 OS. O firewall CSF está habilitado

O Nginx funciona como um proxy para o varnish com terminação SSL. Então o Varnish lida com as primeiras solicitações

Anteriormente, o servidor Cloudflare também estava habilitado com suporte para http1.2

O que estou perdendo aqui, pessoal?

linux
  • 1 1 respostas
  • 84 Views

1 respostas

  • Voted
  1. Best Answer
    Thijs Feryn
    2024-10-11T20:06:30+08:002024-10-11T20:06:30+08:00

    Sua configuração parece 100% correta e eu repliquei a configuração do Nginx em um ambiente Docker.

    Aqui está o que eu vejo.

    HTTP/2 usado pelo cliente e Nginx

    Quando envio uma solicitação por HTTP para o Nginx, que atua como proxy TLS, recebo uma resposta HTTP/2, como você pode ver na saída abaixo:

    $ curl -k -I https://localhost                                                                     
    
    HTTP/2 200
    server: nginx/1.27.2
    date: Fri, 11 Oct 2024 11:52:08 GMT
    content-type: text/html; charset=UTF-8
    content-length: 26
    x-powered-by: PHP/8.3.12
    cache-control: max-age=10
    vary: Accept-Encoding
    x-varnish: 32777 32771
    age: 4
    via: 1.1 varnish (Varnish/7.5)
    accept-ranges: bytes
    access-control-allow-origin: *
    access-control-allow-methods: GET,POST,PUT,DELETE,HEAD,PATCH
    access-control-allow-headers: *
    access-control-allow-credentials: true
    

    Até agora tudo bem.

    Nginx usa HTTP/1.0 para proxy

    Embora o cliente esteja se comunicando bem via HTTP/2 com o proxy TLS (Nginx neste caso), o Nginx está enviando solicitações HTTP/1.0 para o Varnish por padrão.

    Pode-se configurar proxy_http_version 1.1;para atualizar a versão HTTP para HTTP 1/1. Mas, como descrito na documentação , o Nginx não parece suportar HTTP/2 para proxy.

    E quando eu executo varnishncsano meu contêiner Varnish, para consultar os logs de acesso, você verá que o HTTP/1.1 é usado:

    $ varnishncsa
    172.18.0.3 - - [11/Oct/2024:11:52:04 +0000] "HEAD http://localhost/ HTTP/1.1" 200 0 "-" "curl/8.7.1"
    172.18.0.3 - - [11/Oct/2024:11:52:07 +0000] "HEAD http://localhost/ HTTP/1.1" 200 0 "-" "curl/8.7.1"
    172.18.0.3 - - [11/Oct/2024:11:52:07 +0000] "HEAD http://localhost/ HTTP/1.1" 200 0 "-" "curl/8.7.1"
    172.18.0.3 - - [11/Oct/2024:11:52:07 +0000] "HEAD http://localhost/ HTTP/1.1" 200 0 "-" "curl/8.7.1"
    172.18.0.3 - - [11/Oct/2024:11:52:08 +0000] "HEAD http://localhost/ HTTP/1.1" 200 0 "-" "curl/8.7.1"
    172.18.0.3 - - [11/Oct/2024:11:52:08 +0000] "HEAD http://localhost/ HTTP/1.1" 200 0 "-" "curl/8.7.1"
    172.18.0.3 - - [11/Oct/2024:11:52:08 +0000] "HEAD http://localhost/ HTTP/1.1" 200 0 "-" "curl/8.7.1
    

    Use Hitch em vez disso

    Se você quiser HTTP/2 de ponta a ponta ao usar o Varnish, recomendo usar o Hitch como seu proxy TLS . O Hitch é um proxy TLS de purga que nem tem reconhecimento de HTTP.

    O Hitch pode se comunicar com o Varnish pelo protocolo PROXY e, desde que o Varnish seja iniciado com o -p feature=+http2parâmetro de tempo de execução e o Hitch exponha h2, http/1.1em seus protocolos ALPN, ele deve funcionar perfeitamente.

    Dê uma olhada no tutorial a seguir, que explica a situação em detalhes: https://www.varnish-software.com/developers/tutorials/terminate-tls-varnish-hitch/

    Uma configuração de Hitch muito simplista poderia ser assim:

    frontend = "[*]:443"
    daemon = on
    user = "hitch"
    group = "hitch"
    backend = "[varnish.example.com]:8443"
    pem-dir = "/etc/hitch/cert.d"
    pem-dir-glob = "*.pem"
    alpn-protos = "h2, http/1.1"
    write-proxy-v2 = on
    

    E uma configuração de tempo de execução do Varnish igualmente simplista com suporte a HTTP/2 e PROXY poderia ser assim:

    varnishd \
        -a http=:80 \
        -a proxy=:8443,PROXY \
        -p feature=+http2 \
        -f /etc/varnish/default.vcl \
        -s malloc,2g
    

    A detecção de TLS no Varnish pode ser feita usando o seguinte snippet VCL:

    vcl 4.1;
    
    import proxy;
    
    sub vcl_recv {
        if(!req.http.X-Forwarded-Proto) {
            if (proxy.is_ssl()) {
                set req.http.X-Forwarded-Proto = "https";
            } else {
                set req.http.X-Forwarded-Proto = "http";
            }
        }    
    }
    
    • 1

relate perguntas

  • Como descobrir detalhes sobre hardware na máquina Linux?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve