Production ColdFusion 2025 behind a shared Apache: the installation takes 34 seconds, the details take the attention

We prepared a production installation of Adobe ColdFusion 2025 on Debian 12, behind an Apache 2.4 that already serves several other sites. The installation itself takes 34 seconds. The attention went into the connector and the configuration details that are easy to miss: an error 503 caused by IPv6, mappings that reach into every virtual host, and a profile that quietly adds a debugger.

  • Installation in 34 seconds, no errors, no warnings
  • The other services on the Apache unchanged
  • 5 of 5 Apache restarts without a failure
A browser window sends one lane to a box labelled Apache; from it three lanes lead to boxes labelled PHP, PHP and CFML; the CFML lane with a small connector diamond and its box are orange, the two PHP boxes carry ticks

An Adobe ColdFusion application server on Debian 12, behind an Apache 2.4 shared with PHP services

Challenge

The task: a production installation of Adobe ColdFusion 2025, connected to an existing Apache 2.4 on Debian 12. The Apache already serves several other sites, PHP 8.2 on the prefork MPM and reverse proxies to containers, and none of them may notice the change.

Three things made it harder than the manual suggests. The connector tool of ColdFusion, wsconfig, does not recognise Debian. Two installers with almost the same name were on offer, the original release and a refreshed build, and we had to know which was which before anything ran. And the JVM configuration, heap and garbage collector, was to stay at its defaults.

Solution

We identified the builds without running them: the installer carries a ZIP archive, so a listing shows the build dates and package versions. Then an installation in silent mode from a properties file, based on the official Adobe template: production and secure profile, standalone server, administrator panel only from listed addresses, no add-ons that the application does not use.

The Apache connector was configured with the option that does not restart anything. First a review of the changes, backups, and a record of the HTTP codes of the other services; only then the restart, after a configuration test. A separate virtual host and a CFML test page show the server version, Java, the connector and the heap parameters. The whole procedure ran on the production server; the other sites stayed up throughout, apart from the restart of Apache that the connector needs.

Results

Version installed (as of 2026-10)
ColdFusion 2025 Update 8
Silent installation
34 seconds
Installer log
2 618 operations, 0 warnings, 0 errors
Start of the ColdFusion server
Under 15 seconds
Other services on the Apache
The same HTTP codes before and after the change
Apache stop and start cycles
5 of 5 without a failure, 0 changes to the JVM configuration

How we worked

  1. Identify the build without running it

    The installer file carries a ZIP archive, so a listing shows the build dates and package versions. The newer one is ColdFusion 2025 Update 8.

  2. Prepare the server and the licence

    A dedicated system user without a shell for the service, the installation directory and the licence file for the activation, before the installer runs.

  3. Install in silent mode

    A properties file based on the Adobe template: production and secure profile, standalone server, administrator panel only from listed addresses, no Solr, PDF generation or JNBridge, unused servlets off.

  4. Configure the connector without a restart

    wsconfig with the option that leaves Apache running. Review of the changes, backups of the Apache configuration, a record of the HTTP codes of the other services, then a configuration test and the restart.

  5. A separate virtual host and a test page

    The CFML page shows the server version, Java, the connector and the heap parameters, so every later check takes seconds.

  6. Diagnose the 503 and test the regression

    The other services, five stop and start cycles of Apache and the access to the administrator panel were checked before the procedure was declared done.

Challenges we overcame

None of the five points below is in the installation manual, and each of them costs an afternoon when it comes as a surprise.

Error 503 although ColdFusion runs: localhost is not always 127.0.0.1

After the connector was in place, Apache answered 503 Service Unavailable while ColdFusion itself answered correctly. wsconfig writes the name localhost as the address of the ColdFusion server. The connector resolved it to the IPv6 address ::1, and the AJP connector of the Tomcat inside ColdFusion listens only on 127.0.0.1. The connector log says what to look for:

connect to ::1:8024 failed (errno=111)
(cfusion) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=111)

The fix is the address 127.0.0.1 in the worker definition and in the properties file in which wsconfig keeps the connector parameters, so that a later run of the tool does not bring the name back. On a new installation the tool accepts the address as an option. What not to do: open the AJP port on all interfaces. An open AJP port is a known attack vector, Ghostcat, CVE-2020-1938.

The connector reaches into every virtual host

No symptom at all, and that is the problem: nothing breaks until another site on the same Apache uses a path the connector regards as its own. wsconfig in ColdFusion 2025 copies the mappings into every virtual host, and they cover more than CFML files:

/rest/* = cfusion
/restapps/* = cfusion
/mcs = cfusion
/cffileservlet/* = cfusion
/*.jsp = cfusion

A PHP application with an API under /rest/ on the same server could end up in ColdFusion. Before the restart we searched the access logs of the other services for these paths, found nothing, and recorded their HTTP codes; after the restart we compared. Where a collision is real, the tool can configure the connector for one virtual host only.

The connector changes more than you see

On Debian the tool copies the module and creates its configuration directly in the Apache directory, while two further files land in the ColdFusion directory. It appends two include lines to the main Apache configuration, and it adds a secret to the AJP connector in the server configuration of ColdFusion, so ColdFusion has to be restarted too. It does not recognise Debian, which turns out to be harmless. The lesson: the connector files live in two places, so backups, configuration management and updates have to cover both.

Reports of Apache crashes after the connector

On the Adobe forum, users of ColdFusion 2025 reported that Apache on Ubuntu would randomly fail to start after the connector was added. We ran five full stop and start cycles on Apache 2.4.67 with the connector module of the April 2026 build, as of 2026-10: every cycle ended with a clean start and a response from the test page, and the system journal showed no crash. On a shared server this test belongs to the installation, not to the first restart after a system update.

The server profile is not a formality

The JVM configuration template in the installer carries a default heap and the parallel garbage collector. An installation with the development profile adds a debugger agent at the front of the JVM arguments, which is not in the template. In production we choose the production and secure profile and read the JVM configuration after the installation instead of assuming it is the default. For the same reason we never copy that file from a test environment to production. How a heap that is too small for the load behaves is the subject of another project.

A box labelled Apache with the word localhost under it sends two lanes to the right: the upper one labelled ::1 ends at a cross, the lower orange one labelled 127.0.0.1 reaches a box labelled CFML with AJP 8024 under it

The five traps at a glance

Trap What you see What we did
localhost resolves to IPv6 Apache answers 503, ColdFusion answers The address 127.0.0.1 in both connector files; AJP stays closed to the outside
Mappings in every virtual host Nothing, until another site uses a mapped path Access logs of the other services checked, HTTP codes recorded and compared
Connector files in two places A restart of Apache alone is not enough Backups of both directories, restart of ColdFusion after the connector
Reported Apache crashes Random failure to start after the connector Five stop and start cycles as part of the installation
Development profile A debugger agent in the JVM arguments Production and secure profile, JVM configuration read after the installation

What we take from it

The checklist we now use for a production ColdFusion 2025 behind Apache on Debian:

  • Identify the build of the installer from its archive listing and take the newest.
  • Prepare the service user, the directory and the licence file before the installer runs.
  • Install in silent mode from a properties file: production and secure profile, administrator addresses listed, unused servlets off.
  • Run the connector tool with the loopback address and without a restart, after a backup of the Apache configuration.
  • Check the copied mappings for collisions with the other virtual hosts.
  • Restart ColdFusion as well after the connector, because of the new AJP secret.
  • Record the HTTP codes of the other services before the Apache restart and compare them after it.
  • Run several stop and start cycles of Apache.
  • Read the JVM configuration after the installation before you call it default.

Two things worth knowing: the silent installer creates and enables a systemd service on its own, under a name that does not contain the word coldfusion; and with an empty list of administrator addresses the installer limits the panel to the local machine and the connector excludes the administrator path, so the panel answers 404 through Apache.

Sources

A checklist sheet with a clip at the top and six rows, each with a line and a tick on its left; the last tick is orange

Related situations

  • According to Adobe, ColdFusion 2021 has received no security patches since 10 November 2025. We compare four routes: stay and harden, update, move to Lucee or replace the system step by step, with dates and risks (As of 2026-10).

  • Support for Debian 11 ended on 31 August 2026, and for CentOS 7 on 30 June 2024 (As of 2026-10). We will upgrade your server, or plan and carry out the move to Debian. We also work with Proxmox VE 8 and with physical servers that we move to Proxmox.

More projects

  • A score scale with a dashed threshold: the phishing envelope moves in an orange arc across the threshold

    A spam filter that ran but did not protect

    Services up, configuration valid, no errors in the system status. Yet phishing landed in the inboxes while partners' newsletters went to spam. Our engineers measured which detection mechanisms actually fired, repaired the causes, and three months later found and fixed a regression that only showed up hour by hour.

  • Four envelopes pass the gates SPF, DKIM and DMARC, each ticked in orange, on the way into the inbox

    Email deliverability for four company domains

    A mail server for four company domains signed nothing, published no DMARC policy and was rejected by Microsoft. Our engineers audited it, piloted the change on one domain and rolled it out in batches. The result: all three checks pass at Gmail, the Microsoft block was lifted, and the users noticed nothing.

In 20 minutes we work out which first step fits your system

You tell us the goal and the current state, and we say openly whether and how we can help. Reply within one working day, no obligation.

Phone (German, Polish, English) +48 501 250 220
Email Email

Reachable: Monday to Friday, 9:00 to 17:00 Central European Time; support and emergencies around the clock (24/7)