nginx Rust Actix Web with HTTPS - stream error:request parse error:invalid Header provided

yzckvree  于 12个月前  发布在  Nginx
关注(0)|答案(1)|浏览(182)

我正在使用Rust actix_web进行一个简单的Web服务器项目。我已经设置了一个HTTP服务器,运行在端口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

字符串
我真的只是想确定这里的基础知识。我能够击中服务器使用HTTP刚刚好。
我在一个docker-compose项目中运行了这个,端口4000Map到容器中的端口4000。现在,我添加了一个nginx容器,与actix容器运行在同一个网络上。它在nginx配置中配置了一个指令来处理SSL / TLS握手,并将请求传递到actix容器。nginx配置的导入部分如下:

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;
    }


当我通过HTTPS发送请求(使用浏览器或curl)时,我在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


有什么想法我在这里错过了吗?使用HTTPS,如果我已经有nginx来做繁重的工作,我还需要在actix中进行任何额外的配置吗?
我试过在nginx中修改配置来删除我传递给actix服务器的头文件,但这仍然没有改变任何东西。
我也尝试添加Cors配置并允许所有头。
我计划尝试为actix写一些中间件来打印出我收到的请求的头。我意识到这个问题有重复,但指导不是很有帮助。

mqkwyuun

mqkwyuun1#

Actix建议通过设置功能标志来使用内置功能
你可以在这里看到例子:https://github.com/actix/examples/tree/master/https-tls/rustls
别忘了在cargo.toml中设置flag功能

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

字符串

相关问题