[Development Guides Home](/guides) >> [Guide to Perl](/guides/guide-to-perl/) # Guide to Perl in cPanel - Apache Configuration ## Overview You can customize your Apache configuration with the `Cpanel::EA4::Conf` class. ## Customize your Apache configuration Warning: * You **must** use Perl to perform these actions. * Do **not** edit the `/etc/cpanel/ea4/ea4.conf` file manually. This may cause unexpected behavior. The `Cpanel::EA4::Conf` class provides data validation. If you edit the JSON directly, you may cause server malfunctions. The `Cpanel::EA4::Conf`class allows third-party integrators to set the contents of the `/etc/cpanel/ea4/ea4.conf` file. This file consolidates all of your server's options into a single JSON file. This file also replaces the `/var/cpanel/conf/apache/local` and `/var/cpanel/conf/apache/main` files. ### Use the class To use this class, write a Perl script that utilizes the class's methods and then calls your customizations in your template. Your code might resemble the following example: ``` use Cpanel::EA4::Conf (); my $ea4cnf = Cpanel::EA4::Conf->instance(); $ea4cnf->directoryindex($new_value); $ea4cnf->save; ``` For the above example, you would use the following in your template: ``` [% ea4conf.directoryindex %] ``` ### Methods You can use the following methods in your Perl scripts with this class: | Method | Description | | --- | --- | | new() | Returns a new EA4::Conf object. You can use any configuration directive that is not read only. Your script might resemble the following example: `Cpanel::EA4::Conf->new(directoryindex => $new_value)->save;` | | instance() | Returns a new EA4::Conf object. This method allows you to create multiple instances. This is the preferred method and allows you to avoid using a global variable. Your script might resemble the following sub foo {my $ec = Cpanel::EA4::Conf->instance();…}sub bar {my $ec = Cpanel::EA4::Conf->instance();…}You can also use the same arguments that the new() method uses. | | warn_unsaved() | Returns a warning if unsaved changes exist. This method only accepts an argument of `0` or `1`. | | conf_attrs() | Returns an array reference of the directives that you can configure. | | save() | Save the current values to the `/etc/cpanel/ea4/ea4.conf` JSON file. | | as_hr() | Returns the configuration object in a hash reference. | | as_distiller_hr() | Returns the configuration object in a hash that the distiller can use. This method does not accept an argument. This method only exists to support older servers. | | save_from_hr($hr) | Writes the known configurations in the $hr hash reference to an object, and then saves the object. | | is_dirty() | Returns a true value if any configuration directive exists. This method does not accept an argument. | | local_attrs() | Returns a hash reference of local attributes. Use this method to update arbitrary configuration data. Your code might resemble the following example:my $e4c = Cpanel::EA4::Conf->instance();$e4c->local_attrs->{foo} = 42;$e4c->local_attrs->{bar} = "oh hai";delete $e4c->local_attrs->{baz};$e4c->save;In your custom template, you would use the following entries:[% ea4conf.local_attrs.foo %][% ea4conf.local_attrs.bar %] | ### Configuration directives This class includes several directives that you can configure. To retrieve a value, your code might resemble the following example: ``` my $directoryindex = $conf_obj->directoryindex; ``` To set the value of a directive, your code might resemble the following example: ``` $conf_obj->directoryindex("index.js index.html"); ``` You can set the following directives with this class: Note: Except where specified, you can set all of the following directives in the *Global Configuration* section of WHM's [*Apache Configuration*](https://docs.cpanel.net/whm/service-configuration/apache-configuration/) interface (*WHM >> Home >> Service Configuration >> Apache Configuration*). | Directive | Description | Arguments | | --- | --- | --- | | `directoryindex` | Sets the files that the server returns when a URL does not refer to a specific file. You can also set this directive in the DirectoryIndex Priority section of WHM's [*Apache Configuration*](https://docs.cpanel.net/whm/service-configuration/apache-configuration/) interface (*WHM >> Home >> Service Configuration >> Apache Configuration*). | A space-separated string | | `extendedstatus` | Shows more details about incoming requests. | OnOff | | `fileetag` | Determines the amount of information that Apache provides to visitors who request a file via HTTP. | All`None``INode MTime``INode Size``MTime Size``INode MTime Size` | | `keepalive` | Enables or disable persistent HTTP connections. | OnOff | | `keepalivetimeout` | The number of seconds that Apache waits for another request before it closes a connection. | An integer greater than `0`, in seconds | | `logformat_combined` | The Apache log file's format, including the referrer and user agent strings. | A string. | | `logformat_common` | The Apache log file's format. | A string. | | `loglevel` | The verbosity of the error log. | `emerg``alert``crit``error``warn``notice``info``debug` | | `maxrequestworkers` | Sets the limit on the number of simultaneous requests that Apache serves. | An integer greater than `0`. | | `maxkeepaliverequests` | The number of requests that a persistent connection allows. | An integer greater than `0`. | | `maxconnectionsperchild` | The number of requests that an individual child server process can handle. | An integer greater than `0`. | | `maxspareservers` | Sets the maximum number of idle child server processes. | An integer greater than `0`. | | `minspareservers` | Sets the minimum number of idle child server processes. | An integer greater than `0`. | | `rlimit_cpu_hard` | Maximum number of CPU seconds a process can use. | An integer greater than `0`. | | `rlimit_cpu_soft` | Maximum number of CPU seconds a process can use. | An integer greater than `0`. | | `rlimit_mem_hard` | Maximum number of bytes seconds a process can use. You can also set this directive in the *Memory Usage Restrictions* section of WHM's [*Apache Configuration*](https://docs.cpanel.net/whm/service-configuration/apache-configuration/) interface (*WHM >> Home >> Service Configuration >> Apache Configuration*). | An integer greater than `0` or a blank string. | | `rlimit_mem_soft` | Maximum number of bytes seconds a process can use.You can also set this directive in the *Memory Usage Restrictions* section of WHM's [*Apache Configuration*](https://docs.cpanel.net/whm/service-configuration/apache-configuration/) interface (*WHM >> Home >> Service Configuration >> Apache Configuration*). | An integer greater than `0` or a blank string. | | `root_options` | Sets options that pertain to the root (`/`) directory. | A space-separated list that contains one or more of the following strings:`ExecCGI``FollowSymLinks``Includes``IncludesNOEXEC``Indexes``MultiViews``SymLinksIfOwnerMatch` | | `serverlimit` | The maximum configured value for the MaxRequestWorkers directive for the lifetime of the Apache process. | An integer greater than `0`. | | `servername` | The default server name. This value is read-only and you cannot change it with this class. | None. | | `serveradmin` | The server administrator's email address. This value is read-only and you **cannot** change it with this class. | None. | | `serversignature` | Whether the server information appears in error results and other information that the server generates. | `On``Off``Email` | | `servertokens` | The amount of information that Apache provides to visitors in Server HTTP response headers. | `ProductOnly``Minimal``OS``Full` | | `sslciphersuite` | Sets the OpenSSL ciphers that Apache uses. | A string of colon-separated ciphers. | | `sslprotocol` | The SSL and TLS protocols that the client and server negotiate during the SSL/TLS handshake phase. | A space-separated string of protocols. | | `startservers` | The number of child server processes that Apache creates when it starts. | An integer greater than 1. | | `symlink_protect` | Enables the Symlink Protection patch. This improves Apache's ability to detect a race condition. | `On``Off` | | `timeout` | The amount of time, in seconds, that Apache waits for an event before the request fails. An integer between `3` and `604800`. | | | `traceenable` | Allows or disallows TRACE requests. | `On``Off``Extended`. | ## Customize your Apache configuration in the user interface The WHM interface provides several ways to customize your Apache configuration: * cPanel & WHM sets several Apache directives by default. These directives affect the whole server. To change these directives, use the *Global Configuration* section of WHM's [*Apache Configuration*](https://docs.cpanel.net/whm/service-configuration/apache-configuration/) interface (*WHM >> Home >> Service Configuration >> Apache Configuration*). * To modify the Apache configuration's include files through WHM, use the `Include Editor` section of WHM's [*Apache Configuration*](https://docs.cpanel.net/whm/service-configuration/apache-configuration/) interface (*WHM >> Home >> Service Configuration >> Apache Configuration*). We provide several other ways to customize your system. You can also create custom configurations with the following actions: * Create a custom template file for your Apache configuration. For more information, read our [Custom Templates](https://docs.cpanel.net/ea4/apache/custom-templates/) documentation. * Add include files for your virtualhosts. For more information, read our [Modify Apache Virtual Hosts with Include Files](https://docs.cpanel.net/ea4/apache/modify-apache-virtual-hosts-with-include-files/) documentation. For more information, read our [Advanced Apache Configuration](https://docs.cpanel.net/ea4/apache/advanced-apache-configuration/) documentation.