Running Multiple Craft Installations from the Same Domain

If you need to run multiple Craft CMS installations from the same domain, there are a couple things you should do to ensure your Craft installs are able to run independently of each other.

If you are running Craft on multiple subdomains, such as www.example.com and foo.example.com, then by default you don’t need to do anything special, unless you’ve changed your defaultCookieDomain config setting to .example.com.

Check your license keys #

First, check your config/license.key files to make sure that each of your installations have their own unique license keys. If they are identical, purchase a new Craft Pro license from plugins.craftcms.com and save your new license.key file to one of your Craft installations.

Use unique application IDs #

Each Craft install should have its own unique application ID, which is used to namespace your PHP session data, database-based mutex locks, Redis cache data, and other things.

You can give your installs unique application IDs from config/app.php:

return [
    'id' => 'your-unique-app-id',
    // ...
];

Craft 3.4.25 and later will set a unique application ID on itself automatically during installation.

Use unique security keys #

To improve security, ensure that each of your Craft installs have their own security keys. Security keys are typically defined by a SECURITY_KEY environment variable, defined by your .env file or as part of your server configuration.

Use the ./craft setup/security-key command to generate a new, cryptographically secure key.

Use unique CSRF tokens #

Give each of your installations their own unique csrfTokenName config setting values, to avoid invalid POST request errors when users are logged into both installs at the same time.

Use unique PHP session names #

As a security measure, Craft destroys all of users’ PHP session data upon logout, which could result in the user being logged out of other Craft installs as well. To avoid that, give each of your installs their own unique phpSessionName config setting values, so users will get completely separate PHP sessions for each of your installs.