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 / coding / Perguntas / 77381993
Accepted
Jacob Davis
Jacob Davis
Asked: 2023-10-29 12:27:35 +0800 CST2023-10-29 12:27:35 +0800 CST 2023-10-29 12:27:35 +0800 CST

Rust Actix Web com HTTPS - erro de fluxo: erro de análise de solicitação: cabeçalho inválido fornecido

  • 772

Estou trabalhando em um projeto com um servidor web simples usando Rust actix_web. Configurei um servidor HTTP, rodando na porta 4000:

HttpServer::new(move || {
        App::new()
            .wrap(Logger::default())
            .wrap(Cors::default().allow_any_header().supports_credentials())
            .service(test_index)
    })
    .workers(4)
    .bind(("0.0.0.0", 4000))?
    .run()
    .await

Na verdade, estou apenas tentando definir o básico aqui. Consegui acessar o servidor usando HTTP perfeitamente.

Eu tenho isso em execução em um projeto docker-compose com a porta 4000 mapeada para a porta 4000 no contêiner. Agora, adicionei um contêiner nginx, rodando na mesma rede que o contêiner actix. Ele configurou uma diretiva na configuração do nginx para lidar com o handshaking SSL/TLS e passar solicitações para o contêiner actix. As partes de importação da configuração do nginx estão aqui:

server {
        listen 4000 ssl http2 default_server;
        listen [::]:4000 ssl http2 default_server;

        include /myserver/serverName.conf;
        server_tokens off;
        client_body_buffer_size 2048K;
        client_max_body_size 2M;

        location /myserver/ {
        proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Scheme $scheme;
            proxy_pass http://myserver:4000/;
        }

        ssl_certificate /myserver/fullchain.pem;
        ssl_certificate_key /myserver/privkey.pem;
        ssl_dhparam /myserver/dhparam.pem;

        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-CCM:DHE-RSA-AES256-CCM8:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-CCM:DHE-RSA-AES128-CCM8:DHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256;
        ssl_ecdh_curve X25519:prime256v1:secp384r1;
        ssl_session_cache shared:SSL:10m;
        ssl_session_tickets off;
        ssl_session_timeout 1d;
        ssl_stapling on;
        ssl_stapling_verify on;

        add_header X-Frame-Options DENY;
        add_header X-Content-Type-Options nosniff;
    }

Quando envio uma solicitação (usando meu navegador ou curl) por HTTPS, recebo o seguinte erro no actix web:

2023-10-29T01:32:01.137392Z TRACE actix_http::h1::dispatcher: parse error invalid Header provided
2023-10-29T01:32:01.137888Z TRACE actix_http::h1::dispatcher: read half closed; start shutdown
2023-10-29T01:32:01.137907Z ERROR actix_http::h1::dispatcher: stream error: request parse error: invalid Header provided

Alguma ideia do que estou perdendo aqui? Com HTTPS, preciso ter alguma configuração adicional no actix se já tiver o nginx para fazer o trabalho pesado?

Tentei mexer na configuração do nginx para remover os cabeçalhos que passei para o servidor actix, mas isso ainda não mudou nada.

Também tentei adicionar a configuração do Cors e permitir todos os cabeçalhos.

Pretendo tentar escrever algum middleware para o Actix para imprimir os cabeçalhos que recebo em uma solicitação. Percebi que há uma duplicata deste problema, mas a orientação não é muito útil.

nginx
  • 1 1 respostas
  • 27 Views

1 respostas

  • Voted
  1. Best Answer
    Arya Bagaskara P
    2023-10-29T18:59:54+08:002023-10-29T18:59:54+08:00

    É recomendado pela Actix usar o recurso integrado configurando o sinalizador de recurso

    você pode ver os exemplos aqui: https://github.com/actix/examples/tree/master/https-tls/rustls

    não se esqueça de definir o recurso de sinalização em cargo.toml

    actix-web = { version = "4.2.1", features = ["rustls-0_21"]}
    
    • 0

relate perguntas

  • substitua a string de conteúdo por nginx proxy_pass

  • É possível incluir o conteúdo da variável lua no log de acesso nginx no openresty?

Sidebar

Stats

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

    destaque o código em HTML usando <font color="#xxx">

    • 2 respostas
  • Marko Smith

    Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}?

    • 1 respostas
  • Marko Smith

    Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)?

    • 2 respostas
  • Marko Smith

    Por que as compreensões de lista criam uma função internamente?

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 respostas
  • Marko Smith

    Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)?

    • 4 respostas
  • Marko Smith

    Por que o construtor de uma variável global não é chamado em uma biblioteca?

    • 1 respostas
  • Marko Smith

    Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto?

    • 1 respostas
  • Marko Smith

    Somente operações bit a bit para std::byte em C++ 17?

    • 1 respostas
  • Martin Hope
    fbrereto Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi Por que as compreensões de lista criam uma função internamente? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A formato fmt %H:%M:%S sem decimais 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python std::views::filter do C++20 não filtrando a visualização corretamente 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa Por que o construtor de uma variável global não é chamado em uma biblioteca? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev Por que os compiladores perdem a vetorização aqui? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan Somente operações bit a bit para std::byte em C++ 17? 2023-08-17 17:13:58 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

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