---
title: Prepare the main Sitecore content manager for a scaled environment
slug: '2416'
canonical_url: https://docs.coveo.com/en/2416/
collection: coveo-for-sitecore-v5
source_format: adoc
---
# Prepare the main Sitecore content manager for a scaled environment

Once you correctly built the whole Sitecore infrastructure, you may proceed to configure Coveo for Sitecore on your main content management instance (CM1).

## Step 1: Configure an additional database search index

Sitecore suggests adding a `pub` database, as illustrated in [Sitecore infrastructure setup](https://docs.coveo.com/en/3156.md#sitecore-infrastructure-setup).
Whether this additional database is called `pub` or something else (for example, `web2`), add a new index definition for it.

1. On `CM1`, open the `<SITECORE_INSTANCE_ROOT>\Website\App_Config\Include\Coveo\Coveo.SearchProvider.Custom.config` file in a text editor.

   > **Important**
   >
   > You shouldn't modify the `Coveo.SearchProvider.config` file directly, as it may cause unexpected upgrade issues and loss of configuration.

1. Inside the `contentSearch/configuration/indexes` element, add another `<index>` element as the last child by copy-pasting the code block for your Sitecore version.

   > **Important**
   >
   > Disable indexing of the `pub` database on all your additional CMs and CDs.
   > Patch delete the `database` parameter from your `coveoOnPublishEndAsyncPub` index update strategy.
   >
   > Configuration patching to disable indexing on CD and non-indexing CM servers is included directly in the code block below.
   > This patch relies on the [enabling of the indexing sub-role](https://doc.sitecore.com/xp/en/developers/100/platform-administration-and-architecture/enable-the-indexing-sub-role.html) on your main content manager and only on the main content manager.

   Copy and paste the following content to create the new child of the `<indexes>` element:

   ```xml
   <index id="Coveo_pub_index" type="Coveo.SearchProvider.ProviderIndex, Coveo.SearchProvider" patch:before = "*[3]">
     <param desc="p_Name">$(id)</param>
     <configuration ref="coveo/defaultIndexConfiguration" />
     <locations hint="list:AddCrawler">
       <crawler name="ContentCrawler" type="Sitecore.ContentSearch.SitecoreItemCrawler, Sitecore.ContentSearch">
         <database>pub</database>
         <root>/sitecore/content</root>
         <stopOnError>true</stopOnError>
       </crawler>
       <crawler name="MediaLibraryCrawler" type="Sitecore.ContentSearch.SitecoreItemCrawler, Sitecore.ContentSearch">
         <database>pub</database>
         <root>/sitecore/media library/Files</root>
         <stopOnError>true</stopOnError>
       </crawler>
     </locations>
     <strategies hint="list:AddStrategy">
       <strategy ref="contentSearch/indexConfigurations/indexUpdateStrategies/coveoOnPublishEndAsyncPub"/>
       <strategy role:require="ContentDelivery or !Indexing" name="coveoOnPublishEndAsyncPub" type="Sitecore.ContentSearch.Maintenance.Strategies.ManualStrategy, Sitecore.ContentSearch">
         <param desc="database">
           <patch:delete />
         </param>
         <CheckForThreshold>
           <patch:delete />
         </CheckForThreshold>
       </strategy>
     </strategies>
     <propertyStore ref="coveo/databasePropertyStore" param1="$(id)"/>
     <enableItemLanguageFallback>false</enableItemLanguageFallback>
     <enableFieldLanguageFallback>false</enableFieldLanguageFallback>
   </index>
   ```

1. Apply the following changes to the `<index>` element that you just added.

   1. The `id` attribute is set to `Coveo_pub_index` in the copied block.
If your additional database isn't named `pub`, change the `id` attribute value to reflect the name of your database (for example, `Coveo_web2_index`).

   1. The text value of the `<database>` elements in the copied block is `pub`.
If your additional database isn't named `pub`, change the text value to reflect the name of your database (for example, `<database>web2</database>`).

1. Add the following `<indexConfigurations>` element as an immediate child of the `<contentSearch>` element:

   ```xml
   <indexConfigurations>
     <indexUpdateStrategies>
       <coveoOnPublishEndAsyncPub name="coveoOnPublishEndAsyncPub" type="Sitecore.ContentSearch.Maintenance.Strategies.OnPublishEndAsynchronousStrategy, Sitecore.ContentSearch">
         <param desc="database">pub</param>
         <CheckForThreshold>true</CheckForThreshold>
       </coveoOnPublishEndAsyncPub>
     </indexUpdateStrategies>
   </indexConfigurations>
   ```

1. The text value of the `<param>` element in the block you just copied is `pub`.
If your additional database isn't named `pub`, change the text value to reflect the name of your database (for example, `<param desc="database">web2</param>`).
+
> **Important**
>
> If you make changes to the `<coveoOnPublishEndAsyncPub>` element (that is, to the element name or its `name` attribute value), ensure you match these changes in the child `<strategy>` elements of the `<index>` element you added earlier.

1. Save your changes.

## Step 2: Rebuild the search index for the additional database

Your additional database is now properly configured and can be indexed by Coveo for Sitecore.
Use the Coveo **Command Center** Indexing Manager to [rebuild the newly created index](https://docs.coveo.com/en/2426.md).

> **Important**
>
> Your Sitecore items are indexed with clickable URI values matching a `hostName` value assigned to your content management instance.
> However, the clickable URI is [automatically recomputed](https://docs.coveo.com/en/2930.md#automatic-recomputation-of-the-clickable-uri-at-query-time) whenever a Coveo-powered search interface receives search results from the index to ensure that the intended content delivery instance is hit whenever a website visitor clicks a search result.

## Step 3: Configure the `UseHostHeaderForRequestURL` setting

Under the hood, Coveo for Sitecore performs HTTP requests on its own.
To ensure that these internal HTTP requests are targeting the expected endpoint, the `aspnet:UseHostHeaderForRequestUrl` setting must be set properly (see [ASP.NET `appSettings` Element](https://learn.microsoft.com/en-us/previous-versions/aspnet/hh975440(v=vs.120)) for details).

> **Note**
>
> The `aspnet:UseHostHeaderForRequestUrl` setting must be set to `true` when the Sitecore instance is deployed behind a network load balancer (NLB).
> Omitting this setting may cause URL-resolving issues.

Follow these steps to configure the setting on the `CM1` instance:

1. Open your `web.config` file.

1. Inside `configuration/appSettings`, add the following element:

   ```xml
   <add key="aspnet:UseHostHeaderForRequestUrl" value="true" />
   ```

1. Save your changes.

## Step 4: Configure the farm name on the instance to be scaled

When scaling Sitecore instances, you must set a `Farm name` to ensure all the Sitecore instances share the same resources.
Setting a `Farm name` affects the names of the sources, field sets, security provider, and user identities.
Instead of assigning them an individual name, you give them the same label.
Follow the [Assign a farm name to resources](https://docs.coveo.com/en/2149.md) guide to configure the `CM1` instance.

> **Important**
>
> When choosing a `Farm name` different from the `CM1` host name, rebuild your Coveo indexes (see [Coveo for Sitecore indexing guide](https://docs.coveo.com/en/2216.md)).
> Some resources, like the sources, need to be rebuilt to apply the name change.
> Skipping the rebuild would cause naming inconsistencies that would prevent queries and components from reaching the right resources.

## What's next?

Now that you installed Coveo for Sitecore on your first content management instance, you may proceed either to:

* Deploy Coveo for Sitecore on an additional content management instance (see [Deploy on additional content managers](https://docs.coveo.com/en/2265.md)).

  OR

* Deploy Coveo for Sitecore on your content delivery servers (see [Deployment on the content delivery servers](https://docs.coveo.com/en/2264.md)).