@echo off
REM =====================
REM CONFIGURATION
REM =====================
REM =============================================
REM IP's for the different sites on the LB Server
REM =============================================
SET Site1IPNLB=10.0.0.51
SET Site2IPNLB=10.0.0.52
SET Site3IPNLB=10.0.0.53
REM =============================
REM IP's for back end web servers
REM =============================
SET Site1IPWeb01=10.137.13.61
SET Site2IPWeb01=10.137.13.62
SET Site3IPWeb01=10.137.13.63
SET Site1IPWeb02=10.137.13.71
SET Site2IPWeb02=10.137.13.72
SET Site3IPWeb02=10.137.13.73
REM ==============================
REM Host names for different sites
REM ==============================
SET Site1HostName=site1.torresdal.net
SET Site2HostName=site2.torresdal.net
SET Site3HostName=site3.torresdal.net
REM ==================================
REM Name of Server Farms for each site
REM ==================================
SET ARRServerFarm1=Site1
SET ARRServerFarm2=Site2
SET ARRServerFarm3=Site3
REM ============================
REM File locations for web sites
REM ============================
SET Site1FileLoc=C:\%ARRServerFarm1%
SET Site2FileLoc=C:\%ARRServerFarm2%
SET Site3FileLoc=C:\%ARRServerFarm3%
REM ==========
REM AppCmd.exe
REM ==========
SET AppCMD=%windir%\system32\inetsrv\appcmd.exe
REM =========================
REM INSTALLATION
REM =========================
Echo Installing IIS...
start /w pkgmgr /l:log.etw /iu:IIS-WebServerRole;WAS-WindowsActivationService;WAS-ProcessModel;WAS-NetFxEnvironment;WAS-ConfigurationAPI;NetFx2-ServerCore;NetFx2-ServerCore-WOW64;IIS-ManagementService
Echo Enabling remote management of IIS...
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WebManagement\Server /v EnableRemoteManagement /t REG_DWORD /d 1 /f
sc config WMSVC start= auto
Echo Installing Application Request Routing (ARR)...
net stop was /y
net stop wmsvc /y
"%~dp0utils\ARRv2_setup_x64.EXE" /Q
net start was
net start wmsvc
Echo Disable Idle Timeout on Application Pool...
%AppCMD% set apppool "DefaultAppPool" -processModel.idleTimeout:"00:00:00" /commit:apphost
%AppCMD% set config -section:system.applicationHost/applicationPools /[name='DefaultAppPool'].recycling.periodicRestart.time:"00:00:00" /commit:apphost
Echo Installing certificates...
call %~dp0_SetupCertificates.cmd
Echo Adding aditional IPs for web sites...
netsh interface ipv4 add address "Local Area Connection" %Site1IPNLB% 255.255.255.0
netsh interface ipv4 add address "Local Area Connection" %Site2IPNLB% 255.255.255.0
netsh interface ipv4 add address "Local Area Connection" %Site3IPNLB% 255.255.255.0
Echo Creating folders for web sites...
md %Site1FileLoc%
md %Site2FileLoc%
md %Site3FileLoc%
Echo Creating web sites in IIS...
%AppCMD% add site /name:%site1HostName% /bindings:"http/%Site1IPNLB%:80:,https/%Site1IPNLB%:443:" /physicalPath:"%Site1FileLoc%"
%AppCMD% add site /name:%site2HostName% /bindings:"http/%Site2IPNLB%:80:,https/%Site2IPNLB%:443:" /physicalPath:"%Site2FileLoc%"
%AppCMD% add site /name:%site3HostName% /bindings:"http/%Site3IPNLB%:80:,https/%Site3IPNLB%:443:" /physicalPath:"%Site3FileLoc%"
Echo Adding farms and servers to ARR...
%AppCMD% set config -section:webFarms /+"[name='%ARRServerFarm1%']" /commit:apphost
%AppCMD% set config -section:webFarms /+"[name='%ARRServerFarm1%'].[address='%Site1IPWeb01%']" /commit:apphost
%AppCMD% set config -section:webFarms /+"[name='%ARRServerFarm1%'].[address='%Site1IPWeb02%']" /commit:apphost
%AppCMD% set config -section:webFarms /+"[name='%ARRServerFarm2%']" /commit:apphost
%AppCMD% set config -section:webFarms /+"[name='%ARRServerFarm2%'].[address='%Site2IPWeb01%']" /commit:apphost
%AppCMD% set config -section:webFarms /+"[name='%ARRServerFarm2%'].[address='%Site2IPWeb02%']" /commit:apphost
%AppCMD% set config -section:webFarms /+"[name='%ARRServerFarm3%']" /commit:apphost
%AppCMD% set config -section:webFarms /+"[name='%ARRServerFarm3%'].[address='%Site3IPWeb01%']" /commit:apphost
%AppCMD% set config -section:webFarms /+"[name='%ARRServerFarm3%'].[address='%Site3IPWeb02%']" /commit:apphost
REM ==============================================================================
REM ALERT!: REMEMBER THAT SSL RULES FOR EACH SITE MUST BE BEFORE THE HTTP RULES!!!
REM E.g. 1) Rules for Site1 SSL
REM 2) Rules for Site1 HTTP
REM 3) Rules for Site2 SSL
REM 4) Rules for Site2 HTTP
REM 5) etc.
REM
REM If we had switched 1 and 2, it would match on HTTP first, and would
REM have redirected to a non SSL site, resulting in SSL offloading.
REM
REM If SSL offloading is the wanted behaviour, only the HTTP rule is
REM nessesary.
REM ==============================================================================
echo Adding rewriting rules to ARR...
%AppCMD% clear config -section:system.webServer/rewrite/globalRules
REM Site1 SSL
%AppCMD% set config -section:system.webServer/rewrite/globalRules /+"[name='%ARRServerFarm1%_SSL', patternSyntax='Wildcard',stopProcessing='True']" /commit:apphost
%AppCMD% set config -section:system.webServer/rewrite/globalRules /[name='%ARRServerFarm1%_SSL',patternSyntax='Wildcard',stopProcessing='True'].match.url:"*" /commit:apphost
%AppCMD% set config -section:system.webServer/rewrite/globalRules /+"[name='%ARRServerFarm1%_SSL',patternSyntax='Wildcard',stopProcessing='True'].conditions.[input='{HTTPS}',pattern='on']" /commit:apphost
%AppCMD% set config -section:system.webServer/rewrite/globalRules /+"[name='%ARRServerFarm1%_SSL',patternSyntax='Wildcard',stopProcessing='True'].conditions.[input='{HTTP_HOST}',pattern='*%Site1HostName%*']" /commit:apphost
%AppCMD% set config -section:system.webServer/rewrite/globalRules /[name='%ARRServerFarm1%_SSL',patternSyntax='Wildcard',stopProcessing='True'].action.type:"Rewrite" /[name='%ARRServerFarm1%_SSL',patternSyntax='Wildcard',stopProcessing='True'].action.url:"https://%ARRServerFarm1%/{R:0}" /commit:apphost
REM Site1 HTTP
%AppCMD% set config -section:system.webServer/rewrite/globalRules /+"[name='%ARRServerFarm1%', patternSyntax='Wildcard',stopProcessing='True']" /commit:apphost
%AppCMD% set config -section:system.webServer/rewrite/globalRules /[name='%ARRServerFarm1%',patternSyntax='Wildcard',stopProcessing='True'].match.url:"*" /commit:apphost
%AppCMD% set config -section:system.webServer/rewrite/globalRules /+"[name='%ARRServerFarm1%',patternSyntax='Wildcard',stopProcessing='True'].conditions.[input='{HTTP_HOST}',pattern='*%Site1HostName%*']" /commit:apphost
%AppCMD% set config -section:system.webServer/rewrite/globalRules /[name='%ARRServerFarm1%',patternSyntax='Wildcard',stopProcessing='True'].action.type:"Rewrite" /[name='%ARRServerFarm1%',patternSyntax='Wildcard',stopProcessing='True'].action.url:"http://%ARRServerFarm1%/{R:0}" /commit:apphost
REM Site2 SSL
%AppCMD% set config -section:system.webServer/rewrite/globalRules /+"[name='%ARRServerFarm2%_SSL', patternSyntax='Wildcard',stopProcessing='True']" /commit:apphost
%AppCMD% set config -section:system.webServer/rewrite/globalRules /[name='%ARRServerFarm2%_SSL',patternSyntax='Wildcard',stopProcessing='True'].match.url:"*" /commit:apphost
%AppCMD% set config -section:system.webServer/rewrite/globalRules /+"[name='%ARRServerFarm2%_SSL',patternSyntax='Wildcard',stopProcessing='True'].conditions.[input='{HTTPS}',pattern='on']" /commit:apphost
%AppCMD% set config -section:system.webServer/rewrite/globalRules /+"[name='%ARRServerFarm2%_SSL',patternSyntax='Wildcard',stopProcessing='True'].conditions.[input='{HTTP_HOST}',pattern='*%Site2HostName%*']" /commit:apphost
%AppCMD% set config -section:system.webServer/rewrite/globalRules /[name='%ARRServerFarm2%_SSL',patternSyntax='Wildcard',stopProcessing='True'].action.type:"Rewrite" /[name='%ARRServerFarm2%_SSL',patternSyntax='Wildcard',stopProcessing='True'].action.url:"https://%ARRServerFarm2%/{R:0}" /commit:apphost
REM Site2 HTTP
%AppCMD% set config -section:system.webServer/rewrite/globalRules /+"[name='%ARRServerFarm2%', patternSyntax='Wildcard',stopProcessing='True']" /commit:apphost
%AppCMD% set config -section:system.webServer/rewrite/globalRules /[name='%ARRServerFarm2%',patternSyntax='Wildcard',stopProcessing='True'].match.url:"*" /commit:apphost
%AppCMD% set config -section:system.webServer/rewrite/globalRules /+"[name='%ARRServerFarm2%',patternSyntax='Wildcard',stopProcessing='True'].conditions.[input='{HTTP_HOST}',pattern='*%Site2HostName%*']" /commit:apphost
%AppCMD% set config -section:system.webServer/rewrite/globalRules /[name='%ARRServerFarm2%',patternSyntax='Wildcard',stopProcessing='True'].action.type:"Rewrite" /[name='%ARRServerFarm2%',patternSyntax='Wildcard',stopProcessing='True'].action.url:"http://%ARRServerFarm2%/{R:0}" /commit:apphost
REM Site3 SSL
%AppCMD% set config -section:system.webServer/rewrite/globalRules /+"[name='%ARRServerFarm3%_SSL', patternSyntax='Wildcard',stopProcessing='True']" /commit:apphost
%AppCMD% set config -section:system.webServer/rewrite/globalRules /[name='%ARRServerFarm3%_SSL',patternSyntax='Wildcard',stopProcessing='True'].match.url:"*" /commit:apphost
%AppCMD% set config -section:system.webServer/rewrite/globalRules /+"[name='%ARRServerFarm3%_SSL',patternSyntax='Wildcard',stopProcessing='True'].conditions.[input='{HTTPS}',pattern='on']" /commit:apphost
%AppCMD% set config -section:system.webServer/rewrite/globalRules /+"[name='%ARRServerFarm3%_SSL',patternSyntax='Wildcard',stopProcessing='True'].conditions.[input='{HTTP_HOST}',pattern='*%Site3HostName%*']" /commit:apphost
%AppCMD% set config -section:system.webServer/rewrite/globalRules /[name='%ARRServerFarm3%_SSL',patternSyntax='Wildcard',stopProcessing='True'].action.type:"Rewrite" /[name='%ARRServerFarm3%_SSL',patternSyntax='Wildcard',stopProcessing='True'].action.url:"https://%ARRServerFarm3%/{R:0}" /commit:apphost
REM Site3 HTTP
%AppCMD% set config -section:system.webServer/rewrite/globalRules /+"[name='%ARRServerFarm3%', patternSyntax='Wildcard',stopProcessing='True']" /commit:apphost
%AppCMD% set config -section:system.webServer/rewrite/globalRules /[name='%ARRServerFarm3%',patternSyntax='Wildcard',stopProcessing='True'].match.url:"*" /commit:apphost
%AppCMD% set config -section:system.webServer/rewrite/globalRules /+"[name='%ARRServerFarm3%',patternSyntax='Wildcard',stopProcessing='True'].conditions.[input='{HTTP_HOST}',pattern='*%Site3HostName%*']" /commit:apphost
%AppCMD% set config -section:system.webServer/rewrite/globalRules /[name='%ARRServerFarm3%',patternSyntax='Wildcard',stopProcessing='True'].action.type:"Rewrite" /[name='%ARRServerFarm3%',patternSyntax='Wildcard',stopProcessing='True'].action.url:"http://%ARRServerFarm3%/{R:0}" /commit:apphost
REM ===============
REM Server Affinity
REM ===============
Echo Adding Server Affinity...
%AppCMD% set config -section:webFarms /[name='%ARRServerFarm1%'].applicationRequestRouting.affinity.useCookie:"True" /commit:apphost
%AppCMD% set config -section:webFarms /[name='%ARRServerFarm2%'].applicationRequestRouting.affinity.useCookie:"True" /commit:apphost
%AppCMD% set config -section:webFarms /[name='%ARRServerFarm3%'].applicationRequestRouting.affinity.useCookie:"True" /commit:apphost
REM ========================
REM Load Balancing Algorithm
REM ========================
Echo Adding Load Balancing Algorithm...
%AppCMD% set config -section:webFarms /[name='%ARRServerFarm1%'].applicationRequestRouting.loadBalancing.algorithm:"WeightedRoundRobin" /commit:apphost
%AppCMD% set config -section:webFarms /[name='%ARRServerFarm2%'].applicationRequestRouting.loadBalancing.algorithm:"WeightedRoundRobin" /commit:apphost
%AppCMD% set config -section:webFarms /[name='%ARRServerFarm3%'].applicationRequestRouting.loadBalancing.algorithm:"WeightedRoundRobin" /commit:apphost