fix #4095: make http client use proxy config from 'ALL_PROXY' env var

In order to be able to use a proxy with the proxmox-backup-client, use
ProxyConfig for parsing proxy server config from the environment. Also
added a section in the documentation that describes how to configure the
environment if a proxy server should be used.

Signed-off-by: Stefan Hanreich <s.hanreich@proxmox.com>
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
Stefan Hanreich 2022-09-16 10:48:38 +02:00 committed by Thomas Lamprecht
parent 3259c85ad1
commit fc65ec4345
2 changed files with 18 additions and 0 deletions

View File

@ -69,6 +69,17 @@ Environment Variables
When set, this value is used to verify the server certificate (only used if When set, this value is used to verify the server certificate (only used if
the system CA certificates cannot validate the certificate). the system CA certificates cannot validate the certificate).
``ALL_PROXY``
When set, the client uses the specified HTTP proxy for all connections to the
backup server. Currently only HTTP proxies are supported. Valid proxy
configurations have the following format:
`[http://][user:password@]<host>[:port]`. Default `port` is 1080, if not
otherwise specified.
.. Note:: The recommended solution for shielding hosts is using tunnels such as
wireguard, instead of using an HTTP proxy.
.. Note:: Passwords must be valid UTF-8 and may not contain newlines. For your .. Note:: Passwords must be valid UTF-8 and may not contain newlines. For your
convenience, Proxmox Backup Server only uses the first line as password, so convenience, Proxmox Backup Server only uses the first line as password, so

View File

@ -23,6 +23,7 @@ use proxmox_sys::linux::tty;
use proxmox_async::broadcast_future::BroadcastFuture; use proxmox_async::broadcast_future::BroadcastFuture;
use proxmox_http::client::{HttpsConnector, RateLimiter}; use proxmox_http::client::{HttpsConnector, RateLimiter};
use proxmox_http::ProxyConfig;
use proxmox_http::uri::{build_authority, json_object_to_query}; use proxmox_http::uri::{build_authority, json_object_to_query};
use pbs_api_types::percent_encoding::DEFAULT_ENCODE_SET; use pbs_api_types::percent_encoding::DEFAULT_ENCODE_SET;
@ -389,6 +390,12 @@ impl HttpClient {
))))); )))));
} }
let proxy_config = ProxyConfig::from_proxy_env()?;
if let Some(config) = proxy_config {
log::info!("Using proxy connection: {}:{}", config.host, config.port);
https.set_proxy(config);
}
let client = Client::builder() let client = Client::builder()
//.http2_initial_stream_window_size( (1 << 31) - 2) //.http2_initial_stream_window_size( (1 << 31) - 2)
//.http2_initial_connection_window_size( (1 << 31) - 2) //.http2_initial_connection_window_size( (1 << 31) - 2)