1#ifndef NEFORCE_NETWORK_HTTP_REVERSE_PROXY_HPP__
2#define NEFORCE_NETWORK_HTTP_REVERSE_PROXY_HPP__
13NEFORCE_BEGIN_NAMESPACE__
32 NEFORCE_NODISCARD
string to_url(
const string&
path)
const {
33 return scheme +
"://" + host +
":" +
to_string(port.value()) +
path;
91 backends_.push_back(
move(backend));
99 path_prefix_ =
move(prefix);
107 selector_ =
move(selector);
115 header_rewrite_ =
move(cb);
123 skip_resp_headers_.push_back(
move(header));
128 NEFORCE_NODISCARD
string name()
const override {
return "reverse_proxy_filter"; }
134 backend_selector_cb selector_;
135 header_rewrite_cb header_rewrite_;
137 mutable mutex mutex_;
138 size_t rr_counter_{0};
140 proxy_backend select_backend(
const http_request& request);
141 bool should_proxy(
const string& path)
const;
142 http_client_response
forward(
const proxy_backend& backend,
const http_request& request);
143 void copy_response(
const http_client_response& from, http_response& to);
152NEFORCE_END_NAMESPACE__
void set_header_rewrite(header_rewrite_cb cb)
设置请求头重写回调
bool pre_filter(http_request &request, http_response &response) override
预处理方法
string name() const override
获取过滤器名称
reverse_proxy_filter(io_context &ctx, string host, ports port, string scheme="http")
构造函数(单后端)
function< void(unordered_map< string, string > &)> header_rewrite_cb
请求头重写回调
bool passthrough_host_header
是否保持原始 Host 头(不过滤)
void do_filter(http_request &request, http_response &response) override
核心过滤方法
void add_backend(proxy_backend backend)
添加后端服务器
bool follow_redirects
是否跟随重定向
reverse_proxy_filter(io_context &ctx)
构造函数
void set_path_prefix(string prefix)
设置路径前缀匹配(仅代理匹配路径)
void add_skip_response_header(string header)
添加不透传的响应头
void set_backend_selector(backend_selector_cb selector)
设置自定义后端选择器
milliseconds connect_timeout
连接超时(毫秒)
function< proxy_backend(const http_request &)> backend_selector_cb
后端选择回调
milliseconds send_timeout
发送超时(毫秒)
milliseconds receive_timeout
接收超时(毫秒)
constexpr T && forward(remove_reference_t< T > &x) noexcept
完美转发左值
duration< int64_t, milli > milliseconds
毫秒持续时间
http_server_response http_response
HTTP响应类型别名
http_server_request http_request
HTTP请求类型别名
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
constexpr string to_string(const CharT &c)
将字符转换为普通字符串
size_t weight
权重(用于加权负载均衡)
string scheme
"http" 或 "https"