xxxxx.cloudapp.net
というような DNS名が、Windows Azure のクラウドサービスにアプリケーションを展開したときに提供されます。
このまま利用しても構いませんが、独自ドメインを利用したいという場合においてはCNAMEを設定することで可能になります。
ただ、CNAMEを設定しただけでは、当然 提供されているDNS名でもアクセスすることが出来てしまいます。
常に独自ドメインにする場合には、URL Rewrite を使って書き換えるのが手っ取り早いですね。
ということで、なんとなく今回は、そのまんま web.config に書かずに ServerManager クラスを使って OnStart で URL Rewrite の設定をしてみたいと思います。
[ WebRole.cs ]
using Microsoft.Web.Administration; using Microsoft.WindowsAzure.ServiceRuntime; namespace WebRole1 { public class WebRole : RoleEntryPoint { private const string DOMAIN_CLOUDAPP = @"^xxxxx\.cloudapp\.net$"; private const string DOMAIN_CUSTOM = "www.hogehoge.local"; public override bool OnStart() { // 構成の変更を処理する方法については、 // MSDN トピック (http://go.microsoft.com/fwlink/?LinkId=166357) を参照してください。 SetUrlRewrite(DOMAIN_CLOUDAPP, DOMAIN_CUSTOM); return base.OnStart(); } private void SetUrlRewrite(string domainCloudapp, string domainCustom) { using (var serverManager = new ServerManager()) { var site = serverManager.Sites[RoleEnvironment.CurrentRoleInstance.Id + "_Web"]; var app = site.Applications["/"]; var config = app.GetWebConfiguration(); var rulesSection = config.GetSection(@"system.webServer/rewrite/rules"); var rulesCollection = rulesSection.GetCollection(); var ruleElement = rulesCollection.CreateElement("rule"); ruleElement["name"] = @"FirstRule.CustomDomain"; ruleElement["stopProcessing"] = true; var matchElement = ruleElement.GetChildElement("match"); matchElement["url"] = @"(.*)"; var conditionsElement = ruleElement.GetChildElement("conditions"); conditionsElement["trackAllCaptures"] = true; var conditionsCollection = conditionsElement.GetCollection(); var addHostElement = conditionsCollection.CreateElement("add"); addHostElement["input"] = @"{HTTP_HOST}"; addHostElement["pattern"] = domainCloudapp; conditionsCollection.Add(addHostElement); var addCacheElement = conditionsCollection.CreateElement("add"); addCacheElement["input"] = @"{CACHE_URL}"; addCacheElement["pattern"] = @"^(https?)://"; conditionsCollection.Add(addCacheElement); var actionElement = ruleElement.GetChildElement("action"); actionElement["type"] = @"Redirect"; actionElement["url"] = @"{C:1}://" + domainCustom + "/{R:1}"; rulesCollection.Add(ruleElement); serverManager.CommitChanges(); } } } }
※ 参照設定に %windir%\system32\inetsrv にある Microsoft.Web.Administration を追加します。
次に ServiceDefitition.csdef に管理者権限を設定します。
<Runtime executionContext="elevated"></Runtime>
あとは、デプロイして xxxxx.cloudapp.net にアクセスしたときに、独自ドメインに変われば成功ですね。
※今回は hosts ファイルに www.hogehoge.local を書いて確認しています。