libapa...verRec(3pm)
okay so this is libapa...verRec(3pm) from User Contributed Perl Documentation, and bestie, we are diving into Apache2::ServerRec β the Perl API for Apache server record accessors. π
β¨
π NAME π
Apache2::ServerRec β Perl API for Apache server record accessors. π
β¨ Synopsis β¨
No cap, here's the whole vibe in code:
use Apache2::ServerRec ();
$error_fname = $s->error_fname();
$is_virtual = $s->is_virtual();
$keep_alive = $s->keep_alive();
$keep_alive_max = $s->keep_alive_max();
$keep_alive_timeout = $s->keep_alive_timeout();
$limit_req_fields = $s->limit_req_fields();
$limit_req_fieldsize = $s->limit_req_fieldsize();
$limit_req_line = $s->limit_req_line();
$path = $s->path();
$hostname = $s->server_hostname();
$port = $s->port();
$server_admin = $s->server_admin();
$proc = $s->process();
$timeout = $s->timeout();
$loglevel = $s->loglevel();
my $server = Apache2::ServerUtil->server;
my $vhosts = 0;
for (my $s = $server->next; $s; $s = $s->next) {
$vhosts++;
}
print "There are $vhosts virtual hosts";
π Description π
Apache2::ServerRec provides the Perl API for Apache server_rec object. π«Ά
Apache2::ServerUtil provides an extra functionality. So yeah, she's the bonus bestie. πΈ
π₯ API π₯
Apache2::ServerRec provides the following functions and/or methods, and we're going through every single one, no skipping. Periodt. π
error_fname
Get/set the ErrorLog file value (e.g. logs/error_log).
$error_fname = $s->error_fname();
$prev_error_fname = $s->error_fname($new_error_fname);
obj:$s("Apache2::ServerRec object") β the server record we're looking at.opt arg1:$new_error_fname(string) β If passed, sets the new value forErrorLog. β οΈ Note the limited functionality under threaded MPMs.ret:$error_fname(string) β Returns theErrorLogvalue setting. If$new_error_fnameis passed returns the setting before the change.since:2.0.00
is_virtual
Test whether $s is a virtual host object.
$is_virtual = $s->is_virtual();
obj:$s("Apache2::ServerRec object")ret:$is_virtual(boolean) β Returns the is_virtual setting. If$new_is_virtualis passed, returns the setting before the change.since:2.0.00
Example:
print "This is a virtual host" if $s->is_virtual();
keep_alive
Get/set the KeepAlive setting, which specifies whether Apache should accept more than one request over the same connection from the same client.
$keep_alive = $s->keep_alive();
$prev_keep_alive = $s->keep_alive($new_keep_alive);
obj:$s("Apache2::ServerRec object")opt arg1:$new_keep_alive(boolean) β If passed, sets the new keep_alive. β οΈ Note the limited functionality under threaded MPMs.ret:$keep_alive(boolean) β Returns theKeepAlivesetting. If$new_keep_aliveis passed, returns the setting before the change.since:2.0.00
keep_alive_max
Get/set the MaxKeepAliveRequest setting, which specifies the maximum number of requests Apache will serve over a KeepAlive connection.
$keep_alive_max = $s->keep_alive_max();
$prev_keep_alive_max = $s->keep_alive_max($new_keep_alive_max);
obj:$s("Apache2::ServerRec object")opt arg1:$new_keep_alive_max(integer) β If passed, sets the new keep_alive_max. β οΈ Note the limited functionality under threaded MPMs.ret:$keep_alive_max(integer) β Returns the keep_alive_max setting. If$new_keep_alive_maxis passed, returns the setting before the change.since:2.0.00
keep_alive_timeout
Get/set the KeepAliveTimeout setting (in microsecs), which specifies how long Apache will wait for another request before breaking a KeepAlive connection.
$keep_alive_timeout = $s->keep_alive_timeout();
$prev_keep_alive_timeout = $s->keep_alive_timeout($new_timeout);
obj:$s("Apache2::ServerRec object")opt arg1:$new_keep_alive_timeout(integer) β The expected value is in microsecs. If passed, sets the newKeepAlivetimeout. β οΈ Note the limited functionality under threaded MPMs.ret:$keep_alive_timeout(integer) β Returns theKeepAlivetimeout value (in microsecs). If$new_timeoutis passed, returns the setting before the change.since:2.0.00
limit_req_fields
Get/set limit on number of request header fields.
$limit_req_fields = $s->limit_req_fields();
$prev_limit_req_fields = $s->limit_req_fields($new_limit_req_fields);
obj:$s("Apache2::ServerRec object")opt arg1:$new_limit_req_fields(integer) β If passed, sets the new request headers number limit. β οΈ Note the limited functionality under threaded MPMs.ret:$limit_req_fields(integer) β Returns the request headers number limit. If$new_limit_req_fieldsis passed, returns the setting before the change.since:2.0.00
limit_req_fieldsize
Get/set limit on size of any request header field.
$limit_req_fieldsize = $s->limit_req_fieldsize();
$prev_limit = $s->limit_req_fieldsize($new_limit);
obj:$s("Apache2::ServerRec object")opt arg1:$new_limit_req_fieldsize(integer) β If passed, sets the new request header size limit. β οΈ Note the limited functionality under threaded MPMs.ret:$limit_req_fieldsize(integer) β Returns the request header size limit. If$new_limitis passed, returns the setting before the change.since:2.0.00
limit_req_line
Get/set limit on size of the HTTP request line.
$limit_req_line = $s->limit_req_line();
$prev_limit_req_line = $s->limit_req_line($new_limit_req_line);
obj:$s("Apache2::ServerRec object")opt arg1:$new_limit_req_line(integer) β If passed, sets the new request line limit value. β οΈ Note the limited functionality under threaded MPMs.ret:$limit_req_line(integer) β Returns the request line limit value. If$new_limit_req_lineis passed, returns the setting before the change.since:2.0.00
loglevel
Get/set the LogLevel directive value.
$loglevel = $s->loglevel();
$prev_loglevel = $s->loglevel($new_loglevel);
obj:$s("Apache2::ServerRec object")opt arg1:$new_loglevel("Apache2::Const :log constant") β If passed, sets a newLogLevelvalue. β οΈ Note the limited functionality under threaded MPMs.ret:$loglevel("Apache2::Const :log constant") β Returns theLogLevelvalue as a constant. If$new_loglevelis passed, returns the setting before the change.since:2.0.00
For example, to set the LogLevel value to info:
use Apache2::Const -compile => qw(LOG_INFO);
$s->loglevel(Apache2::Const::LOG_INFO);
next
The next server record in the list (if there are vhosts).
$s_next = $s->next();
obj:$s("Apache2::ServerRec object")ret:$s_next("Apache2::ServerRec object")since:2.0.00
For example the following code traverses all the servers, starting from the base server and continuing to vhost servers, counting all available vhosts:
use Apache2::ServerRec ();
use Apache2::ServerUtil ();
my $server = Apache2::ServerUtil->server;
my $vhosts = 0;
for (my $s = $server->next; $s; $s = $s->next) {
$vhosts++;
}
print "There are $vhosts virtual hosts";
path
Get/set pathname for the ServerPath setting.
$path = $s->path();
$prev_path = $s->path($new_path);
obj:$s("Apache2::ServerRec object")opt arg1:$new_path(string) β If passed, sets the new path. β οΈ Note the limited functionality under threaded MPMs.ret:$path(string) β Returns the path setting. If$new_pathis passed, returns the setting before the change.since:2.0.00
port
Get/set the port value.
$port = $s->port();
$prev_port = $s->port($new_port);
obj:$s("Apache2::ServerRec object")opt arg1:$new_port(integer) β If passed, sets the new port. β οΈ Note the limited functionality under threaded MPMs. META: I don't think one should be allowed to change port number after the server has started.ret:$port(integer) β Returns the port setting. If$new_portis passed returns the setting before the change.since:2.0.00
process
The process this server is running in.
$proc = $s->process();
obj:$s("Apache2::ServerRec object")ret:$proc("Apache2::Process object")since:2.0.00
server_admin
Get/set the ServerAdmin value.
$server_admin = $s->server_admin();
$prev_server_admin = $s->server_admin($new_server_admin);
obj:$s("Apache2::ServerRec object")opt arg1:$new_server_admin(string) β If passed, sets the newServerAdminvalue. β οΈ Note the limited functionality under threaded MPMs.ret:$server_admin(string) β Returns theServerAdminvalue. If$new_server_adminis passed, returns the setting before the change.since:2.0.00
server_hostname
Get/set the ServerName value.
$server_hostname = $s->server_hostname();
$prev_server_hostname = $s->server_hostname($new_server_hostname);
obj:$s("Apache2::ServerRec object")opt arg1:$new_server_hostname(string) β If passed, sets theServerNamevalue. β οΈ Note the limited functionality under threaded MPMs.ret:$server_hostname(string) β Returns theServerNamevalue. If$new_server_hostnameis passed, returns the setting before the change.since:2.0.00
timeout
Get/set the timeout (TimeOut) (in microsecs), which Apache will wait for before it gives up doing something.
$timeout = $s->timeout();
$prev_timeout = $s->timeout($new_timeout);
obj:$s("Apache2::ServerRec object")opt arg1:$new_timeout(integer) β If passed, sets the new timeout (the value should be in microseconds). β οΈ Note the limited functionality under threaded MPMs.ret:$timeout(integer) β Returns the timeout setting in microseconds. If$new_timeoutis passed, returns the setting before the change.since:2.0.00
Let us repeat again: the timeout values is microseconds. For example to set the timeout to 20 secs:
$s->timeout(20_000_000);
π Notes π
Limited Functionality under Threaded MPMs
Note that under threaded MPMs, some of the read/write accessors, will be able to set values only before threads are spawned (i.e. before the "ChildInit phase"). π
Therefore if you are developing your application on the non-threaded MPM, but planning to have it run under threaded mpm, you should not use those methods to set values after the ChildInit phase.
The affected accessor methods are marked as such in their respective documentation entries. π
Unsupported API π
okay bestie, this is the "we're still cooking" corner of the kitchen. Apache2::ServerRec also hands you an auto-generated Perl interface for a few extra methods that nobody is testing at the moment, which means their API is subject to change. They'll get properly finalized later, whenever the need actually shows up. If you wanna rely on literally any of the methods below, pls hit up the mod_perl development mailing list so we can all help each other take the steps needed to move that method into the officially supported API. teamwork makes the dream work fr fr π
addrs
Grab the addrs value π
$addrs = $s->addrs();
- obj: $s (
Apache2::ServerRec object) - ret: $addrs (
Apache2::ServerAddr) β returns the addrs setting. - since: subject to change
META: this method returns a vhost-specificApache2::ServerAddrobject, which is not implemented at the moment. Peep thestruct server_addr_recentry inhttpd-2.0/include/httpd.hfor more info. It seems like most (all?) of the info in that record is available through other APIs anyway. π
lookup_defaults
Grab the lookup_defaults value β that's your MIME type info, etc., before we start checking the per-directory info. πΈ
$lookup_defaults = $s->lookup_defaults();
- obj: $s (
Apache2::ServerRec object) - ret: $lookup_defaults (
Apache2::ConfVector) β returns the lookup_defaults setting. - since: subject to change
module_config
Grab the config vector holding pointers to the modules' per-server config structures. β
$module_config = $s->module_config();
- obj: $s (
Apache2::ServerRec object) - ret: $module_config (
Apache2::ConfVector) β returns the module_config setting. - since: subject to change
names
Get and set the value(s) for the ServerAlias setting, bestie π
$names = $s->names();
$prev_names = $s->names($new_names);
- obj: $s (
Apache2::ServerRec object) - opt arg1: $new_names (
APR::ArrayHeader) β if passed, sets the new names. β οΈ Note the limited functionality under threaded MPMs. - ret: $names (
APR::ArrayHeader) β returns the names setting. If $new_names is passed, returns the setting before the change. - since: 2.0.00
META: we don't have APR::ArrayHeader yet π
wild_names
Wildcarded names for ServerAlias servers π¦
$wild_names = $s->wild_names();
$prev_wild_names = $s->wild_names($new_wild_names);
- obj: $s (
Apache2::ServerRec object) - opt arg1: $new_wild_names (
APR::ArrayHeader) β if passed, sets the new wild_names. β οΈ Note the limited functionality under threaded MPMs. - ret: $wild_names (
APR::ArrayHeader) β returns the wild_names setting. If $new_wild_names is passed, returns the setting before the change. - since: 2.0.00
META: we don't have APR::ArrayHeader yet π
See Also β¨
mod_perl 2.0 documentation. (go read it, it's giving required reading π)
Copyright π
mod_perl 2.0 and its core modules are copyrighted under The Apache Software License, Version 2.0.
Authors π
The mod_perl development team and numerous contributors. icons, all of them. π«Ά
and that's a wrap on this page bestie!! π this was perl v5.42.3, dated 2026-08-20, from libapa...verRec(3pm) β slay, go forth and configure your servers πβ¨π¦
π¦ where this page comes from
- ubuntu stonking: libapache2-mod-perl2 2.0.13-2build3 Β· Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms