http(8gx)
π http(8gx) β Gromox admin reference π«Ά
okay so bestie, welcome to the http page β she's the Gromox protocol handler for HTTP and RPCH, and honestly she's doing a lot. grab a snack. π
β¨ Name β¨
http β the protocol handler for HTTP and RPCH. that's the whole vibe check. π
β¨ Synopsis β¨
http [-c config]
that's it. that's the whole invocation. slay. π
β¨ Description β¨
so http(8gx) is a trivial HTTP server β her words, not mine β but don't let that fool you. she understands the special HTTP methods that RPC-over-HTTP (the protocol Outlook uses) requires, she can serve files verbatim like a good little static host, and she can forward requests on to a FastCGI server such as php-fpm(8). multitasking icon behavior. β¨
generally speaking, http(8gx) also executed the Information Store, exmdb_provider(4gx) β which is a loadable module. yes "executed", that's what the page says, we're not going to argue with it, we're just reporting it fr fr. π
β¨ Options β¨
-cconfig β read configuration directives from the given file. if you don't pass this, she'll read/etc/gromox/gromox.cfgand/etc/gromox/http.cfgβ both of them, she's thorough. π-?β display the option summary. that's it, that's the flag. cute little question mark. π
β¨ URI processing order β¨
this is the part where you learn exactly how a request gets juggled around. the order is not vibes-based, it's real:
- Requests are passed to the
mod_rewrite(4gx)module (built-in) so their URI can potentially get rewritten. βοΈ - If a HTTP request is using the methods
RPC_IN_DATAorRPC_OUT_DATA, the data stream gets handed off to theexchange_emsmdb(4gx)component. special delivery π - Otherwise, the HTTP processing modules (HPM) are invoked. processing ends the moment one module signals that the request was handled. the order depends on the HPM list (which is fixed, no you can't reorder it):
ews,mh_emsmdb,mh_nsp,oxdisco,oab. - Otherwise, the
mod_fastcgi(4gx)module (built-in) is invoked. processing ends if this module handled the request. - Otherwise, the
mod_cache(4gx)module (built-in) is invoked. processing ends if this module handled the request. - Otherwise? the request is rejected. π sorry bestie. that's the end of the line.
β¨ RPC-over-HTTP β¨
RPC-over-HTTP utilizes two special HTTP methods: RPC_IN_DATA and RPC_OUT_DATA. these requests can, similarly to HTTP CONNECT, be very long-lived β like, stay on the phone for hours long-lived. the RPC data stream is handled by the included exchange_emsmdb(4gx) component. π
heads up bestie: all the time-based command-line options and configuration file directives are subject to the syntax described ingromox(7), section "Duration specifications". so like,1minute,3 minutes, that whole language. β³
β¨ Configuration directives (gromox.cfg) β¨
these are the directives she recognizes when reading from /etc/gromox/gromox.cfg, or when you used the -c option to point at a custom file. π
daemons_fd_limitβ in gromox-http, this is treated as an alias forhttp_fd_limit. same thing, different name, we love a nickname. π«http_basic_auth_cred_cachingβ perform credential caching for HTTP Basic. Default:1minutehttp_fd_limitβ request that the file descriptor table be at least this large. the magic value0means the system default hard limit (rlim_max, cf.setrlimit(2)) should be used. Default:0http_listenβ a space-separated list of bind address specifiers to expose HTTP on. Default:[::]:80http_listen_tlsβ a space-separated list of bind address specifiers to expose implicit-TLS (HTTPS) on. Default:[::]:443http_remote_host_hdrβ the name of the HTTP request header which contains the actual client IPv6/IPv4 address. when a (reverse) proxy sits in front ofgromox-http, the addressgxhttpnormally sees is the proxy address (e.g.::1). if the proxy sets a custom header to convey the actual client address, Gromox can pick this up for its own reporting, which in turn is useful for e.g. fail2ban setups. Default: (empty)istore_standaloneβ this directive is a mutual exclusion device betweenhttp(8gx)andistore(8gx), and controls which one of the two is in charge of running the mailbox engine. if this is set tono,httpwill be the one, andistore(8gx)has no function. Default:no
β¨ Configuration directives (http.cfg) β¨
and these are the ones she recognizes when reading from /etc/gromox/http.cfg, or when the -c option points at a custom file. same deal, different file. π
block_interval_authsβ the amount of time a user is blocked from connecting to the service after too many failed logins. sit down, be humble. Default:1 minuteconfig_file_pathβ colon-separated list of directories which will be scanned when locating further configuration files, especially those used by subcomponent instances. (for example,mysql_adaptor(4gx)would be directed to look at/etc/gromox/http/mysql_adaptor.cfgbefore/etc/gromox/mysql_adaptor.cfg.) Default:/etc/gromox/http:/etc/gromoxcontext_average_memβ Default:256Kcontext_numβ Default:400data_file_pathβ colon-separated list of directories which will be scanned when locating data files. Default:/usr/share/gromox/httpfastcgi_exec_timeoutβ maximum execution time for CGI scripts. Default:10 minutesgss_programβ the helper program to use for authenticating HTTP requests when Negotiate-SPNEGO headers are presented. the value is rudimentarily tokenized at whitespaces, and no special characters may be used. if necessary, write your own wrapper. the special value"internal-gss"uses libgssapi directly.
Negotiate was meant to carry GSS-API auth data (appearing as "Authorization: Negotiate YII..." in HTTP protocol dumps). NTLM can be wrapped in SPNEGO (also shows up as "YII"), but a handful of clients may also send raw NTLM tokens (appearing as "Authorization: Negotiate TlRMTVNT..."). whether raw NTLM tokens are accepted by internal-gss depends on your GSS library and, more broadly, your Kerberos setup. otherwise, you may need to use a helper program like the one from Squid. internal-gss also does not offer a way to specify a separate keytab or replay cache parameters, so use Squid's helper if you need such parameters.
Default: internal-gss
Example: /usr/lib/squid/negotiate_wrapper_auth --ntlm /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --kerberos /usr/lib/squid/negotiate_kerberos_auth -s GSS_C_NO_NAME
host_idβ a unique identifier for this system. it's used for theServerHTTP responses header, for components likeexmdb_provider(4gx), which makes use of it for SMTP HELO lines, for DSN report texts, for MIDB database/EML cache. the identifier should only use characters allowed for hostnames. Default: (system hostname)http_auth_basicβ enable HTTP Basic authentication. Default:yeshttp_auth_spnegoβ enable HTTP Negotiate authentication. Default:nohttp_auth_timesβ the number of login tries a user is allowed before the account is blocked. Default:10http_certificate_passwdβ the password to unlock TLS certificates. Default: (unset)http_certificate_pathβ a colon-separated list of TLS certificate files. the complete certificate chain should be present (as there is no other config directive to pull CA certs in, and implicit loading from system directories is not guaranteed by Gromox). no shortcuts bestie. Default: (unset)http_conn_timeoutβ if a HTTP connection is inactive for the given period, the connection is terminated. Default:3 minuteshttp_debugβ if set to1, prints all incoming and outgoing HTTP traffic tostderr(nothttp_log_file!). π Default:0http_enforce_authβ enforce authentication at all times. this is a debugging knob, not a lifestyle. Default:nohttp_krb_service_principalβ Kerberos service principal to use whengss_program=internal-gss. the form is often something likeHTTP/fqdn@REALM, but may vary. when using an external GSS authentication helper,http_krb_service_principalhas no effect, and any principal you want to use needs to be passed via thegss_programdirective in some way.beDefault: (empty)
(yes that be is genuinely sitting there at the end of the original line, bestie β we did not add it, we are simply honoring it. π)
http_listen_addrβ deprecated in favor ofgromox.cfg:http_listen/gromox.cfg:http_listen_tls. πhttp_listen_portβ deprecated in favor ofgromox.cfg:http_listen. πhttp_listen_tls_portβ deprecated in favor ofgromox.cfg:http_listen_tls. πhttp_log_fileβ target for log messages here. special values:"-"(stderr/syslog depending on parent PID) or"syslog"are recognized. Default:-(auto)http_log_levelβ maximum verbosity of logging.1=crit,2=error,3=warn,4=notice,5=info,6=debug. Default:4 (notice)http_private_key_pathβ a colon-separated list of TLS certificate private key files. Default: (unset)http_rqbody_flush_sizeβ if the HTTP request to a CGI endpoint has a HTTP body larger than the limit given here, the data is buffered in a file rather than kept in memory. if the request uses Chunked Transfer Encoding, a file is used unconditionally. Default:512Khttp_rqbody_max_sizeβ if theContent-Lengthof a HTTP request to a CGI endpoint is larger than this value, the request is rejected. π« Default:50Mhttp_support_tlsβ this flag controls whether (or not) the server offers TLS at all. the default is false because you need a certificate for this first. π Default:falsehttp_thread_charge_numβ connection load factor (oversubscription ratio) for a processing thread. Default:20http_thread_init_numβ the initial and also minimum number of client processing threads to keep around. this is similar to php-fpm'sstart_servers/min_spare_servere. (the maximum number of threads, i.e. what would bemax_spare_servers, is determined by:context_numdivided byhttp_thread_charge_num) Default:5msrpc_debugβ log every completed RPC call and the return code of the operation in a minimal fashion tostderr. level1emits RPCs with a failure return code, level2emits all RPCs. note the daemon log level needs to be"debug"(6), too. β¨ Default:0request_max_memβ the maximum hint size for fragmented RPC PDU requests that will be allowed (C706 Β§12.6.3.7, MS-RPCE v33 Β§2.2.2.6). Default:4Mtls_min_protoβ the lowest TLS version to offer. possible values are:tls1.0,tls1.1,tls1.2, and, if supported by the system,tls1.3. Default:tls1.2running_identityβ an unprivileged user account to switch the process to after startup. to inhibit the switch, assign the empty value. Default:gromoxuser_default_langβ Default:en
β¨ SIGNALS β¨
Okay so signals, bestie β these are the little pokes http(8gx) listens for. π«Ά
SIGHUPβ when this lands, the configuration files are re-read. But plot twist: only a few select directives can actually be changed this way, because many parts do not implement reload. So donβt expect a full glow-up. πSIGUSR1β when this lands, a dump of the currently active HTTP connections gets printed tostderr. Very βshow me the receiptsβ energy. π
π NORMATIVE REFERENCES π
The lore itβs built on, periodt:
- MS-RPCE: Remote Procedure Call Protocol Extensions
- DCERPC / C706: Technical Standard DCE 1.1: Remote Procedure Call by The Open Group, 1997
π SEE ALSO π
Go read these next, iykyk:
And thatβs the whole page, bestie β footer source/version/date vibes: Gromox, http(8gx), with the date exactly as the original footer says. πβ¨
π¦ where this page comes from
- alpine 3.24: grommunio-gromox-doc 3.6-r0 Β· AGPL-3.0-or-later
- π the page's license: CC-BY-SA-4.0 or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms