Quantcast
Channel: 64 Blog
Viewing all articles
Browse latest Browse all 45

URL Rewrite で Azure の cloudapp.net ドメインを独自ドメインに書き換える

$
0
0

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 にアクセスしたときに、独自ドメインに変われば成功ですね。
201309012002
※今回は hosts ファイルに www.hogehoge.local を書いて確認しています。


Viewing all articles
Browse latest Browse all 45

Trending Articles