我正在使用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写一些中间件来打印出我收到的请求的头。我意识到这个问题有重复,但指导不是很有帮助。
1条答案
按热度按时间mqkwyuun1#
Actix建议通过设置功能标志来使用内置功能
你可以在这里看到例子:https://github.com/actix/examples/tree/master/https-tls/rustls
别忘了在cargo.toml中设置flag功能
字符串