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).
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.phpis 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 |
|
Shown in the title bar and on the administrator login form. Page titles can append or prepend it ( |
Site Offline, Offline Message, Offline Image |
|
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 |
|
The access level pre-selected for new items; 1 is Public. |
Default Editor, Default Captcha |
|
The editor plugin ( |
Default List Limit |
|
20 by default; choices run from 5 to 100. |
Default Feed Limit, Feed Email |
|
How many items a feed carries and whether it shows the author’s email ( |
Front-end Editing |
|
Shows edit links on modules and menu items for logged-in users who may edit them. |
Site Metadata |
|
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 |
|
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 |
|
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 |
|
0 Off, 1 Conservative, 2 Progressive |
0 (Off) |
Cache Handler |
|
File, APCu, Memcached, Redis |
|
Cache Time |
|
Minutes, at least 1 |
15 |
Platform Specific Caching |
|
Yes or No |
No |
Session Handler |
|
Database, Filesystem, APCu, Memcached, Redis, None, depending on installed extensions |
|
Session Lifetime |
|
Minutes, 1 to 16383 |
15 |
Shared Sessions |
|
Yes or No |
No |
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.
The Server tab
The Server tab groups paths, error reporting, compression, HTTPS, locale, proxy and mail settings.
| Setting | Property | Meaning |
|---|---|---|
Path to Temp Folder |
|
Used by the installer, the updater and uploads. Must be writable by PHP, and should not be web-readable. |
Enable Gzip Page Compression |
|
Compresses output in PHP before it is sent. |
Error Reporting |
|
|
Force HTTPS |
|
0 None, 1 Administrator only, 2 Entire site. |
Website Time Zone |
|
The time zone used for display; dates are stored in UTC. |
Proxy settings |
|
An outgoing HTTP proxy for update checks and other requests the server itself makes. |
Behind a Load Balancer |
|
Trust the forwarded client address and protocol headers from a reverse proxy. |
CORS |
|
Cross-origin headers for the web services; the origin defaults to |
|
Described below. |
|
Database |
|
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 intodeprecated.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
Source: Joomla User Guide: Using the CLI
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. |
|
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_sslback to0orsession_handlertodatabasewith the CLI, or in the file after making it writable. -
Configuration is not saved. The notice about
configuration.phpnot 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.