Global Configuration

This content was generated with the assistance of AI and should be verified against the official Joomla documentation before being relied on in production.

This sub-section’s Joomla bibliography lists the reference material consulted while preparing these pages.

This page was written against Joomla 6.2 (the current release) and PHP 8.3 or later, and checked on 2026-10-30. The Global Configuration screen (System, Global Configuration, provided by the com_config component) is where a Super User sets the site-wide behaviour of a Joomla installation: the site name and offline mode, debugging, caching and session storage, the database connection, mail, logging, which HTML each user group may submit, and the default permissions. It is used by administrators and site builders; developers read the same values through the application configuration ($app->get('...')). This page follows the screen tab by tab, shows which property of configuration.php each setting writes, and ends with a table of safe production values for the Tallpine Hiking Club site.

Hosting requirements are covered in Requirements and Hosting, the file itself and the .htaccess rules in configuration.php and .htaccess, caching in depth in Caching and Performance, the web server and HTTPS in Web Server, Reverse Proxy and HTTPS, and hardening in Security Hardening, MFA and Passkeys.

What Global Configuration is

Global Configuration is a form over a single file. Almost every field on the Site, System, Server and Logging tabs is stored as a public property of the JConfig class in configuration.php in the site root. When a Super User presses Save, com_config merges the posted data with the current values and rewrites the whole file. The Text Filters and Permissions tabs are different: they are not written to configuration.php but to the database, as parameters of the com_config row in #__extensions (the text filters) and as rules in the root asset of #__assets (the permissions).

flowchart LR F[Global Configuration form] --> S{Which tab?} S -->|Site, System, Server, Logging| C[configuration.php<br/>class JConfig] S -->|Text Filters| X[com_config params<br/>in the extensions table] S -->|Permissions| A[Root asset rules<br/>in the assets table] C --> R[Read at the start of every request] X --> E[Applied when editor fields are saved] A --> P[Checked by every ACL decision]

Three consequences follow from that design:

  • The site cannot start without configuration.php: it holds the database credentials. When the file is missing, Joomla redirects to the installer.

  • A broken value (a wrong database host, a session handler whose server is down) can lock you out of the administrator, and then the file has to be edited by hand or through the CLI.

  • The text filters and permissions survive a restore of the file, but a database restore replaces them.

Where the page lives and how it saves

The screen needs the Configure permission (core.admin) on the root asset, which only Super Users have by default. The fields are defined in administrator/components/com_config/forms/application.xml in the source tree, and the saving code is in the ApplicationModel class of the same component. Reading the model explains several behaviours that surprise administrators:

  • Secrets are kept when omitted. The database password, the secret, the SMTP password, the OAuth 2.0 mail secret and refresh token, and the Redis passwords are listed as protected fields. If the submitted form lacks one of them, the existing value is preserved instead of being blanked.

  • The file is made writable only for the save. If the PHP process owns the file, Joomla tries to set it to 0644, writes it, and sets it back to 0444. When it cannot, it shows a notice that configuration.php is not writable or could not be made unwritable again. If the write itself fails, the save raises an error and nothing changes.

  • Handlers are validated. Choosing a cache handler is required for caching to stay on (an empty handler forces caching to Off); a file cache whose folder cannot be opened falls back to the default cache folder or turns caching off; the cache is cleaned when caching is switched off or the handler changes.

  • Switching the session handler cleans up. Changing to the database handler purges old rows from #__session; turning Session Metadata off clears the extra columns or truncates the table; a custom filesystem session path is created if it does not exist.

  • Force HTTPS is tested before it is saved. When you change the value to a non-zero setting, Joomla sends a request over HTTPS to the site root and accepts a 200, 503, 301 to 310 or 401 answer. If the request fails it resets the value to None and reports that SSL is not available. That check keeps you from locking yourself out of a site with no certificate. It does not verify the certificate, so a self-signed certificate passes the check and still fails in browsers.

The Site tab

The Site tab holds the identity of the site and the defaults for list screens.

Setting Property Notes

Site Name

sitename

Shown in the title bar and on the administrator login form. Page titles can append or prepend it (sitename_pagetitles).

Site Offline, Offline Message, Offline Image

offline, offline_message, offline_image, display_offline_message

Serves the offline page to visitors while administrators can still log in. See the guide page on site offline mode, and Error, Offline and Component Pages for the template side.

Default Access Level

access

The access level pre-selected for new items; 1 is Public.

Default Editor, Default Captcha

editor, captcha

The editor plugin (tinymce by default) and the captcha plugin used by forms that ask for one.

Default List Limit

list_limit

20 by default; choices run from 5 to 100.

Default Feed Limit, Feed Email

feed_limit, feed_email

How many items a feed carries and whether it shows the author’s email (none by default).

Front-end Editing

frontediting

Shows edit links on modules and menu items for logged-in users who may edit them.

Site Metadata

MetaDesc, MetaRights, robots

The fallback description, the content rights entry (omitted when blank) and the default robots value (blank means index and follow).

SEO: Search Engine Friendly URLs, Use URL Rewriting, Adds Suffix, Unicode Aliases

sef, sef_rewrite, sef_suffix, unicodeslugs

Rewriting needs the server rule described in SEO, SEF URLs, Redirects and schema.org. Changing Unicode Aliases affects only aliases generated afterwards. Avoid changing SEO settings on an established site, because URLs change.

Cookie Domain, Cookie Path

cookie_domain, cookie_path

Override the defaults, for example a leading dot to share cookies across subdomains, or a path for installations in sibling folders.

Pitfalls on this tab: turning on Use URL Rewriting without renaming htaccess.txt to .htaccess (or adding the equivalent nginx rule) makes every page except the home page return a 404; and a Default Editor set to a disabled editor plugin leaves article fields as plain textareas.

The System tab

The System tab combines the debug settings, the cache settings, the session settings and the optional help server.

Debug settings

Debug System (debug) switches on the debug plugin’s output (the Debug Console at the foot of the page, with queries, the profile, memory use and language strings) and makes Joomla report more detail. Debug Language (debug_lang) wraps every translated string in markers so a missing translation is visible; Debug Language Constant (debug_lang_const) chooses whether the marker shows the constant or the text. The debug console only shows to users in the groups the System - Debug plugin allows, but the extra information it collects and the verbose error pages are information disclosure on a public site.

When the administrator is unreachable because of a fatal error, you can raise the detail by editing the file directly. The guide’s procedure is to change the file permissions from 444 to 644, set debug to true and error_reporting to 'maximum', reproduce the error, read the stack trace, and revert both values and the permissions afterwards. Most such errors come from an incompatible third-party extension or from the hosting environment.

Cache and session settings

The cache and session fields live on this tab:

Setting Property Values Default in a new configuration.php

Cache

caching

0 Off, 1 Conservative, 2 Progressive

0 (Off)

Cache Handler

cache_handler

File, APCu, Memcached, Redis

'file'

Cache Time

cachetime

Minutes, at least 1

15

Platform Specific Caching

cache_platformprefix

Yes or No

No

Session Handler

session_handler

Database, Filesystem, APCu, Memcached, Redis, None, depending on installed extensions

'database'

Session Lifetime

lifetime

Minutes, 1 to 16383

15

Shared Sessions

shared_session

Yes or No

No

Session Metadata

session_metadata

Yes or No

Yes

Cache caches the output of components and modules, and each user group may see its own copy when conservative or progressive caching is used; the two non-zero modes differ in how module output is cached, which is explained in Caching and Performance. The separate System - Page Cache plugin caches whole pages for guests and is not controlled from this tab. A cache handler other than File needs its PHP extension and a reachable server, and the Memcached and Redis connection settings (memcached_server_host, redis_server_host, redis_server_port, redis_server_auth, redis_server_db) are stored in configuration.php and not shown until the matching handler is chosen.

Session Lifetime is an idle timeout in minutes: the session is invalidated after that many minutes without a request. Fifteen minutes is the default of a fresh install. Raising it keeps editors logged in during long editing sessions but leaves an unattended browser logged in for longer, so the Tallpine Hiking Club keeps the default for administrators. Session Handler decides where session data lives: the database handler stores it in the #__session table, which is the default of a new install; the filesystem handler stores files in the folder in session_filesystem_path, and the APCu, Memcached and Redis handlers keep it in memory. On a server with several web machines the database and Redis handlers are the safe choices, because a filesystem or APCu session is invisible to the other machines; this is covered in Multi-site Options and Scaling. Shared Sessions lets sub-domains of one cookie domain share a session and generates a random session name when enabled.

The source form file defaults the session handler and the cache values differently from the configuration.php-dist template shown above, so treat the file written by your installation as the authority for a given site.

Help server

Help Server (helpurl) is the URL template for the Help button. The default points to a Joomla help proxy; it is rarely changed.

The Server tab

The Server tab groups paths, error reporting, compression, HTTPS, locale, proxy and mail settings.

Setting Property Meaning

Path to Temp Folder

tmp_path

Used by the installer, the updater and uploads. Must be writable by PHP, and should not be web-readable.

Enable Gzip Page Compression

gzip

Compresses output in PHP before it is sent.

Error Reporting

error_reporting

default (the server’s PHP setting), none, simple or maximum.

Force HTTPS

force_ssl

0 None, 1 Administrator only, 2 Entire site.

Website Time Zone

offset

The time zone used for display; dates are stored in UTC.

Proxy settings

proxy_enable, proxy_host, proxy_port, proxy_user, proxy_pass

An outgoing HTTP proxy for update checks and other requests the server itself makes.

Behind a Load Balancer

behind_loadbalancer

Trust the forwarded client address and protocol headers from a reverse proxy.

CORS

cors, cors_allow_origin, cors_allow_methods, cors_allow_headers

Cross-origin headers for the web services; the origin defaults to *.

Mail

mailonline, mailer, mailfrom, fromname, replyto, sendmail, smtp*

Described below.

Database

dbtype, host, user, password, db, dbprefix, dbencryption, dbsslca and related

Connection details written by the installer.

Error Reporting offers four values. default leaves PHP’s own error_reporting untouched, so the result depends on php.ini. none turns reporting off. simple reports errors and warnings, and maximum reports everything including notices and deprecations. A production site uses none, or default when the server’s php.ini already hides errors and writes them to a log. The maximum value shows file paths and sometimes query text to visitors and is for local development only.

Gzip Page Compression is usually better done by the web server, which compresses static files as well as pages and does it faster. Enabling both is harmless but wasteful, and enabling PHP compression behind a proxy that already compresses can double-encode a response if the headers are rewritten. Leave it off when Apache (mod_deflate) or nginx (gzip on) already compresses HTML, CSS and JavaScript, and turn it on only on a host where you cannot change the web server.

Force HTTPS redirects plain HTTP requests to HTTPS: Administrator only for the back end, Entire site for everything. Production uses Entire site. A site behind a reverse proxy or load balancer that terminates TLS needs Behind a Load Balancer switched on (or the proxy configured to send the standard forwarded headers); otherwise Joomla sees plain HTTP on every request and redirects forever. Redirects done in the web server (an HTTP to HTTPS rule and an HSTS header) are cheaper, and Web Server, Reverse Proxy and HTTPS covers them.

Mail is configured here too. The guide recommends trying PHP Mail first, then Sendmail, then SMTP, with the Send Test Mail button to confirm. For SMTP set the host and port (25 without security, 465 with SSL/TLS or 587 with STARTTLS), the security mode (none by default), and turn on authentication only when the server needs it. Gmail needs an app-specific password, and the OpenSSL PHP extension must be enabled; the guide also describes sending mail with OAuth 2.0. Outgoing Mail (mailonline) switched off silently stops all mail, which is a common reason for "password reset mails never arrive". Templates are in Mail Templates and Email Settings.

The Logging tab

The Logging tab controls what Joomla writes to the log folder (log_path, /administrator/logs by default; outside the web root in a hardened install, see the path suggested in the Path to Log Folder field).

  • Log Almost Everything (log_everything) records messages of all priorities and categories. Leave it off except while troubleshooting, because the files grow quickly and contain request detail.

  • Log Deprecated API (log_deprecated) writes a line for each use of a deprecated API into deprecated.php. Developers turn it on while testing extensions against the next major, as described in Deprecations and Preparing for Joomla 7.

  • Log Priorities, Log Categories and Category Mode (log_priorities, log_categories, log_category_mode) narrow the output to chosen priorities or categories.

Only errors that Joomla itself traps are logged; the web server and PHP error logs may hold more. Log files are plain PHP files starting with a guard line so they cannot be downloaded, but they should still be kept out of the web root and rotated.

The Text Filters tab

Text filters decide which HTML a user may keep when they save content from an editor field. The tab lists every user group, and each group gets one filter type:

Filter type Behaviour

Default Blocklist

Removes a built-in list of dangerous tags and attributes (scripts, event handlers and similar).

Custom Blocklist

The default list plus the tags and attributes you add.

Allowlist

Keeps only the tags and attributes you list; everything else is removed.

No HTML

Strips all tags.

No Filtering

Saves exactly what was submitted.

When a user belongs to several groups, Joomla combines the groups' settings in the user’s favour, so one lenient group cancels a strict one: removing a user from a privileged group is the way to restrict them. Super Users are typically left on No Filtering, which is why content written by a Super User can contain a script that the same text submitted by an Author would lose. Treat that as a reason to limit the Super User group and to review third-party content pasted by administrators.

Internally the posted filter table is stored in the parameters of the com_config extension row and not in configuration.php. The component that saves the content (articles, contacts, custom fields) then applies the filter to the fields marked as HTML, using the Joomla\CMS\Filter\InputFilter class (a thin layer over the joomla/filter library, which in 6.2 is version 4.1). The filter also decodes and sanitises base64-encoded SVG data URIs inside attributes. Because the filter runs when content is saved, changing a group’s filter does not clean content that is already stored.

Why the filter matters in 6.2

An editor is a client-side tool: whatever it hides from the author, the HTTP request can still carry. The text filter is the server-side check that holds regardless of the editor, so it is the control that stops stored cross-site scripting through a rich-text field. The 6.2 release notes list Use joomla textfilter per default in tinymce among the changes: TinyMCE now follows the Joomla text filter of the logged-in user’s groups by default instead of relying on its own element lists, so what the editor offers and keeps matches what the server would keep. Older books and tutorials, such as Joomla! 4 Masterclass (2023) and Developing Extensions for Joomla! 5 (2023), describe the TinyMCE plugin’s own valid and prohibited element settings as the place to control markup; in 6.2 begin with the Text Filters tab and use the plugin settings only for editor behaviour. If the editor strips an element you need (an iframe for an embedded trail map, for example), allow it for the specific group in an Allowlist or Custom Blocklist, not by switching the group to No Filtering.

For the Tallpine Hiking Club, the Registered and Author groups use the Default Blocklist, the Trail Warden group uses a Custom Blocklist that also permits iframe for a map provider’s domain, and only Super Users have No Filtering.

The Permissions tab

The Permissions tab sets the rules on the root asset, which every other asset (components, categories, items) inherits unless it overrides them. Each user group is a row; each action (Site Login, Administrator Login, Offline Access, Super User, Access Administration Interface, Create, Delete, Edit, Edit State, Edit Own, and so on) is a column with Inherited, Allowed or Denied. Denied always wins over Allowed, and a Denied set on a parent cannot be overridden below it. The calculated setting shows whether the result is allowed, not allowed or locked.

The Permissions rules are stored in #__assets. Note that the Super User action is the one that makes a group unrestricted: grant it only to a dedicated group. The model and the rules for the Trail Warden group are explained in Users, Groups, Access Levels and ACL.

Editing configuration.php directly and from the CLI

Edit the file directly only when the screen is unavailable, and remember that Joomla keeps it read-only (0444). The CLI is safer than an editor, because it validates and writes the file the same way as the screen:

# Inside the Joomla container or on the server
php cli/joomla.php config:get debug
php cli/joomla.php config:set debug=false error_reporting=none gzip=false force_ssl=2 lifetime=15

# Several values at once, then show the result
php cli/joomla.php config:get sef sef_rewrite session_handler caching

A trimmed production configuration.php for the Tallpine site looks like this. The credentials are placeholders: the real values are never committed and the file is created from a template at deployment.

<?php
class JConfig
{
    public $offline = false;
    public $sitename = 'Tallpine Hiking Club';
    public $editor = 'tinymce';
    public $list_limit = 20;
    public $access = 1;

    public $dbtype = 'mysqli';
    public $host = 'db';
    public $user = 'tallpine';
    public $password = 'CHANGE_ME';
    public $db = 'tallpine';
    public $dbprefix = 'tp_';

    public $secret = 'CHANGE_ME_TO_A_LONG_RANDOM_VALUE';
    public $gzip = false;
    public $error_reporting = 'none';
    public $force_ssl = 2;
    public $behind_loadbalancer = true;
    public $offset = 'UTC';

    public $session_handler = 'database';
    public $lifetime = 15;
    public $shared_session = false;

    public $caching = 1;
    public $cache_handler = 'file';
    public $cachetime = 15;

    public $debug = false;
    public $debug_lang = false;
    public $log_everything = 0;
    public $log_deprecated = 0;
    public $log_path = '/var/www/tallpine-logs';
    public $tmp_path = '/var/www/tallpine-tmp';

    public $cors = false;
    public $sef = true;
    public $sef_rewrite = true;
}

The default dbprefix is generated randomly by the installer; a custom prefix is only hard to guess, not a security control. The secret is used for signing and must differ per environment, and never be copied from staging to production or committed.

Safe production values

Setting Production value Reason

Debug System / Debug Language

No

The debug console and verbose errors disclose paths, queries and configuration.

Error Reporting

None (or System Default with a PHP log)

Visitors never see error text; errors go to a log you read.

Gzip Page Compression

No when the web server compresses

Avoids double work and double encoding.

Force HTTPS

Entire Site

Protects logins and session cookies on every page.

Behind a Load Balancer

Yes only behind a trusted proxy

Without it, the HTTPS detection is wrong behind a TLS-terminating proxy.

Session Handler

Database, or Redis for several machines

A filesystem session is not shared between machines.

Session Lifetime

15 minutes, longer only for a reason

Shortens the window of a hijacked or abandoned session.

Cache

Conservative or Progressive with an appropriate handler

Reduces database load; test with logged-in content first.

Log Almost Everything

No

Log volume and sensitive request detail.

Cors origin

A named origin, not *

Required only for a headless front end, see Headless Joomla.

Text Filters

Default Blocklist or stricter for everyone but Super Users

Server-side defence against stored scripts.

configuration.php mode

0444, owned by the deploy user

A compromise of PHP cannot rewrite it casually.

Common errors

  • Locked out after Force HTTPS or a session handler change. Edit force_ssl back to 0 or session_handler to database with the CLI, or in the file after making it writable.

  • Configuration is not saved. The notice about configuration.php not being writable means the web user cannot change the mode; save once after making it 0644, or edit through the CLI as the file’s owner.

  • Redirect loop after enabling Force HTTPS behind a proxy. Set Behind a Load Balancer, or forward the protocol headers.

  • Offline site shows to administrators too. Administrators can log in through the administrator URL; the front end shows the offline page until they log in there.

  • Everything works in staging but caching shows old pages. Cache Time is in minutes and Conservative caching serves the same module output to many users; clear the cache from System, Clear Cache.

  • A restore reverts permissions and filters. They live in the database; the rest lives in the file.