If the worker instance is removed from the service plan, and the ARRAffinity of this removed instance would become invalid. To simulate this operation, we update the above ARRAffinity to an invalid value.
Access the web app through the subdomainhttp://www.boqianwebsite.org, we will see that the invalid ARRAffinity cookie was still the request header. However, in the response header, a new ARRAffinity is set withwww.boqianwebsite.orgas the domain value.
If we keep refreshing the pagewww.boqianwebsite.org, the request headers will always contain two ARRAffinity cookies:
A ARRAffinity for the subdomain (www.boqianwebsite.org) is keep changing from the response header when refreshing the page
This issue are caused by 2 facts:
If the ARRAffinity cookies have a different domain value, the browser will take it as a different cookies. That's why when we are accessing the subdomain after the root domain, a new ARRAfifnity Cookies was set in the response header.
The App Service always pick up the first ARRAffinity value from the request header. If the first ARRAffiniity value is invalid due to the instance has been removed from the service plan (by scale in or UD walk), the FrontEnd will try to find a new valid worker instance with a new ARRAffinity value to the client. But this new ARRAffinity value will always be saved into the second subdomain's cookies, which cannot be picked up by the App Service FrontEnd.
To solve this problem, we have 2 options:
Ignore the domain name and keep only one ARRAffinity Cookies at the client side
Update the App Service FrontEnd to pick up the ARRAffinity, which has the same domain name as the request has.
Considering the implementation of those two options and the customer's environment (they has direction rule, which hoping the user can access the site from the subdomain instead of root domain), we chose the option 1: We keep the subdomain's ARRAffinity cookies only, then the app service FrontEnd can always pick up the correct one. And this can be easy achieve by adding the below path of code into the web.config:Set ARRAffinity Cookies after direction.
<!-- disable the ARRAffinity cookie, returned only when redirection occurs. -->
<add name="Arr-Disable-Session-Affinity" value="true" />
After this change, when we access the web app with the root domainhttp://boqianwebsite.org, we can see that there is a new header added in the responseArr-Disable-Session-Affinity: true, but there is no ARRAffinity cookies was set.
The ARRAffinity was set only when the request directed to the subdomainwww.boqianwebsite.org, and if we refresh the page, this cookies keeps the same.