one of them over the FD. The bind part will use the
received socket as the client FD. Should be used
carefully.
+ - 'rev@' -> custom address family for a passive server in
+ HTTP reverse context.
You may want to reference some environment variables in the
address parameter, see section 2.3 about environment
variables. The "init-addr" setting can be used to modify the way
IP addresses should be resolved upon startup.
- Additionally, there is a special address notation defined for
- servers which does not have any address assigned. Currently, only
- '@reverse' is valid. This instantiates a server which can only be
- used with reverse connect. This mode requires the proxy to be in
- HTTP mode and the server to explicitly use HTTP/2, either through
- 'proto' or 'alpn' keywords.
-
<port> is an optional port specification. If set, all connections will
be sent to this port. If unset, the same port the client
connected to will be used. The port may also be prefixed by a "+"
void rev_unbind_receiver(struct listener *l);
int rev_set_affinity(struct connection *conn, int new_tid);
+int rev_connect(struct connection *conn, int flags);
+
int rev_accepting_conn(const struct receiver *rx);
void rev_notify_preconn_err(struct listener *l);
use_backend be-reverse
backend be-reverse
- server dev @reverse
+ server dev rev@
frontend priv
bind "fd@${priv}" proto h2
use_backend be-reverse
backend be-reverse
- server dev @reverse
+ server dev rev@
frontend priv
bind "fd@${priv}" proto h2
use_backend be-reverse
backend be-reverse
- server dev @reverse ssl sni hdr(x-name) verify none
+ server dev rev@ ssl sni hdr(x-name) verify none
frontend priv
bind "fd@${priv}" ssl crt ${testdir}/common.pem verify required ca-verify-file ${testdir}/ca-auth.crt alpn h2
.accept_conn = rev_accept_conn,
.set_affinity = rev_set_affinity,
+ .connect = rev_connect,
+
/* address family */
.fam = &proto_fam_reverse_connect,
return -1;
}
+/* Simple callback to enable definition of passive HTTP reverse servers. */
+int rev_connect(struct connection *conn, int flags)
+{
+ return SF_ERR_NONE;
+}
+
int rev_accepting_conn(const struct receiver *rx)
{
return 1;
else
newsrv->tmpl_info.prefix = strdup(args[1]);
- /* special address specifier */
- if (args[*cur_arg][0] == '@') {
- if (strcmp(args[*cur_arg], "@reverse") == 0) {
- newsrv->flags |= SRV_F_REVERSE;
- }
- else {
- ha_alert("unknown server address specifier '%s'\n",
- args[*cur_arg]);
- err_code |= ERR_ALERT | ERR_FATAL;
- goto out;
- }
-
- (*cur_arg)++;
- parse_flags &= ~SRV_PARSE_PARSE_ADDR;
- }
-
/* several ways to check the port component :
* - IP => port=+0, relative (IPv4 only)
* - IP: => port=+0, relative
}
if (!port1 || !port2) {
- /* no port specified, +offset, -offset */
- newsrv->flags |= SRV_F_MAPPORTS;
+ if (sk->ss_family != AF_CUST_REV_SRV) {
+ /* no port specified, +offset, -offset */
+ newsrv->flags |= SRV_F_MAPPORTS;
+ }
+ else {
+ newsrv->flags |= SRV_F_REVERSE;
+ }
}
/* save hostname and create associated name resolution */