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

URL Rewrite を使って URL を小文字にする。

$
0
0

概要

タイトルのまんまなんですが、URL Rewrite を使って URL を強制的に小文字にしてリダイレクトさせる方法です。

URL Rewrite には、下記の3通りの文字の書き換え機能を持っています。

  • UrlDecode
  • UrlEncode
  • ToLower

今回 下記のルールは、この文字の書き換え機能の ToLower を使って、大文字 が条件にマッチしたときに、小文字に書換えてリダイレクトするようにしています。

 

ルール

<rewrite>
  <rules>
    <rule name="FirstRule.Lowercase" stopProcessing="true">
        <match url=".*" />
        <conditions>
            <add input="{REQUEST_URI}" pattern="(^.*[A-Z].*$)" ignoreCase="false" />
        </conditions>
        <action type="Redirect" url="{ToLower:{C:1}}" appendQueryString="false" />
    </rule>
  </rules>
</rewrite>

※ web.config の system.webServer セクションに 上記の設定を追加するだけです。

 

結果


dism で IIS8.5 のインストール

$
0
0

はじめに

かねてより、このブログでは DISM コマンドを用いて IIS をインストールする内容を書いてきていました。
しかし、とうの昔に Windows Server 2012 R2 が販売開始されているのにも関わらず、未だに書いていなかったため 、今回は DISM で IIS8.5 をインストールしてみようと思います。

インストールコマンド

下記の DISM コマンドを実行した場合。

dism /online /enable-feature `
 /featurename:NetFx3ServerFeatures `
 /featurename:NetFx3 `
 /featurename:NetFx4ServerFeatures `
 /featurename:NetFx4 `
 /featurename:NetFx4Extended-ASPNET45 `
 /featurename:IIS-WebServerRole `
 /featurename:IIS-WebServer `
 /featurename:IIS-CommonHttpFeatures `
 /featurename:IIS-Security `
 /featurename:IIS-RequestFiltering `
 /featurename:IIS-StaticContent `
 /featurename:IIS-DefaultDocument `
 /featurename:IIS-DirectoryBrowsing `
 /featurename:IIS-HttpErrors `
 /featurename:IIS-HttpRedirect `
 /featurename:IIS-WebDAV `
 /featurename:IIS-ApplicationDevelopment `
 /featurename:IIS-WebSockets `
 /featurename:IIS-ApplicationInit `
 /featurename:IIS-NetFxExtensibility `
 /featurename:IIS-NetFxExtensibility45 `
 /featurename:IIS-ISAPIExtensions `
 /featurename:IIS-ISAPIFilter `
 /featurename:IIS-ASPNET `
 /featurename:IIS-ASPNET45 `
 /featurename:IIS-ASP `
 /featurename:IIS-CGI `
 /featurename:IIS-ServerSideIncludes `
 /featurename:IIS-HealthAndDiagnostics `
 /featurename:IIS-HttpLogging `
 /featurename:IIS-LoggingLibraries `
 /featurename:IIS-RequestMonitor `
 /featurename:IIS-HttpTracing `
 /featurename:IIS-CustomLogging `
 /featurename:IIS-ODBCLogging `
 /featurename:IIS-CertProvider `
 /featurename:IIS-BasicAuthentication `
 /featurename:IIS-WindowsAuthentication `
 /featurename:IIS-DigestAuthentication `
 /featurename:IIS-ClientCertificateMappingAuthentication `
 /featurename:IIS-IISCertificateMappingAuthentication `
 /featurename:IIS-URLAuthorization `
 /featurename:IIS-IPSecurity `
 /featurename:IIS-Performance `
 /featurename:IIS-HttpCompressionStatic `
 /featurename:IIS-HttpCompressionDynamic `
 /featurename:IIS-WebServerManagementTools `
 /featurename:IIS-ManagementConsole `
 /featurename:IIS-LegacySnapIn `
 /featurename:IIS-ManagementScriptingTools `
 /featurename:IIS-ManagementService `
 /featurename:IIS-IIS6ManagementCompatibility `
 /featurename:IIS-Metabase `
 /featurename:IIS-WMICompatibility `
 /featurename:IIS-LegacyScripts `
 /featurename:IIS-FTPServer `
 /featurename:IIS-FTPSvc `
 /featurename:IIS-FTPExtensibility `
 /featurename:WAS-WindowsActivationService `
 /featurename:WAS-ProcessModel `
 /featurename:WAS-NetFxEnvironment `
 /featurename:WAS-ConfigurationAPI `
 /featurename:IIS-HostableWebCore

結果

201404222113

IIS系のコンポーネントが全部入ります。

近頃、IIS をインストールするという作業自体がめっきり減っていますので、いまさらという感じですが、たぶんそのうち IaaS とかオンプレ上でインストールする時がくるんじゃないかと思ったのでメモとして残します。

過去のインストール

Azure の Windows Server 2012 R2 仮想マシンで Web PI 5.0 から PHP 5.5 をインストールして 500 エラーが発生したら。

$
0
0

さて、ながい名前のタイトルですが、どうやら Web PI が 4.6 から 5.0 にバージョンアップしていたらしく、Azure の Windows Server 2012 R2 の仮想マシンに、Web PI 5.0 から PHP 5.5 をインストールした場合、下記の500エラーが発生するようになりました。

HTTP Error 500.0 – Internal Server Error
C:\Program Files (x86)\PHP\v5.5\php-cgi.exe – The FastCGI process exited unexpectedly

 
201405131708

 

対処方法としては、仮想マシンに手動で Visual C++ Redistributable for Visual Studio 2012 Update 4 をインストールしましょう。
http://www.microsoft.com/en-us/download/details.aspx?id=30679

インストールにムズカシイ部分はありません。インストールしてしまえば、下図のようにPHPが動くはずです。
201405131748

 

Web PI 4.6 で PHP 5.5 をインストールした時は、一緒にインストールされていたんですけどね。
201405131713

Web PI 5.0 では、一緒にインストールされてないですね。
201405131721

Azure 仮想ネットワークに YAMAHA RTX810 で VPN 接続

$
0
0

YAMAHA RTX810 で Azure の仮想ネットワークにVPNを接続させました。
多少 ヤマハさんのサイトとは微妙に違うコンフィグになっているので、自分用のメモとして残しておきます。

Windows AzureとのIPsec接続 設定例

なぜ、違うコンフィグなのかというと…。
私の環境では、設定例通りだと約2~3日で不定期に約1時間ほどトンネルがダウンして、再度 トンネル確立。で、また約2~3日経ったら約1時間ほどトンネルダウン。の繰り返しが起きてしまってました。

この約1時間のトンネルダウンは厳しいので、解消すべく なんやかんやして出来上がったのが下記のコンフィグです。
※あくまで私の環境でのお話です。
※ログを見るかぎり これでカンペキ! なんてことはないのですが、約1時間のトンネルダウンは解消しているので 個人的にはそこそこ使い物にはなるんじゃなかろうかと。。

  • 機種:RTX810
  • リビジョン:Rev.11.01.19

tunnel select 2
ipsec tunnel 102
   ipsec sa policy 102 2 esp aes256-cbc sha256-hmac anti-replay-check=off
   ipsec ike duration ipsec-sa 2 3600
   ipsec ike encryption 2 aes256-cbc
   ipsec ike group 2 modp1024
   ipsec ike hash 2 sha256
   ipsec ike keepalive use 2 on dpd
   ipsec ike local address 2 "ルーターLAN側IPアドレス"
   ipsec ike local id 2 "ルーターLAN側IPアドレス/サブネット(CIDR表記)"
   ipsec ike nat-traversal 2 on
   ipsec ike payload type 2 3
   ipsec ike backward-compatibility 2 2
   ipsec ike pfs 2 on
   ipsec ike pre-shared-key 2 *
   ipsec ike remote address 2 "AzureゲートウェイIPアドレス"
   ipsec ike remote id 2 "仮想ネットワークのゲートウェイのアドレス/サブネット(CIDR表記)"
ipsec tunnel outer df-bit clear
ip tunnel tcp mss limit 1350
tunnel enable 2

違う部分はトンネルインターフェース内の設定です。それ以外の設定は、Azure の仮想ネットワークの設定も含め 基本的に同じなので省略しています。

IIS 8.5 の アイドルタイムアウト時の動作をサスペンドに設定した Azure クラウドサービスを利用する。

$
0
0

はじめに

IISでは既定の時間内(デフォルトは20分)にアクセスが無かった場合はタイムアウトと認識して、該当するサイトをホストしているワーカープロセスをシャットダウンする動作が行われます。

が、ワーカープロセスのシャットダウン以降での初リクエストに対しては、当然 ワーカープロセスの起動から行う必要がありますので、その初リクエストに対するレスポンスタイムは遅くなってしまいます。

しかし IIS 8.5 では、ワーカープロセスをシャットダウンさせずにサスペンド状態にしておくことが出来るようになりました。
この設定を変更するには、下図のようにアプリケーションプールの「Idle Time-out Action」の値を「Terminate」から「Suspend」に変更することで可能になります。
201407182038

 

クラウドサービスへの設定

それでは Azure の CloudService を利用する際に、このアイドルタイムアウトの動作をサスペンドになるようにWebロールに設定してみましょう。

  1. Webロールを含んだプロジェクトを作って、ServiceDefitition.csdef を開いて管理者権限に設定します。
  2. ServiceConfiguration.Cloud(Local).cscfgファイルの osFamily が 4 に設定されていることを確認します。
  3. 参照設定に %windir%\system32\inetsrv にある Microsoft.Web.Administration を追加します。
  4. WebRole.cs を下記のように編集してデプロイします。
using System;
using Microsoft.Web.Administration;
using Microsoft.WindowsAzure.ServiceRuntime;

namespace WebRole1
{
    public class WebRole : RoleEntryPoint
    {
        public override bool OnStart()
        {
            // For information on handling configuration changes
            // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.

            InitializeApplicationPool();
            return base.OnStart();
        }

        private void InitializeApplicationPool()
        {
            using (var serverManager = new ServerManager())
            {
                var site = serverManager.Sites[RoleEnvironment.CurrentRoleInstance.Id + "_Web"];
                var app = site.Applications["/"];

                var apppool = serverManager.ApplicationPools[app.ApplicationPoolName];
                apppool.ProcessModel.IdleTimeoutAction = IdleTimeoutAction.Suspend;

                // 手っ取り早く確認するためにタイムアウト値を変更
                apppool.ProcessModel.IdleTimeout = new TimeSpan(0, 5, 0);

                serverManager.CommitChanges();
            }
        }
    }
}

 

結果

アプリケーションプールの設定から「Idle Time-out Action」が、キチンと変更されています。
201407182134

また、タイムアウトしたワーカープロセスはシャットダウンされずメモリの消費も抑えられています。
201407182142

当然、タイムアウトしててもワーカープロセスは起動したままなので、初回のリクエストもサクッと応答してくれてます。
201407182150

参考までに、ワーカープロセスがシャットダウンした場合の初回リクエストの状況も確認しておきます。
201407182144

 

参考

applicationHost.config での変更方法
http://www.iis.net/learn/get-started/whats-new-in-iis-85/idle-worker-process-page-out-in-iis85

Azure の Webサイトでリバースプロキシを構成する

$
0
0

Azure Webサイトでリバースプロキシを構成する方法が紹介されていました。
http://ruslany.net/2014/05/using-azure-web-site-as-a-reverse-proxy/

 

内容としては…。applicationHost.xdt でARRを有効にして Web.Config で振り分けのルールを反映させる。という感じみたいですね。

ということで、オモシロそうなので簡単に試してみたいと思います。

 

まずは、なんとなく適当にWebサイトを2個ほど適当に用意します。
201408041719

 

この状態で、IISマネージャーから test-a のWebサイトに接続して「URL 書き換え」の機能から「リバースプロキシ」規則のテンプレートを追加してみると…。
201408041729
当然、ARRが有効になっていないためエラーになります。

 

なので、ARRを有効にするために、下記の内容で applicationHost.xdt を作成して Site フォルダに保存します。
参考)https://github.com/projectkudu/kudu/wiki/Azure-Site-Extensions

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.webServer>
    <proxy xdt:Transform="InsertIfMissing" enabled="true" preserveHostHeader="false" reverseRewriteHostInResponseHeaders="false" />
  </system.webServer>
</configuration>

201408041733

 

.xdt ファイルを保存したら内容を読み込ませるために、Webサイトを Restart させます。
201408041735

 

これで、ARRが有効になったので、試しにさきほどの IIS マネージャーから、「URL 書き換え」の機能から「リバースプロキシ」規則のテンプレートを適当に追加してみると 問題なく 追加できるはずです。
201408041730
※追加したルールは削除しておきます。

 

次に URL Rewrite を使ってリバプロ用のルールを定義します。
さきほど接続したIISマネージャーからルールを作っても良いですし、下記の様な Web.Config を作成して、Site フォルダに保存します。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="ReverseProxyRule.1" stopProcessing="true">
                    <match url=".*" />
                    <action type="Rewrite" url="http://test-b.azurewebsites.net/app/{C:1}" />
                    <conditions>
                        <add input="{PATH_INFO}" pattern="^/app/?(.*)" />
                    </conditions>
                </rule>
            </rules>
        </rewrite>
        <urlCompression doDynamicCompression="true" />
    </system.webServer>
</configuration>

201408041745

 

以上で、ARR を構成した test-a のWebサイトの設定は完了です。

 

次に、tes-b のWebサイトの設定です。

wwwroot に app フォルダを作成して、app フォルダ内に適当なアプリケーションを保存します。
201408041751

 

次に、下図のようにアプリケーションの設定を行います。
201408041756

 

以上で、準備完了です。それでは、動作確認してみましょう。
まずは、http://test-a.azurewebsites.net/ にアクセスしてみます。
201408041803

当然のように hostingstart.html ファイルが表示されます。
では、http://test-a.azurewebsites.net/app/ にアクセスしてみます。
201408041804

設定に問題無ければ、app 階層への要求は test-b へアクセスが振り分けられるはずです。

PowerShell DSC で IIS 8.5 をインストールしてみる

$
0
0

いまさらですが…、はじめて PowerShell DSC をさわってみました。
ということで、ためしに、IIS 8.5 をインストールしてある って状態にしてみました。

 

■ IIS 8.5 のコンポーネント全てをインストールしてある

Configuration InstalledIISConfig
{
    Param
    (
	    [Parameter(Mandatory = $true)]
	    [string[]] $Nodes
    )

    Node $Nodes
    {
        WindowsFeature Installed-IIS
        {
            Name = "Web-Server"
            Ensure = "Present"
            IncludeAllSubFeature = $true
        }
        Windowsfeature Installed-AspNet45
        {
            Name = "Web-Asp-Net45"
            Ensure = "Present"
        }
    }
}

InstalledIISConfig -OutputPath . -Nodes ("localhost")
Start-DscConfiguration -Path .\InstalledIISConfig -Wait -Verbose

 

■ 結果

[X] Web サーバー (IIS)				Web-Server		Installed
    [X] Web サーバー				Web-WebServer		Installed
        [X] HTTP 共通機能				Web-Common-Http		Installed
            [X] HTTP エラー				Web-Http-Errors		Installed
            [X] ディレクトリの参照			Web-Dir-Browsing		Installed
            [X] 既定のドキュメント			Web-Default-Doc		Installed
            [X] 静的なコンテンツ			Web-Static-Content		Installed
            [X] HTTP リダイレクト			Web-Http-Redirect		Installed
            [X] WebDAV 発行				Web-DAV-Publishing		Installed
        [X] セキュリティ				Web-Security		Installed
            [X] 要求フィルター			Web-Filtering		Installed
            [X] IIS クライアント証明書マッピング認証	Web-Cert-Auth		Installed
            [X] IP およびドメインの制限			Web-IP-Security		Installed
            [X] SSL 証明書の集中サポート		Web-CertProvider		Installed
            [X] URL 承認				Web-Url-Auth		Installed
            [X] Windows 認証			Web-Windows-Auth		Installed
            [X] クライアント証明書マッピング認証		Web-Client-Auth		Installed
            [X] ダイジェスト認証			Web-Digest-Auth		Installed
            [X] 基本認証				Web-Basic-Auth		Installed
        [X] パフォーマンス				Web-Performance		Installed
            [X] 静的なコンテンツの圧縮			Web-Stat-Compression	Installed
            [X] 動的なコンテンツの圧縮			Web-Dyn-Compression	Installed
        [X] 状態と診断				Web-Health		Installed
            [X] HTTP ログ				Web-Http-Logging		Installed
            [X] ODBC ログ				Web-ODBC-Logging		Installed
            [X] カスタム ログ				Web-Custom-Logging		Installed
            [X] トレース				Web-Http-Tracing		Installed
            [X] ログ ツール				Web-Log-Libraries		Installed
            [X] 要求の監視				Web-Request-Monitor	Installed
        [X] アプリケーション開発			Web-App-Dev		Installed
            [X] .NET 拡張機能 3.5			Web-Net-Ext		Installed
            [X] .NET 拡張機能 4.5			Web-Net-Ext45		Installed
            [X] Application Initialization		Web-AppInit		Installed
            [X] ASP				Web-ASP			Installed
            [X] ASP.NET 3.5				Web-Asp-Net		Installed
            [X] ASP.NET 4.5				Web-Asp-Net45		Installed
            [X] CGI				Web-CGI			Installed
            [X] ISAPI フィルター			Web-ISAPI-Filter		Installed
            [X] ISAPI 拡張				Web-ISAPI-Ext		Installed
            [X] WebSocket プロトコル			Web-WebSockets		Installed
            [X] サーバー側インクルード			Web-Includes		Installed
    [X] FTP サーバー				Web-Ftp-Server		Installed
        [X] FTP サービス				Web-Ftp-Service		Installed
        [X] FTP 拡張				Web-Ftp-Ext		Installed
    [X] 管理ツール					Web-Mgmt-Tools		Installed
        [X] IIS 管理コンソール			Web-Mgmt-Console		Installed
        [X] IIS 6 管理互換				Web-Mgmt-Compat		Installed
            [X] IIS 6 メタベース互換			Web-Metabase		Installed
            [X] IIS 6 WMI 互換			Web-WMI			Installed
            [X] IIS 6 スクリプト ツール		Web-Lgcy-Scripting		Installed
            [X] IIS 6 管理コンソール			Web-Lgcy-Mgmt-Console	Installed
        [X] IIS 管理スクリプトおよびツール		Web-Scripting-Tools	Installed
        [X] 管理サービス				Web-Mgmt-Service		Installed

 

■ IIS 8.5 の機能で FTP以外 全てインストールしてある

Configuration InstalledIISConfig
{
    Param
    (
	    [Parameter(Mandatory = $true)] 
	    [string[]] $Nodes,
	    [Parameter(Mandatory = $true)] 
	    [string[]] $Features
    )

    Node $Nodes
    {
        $Features | foreach {
        WindowsFeature "Installed-IIS-$PSItem"
        {
            Name = $PSItem
            Ensure = "Present"
            IncludeAllSubFeature = $true
        }
        }
        Windowsfeature Installed-AspNet45
        {
            Name = "Web-Asp-Net45"
            Ensure = "Present"
        }
    }
}

$Features = @(
 "Web-WebServer",`
 "Web-Mgmt-Tools")

InstalledIISConfig -OutputPath . -Features $Features -Nodes ("localhost")
Start-DscConfiguration -Path .\InstalledIISConfig -Wait -Verbose

 

■ 結果

[X] Web サーバー (IIS)				Web-Server		Installed
    [X] Web サーバー				Web-WebServer		Installed
        [X] HTTP 共通機能				Web-Common-Http		Installed
            [X] HTTP エラー				Web-Http-Errors		Installed
            [X] ディレクトリの参照			Web-Dir-Browsing		Installed
            [X] 既定のドキュメント			Web-Default-Doc		Installed
            [X] 静的なコンテンツ			Web-Static-Content		Installed
            [X] HTTP リダイレクト			Web-Http-Redirect		Installed
            [X] WebDAV 発行				Web-DAV-Publishing		Installed
        [X] セキュリティ				Web-Security		Installed
            [X] 要求フィルター			Web-Filtering		Installed
            [X] IIS クライアント証明書マッピング認証	Web-Cert-Auth		Installed
            [X] IP およびドメインの制限			Web-IP-Security		Installed
            [X] SSL 証明書の集中サポート		Web-CertProvider		Installed
            [X] URL 承認				Web-Url-Auth		Installed
            [X] Windows 認証			Web-Windows-Auth		Installed
            [X] クライアント証明書マッピング認証		Web-Client-Auth		Installed
            [X] ダイジェスト認証			Web-Digest-Auth		Installed
            [X] 基本認証				Web-Basic-Auth		Installed
        [X] パフォーマンス				Web-Performance		Installed
            [X] 静的なコンテンツの圧縮			Web-Stat-Compression	Installed
            [X] 動的なコンテンツの圧縮			Web-Dyn-Compression	Installed
        [X] 状態と診断				Web-Health		Installed
            [X] HTTP ログ				Web-Http-Logging		Installed
            [X] ODBC ログ				Web-ODBC-Logging		Installed
            [X] カスタム ログ				Web-Custom-Logging		Installed
            [X] トレース				Web-Http-Tracing		Installed
            [X] ログ ツール				Web-Log-Libraries		Installed
            [X] 要求の監視				Web-Request-Monitor	Installed
        [X] アプリケーション開発			Web-App-Dev		Installed
            [X] .NET 拡張機能 3.5			Web-Net-Ext		Installed
            [X] .NET 拡張機能 4.5			Web-Net-Ext45		Installed
            [X] Application Initialization		Web-AppInit		Installed
            [X] ASP				Web-ASP			Installed
            [X] ASP.NET 3.5				Web-Asp-Net		Installed
            [X] ASP.NET 4.5				Web-Asp-Net45		Installed
            [X] CGI				Web-CGI			Installed
            [X] ISAPI フィルター			Web-ISAPI-Filter		Installed
            [X] ISAPI 拡張				Web-ISAPI-Ext		Installed
            [X] WebSocket プロトコル			Web-WebSockets		Installed
            [X] サーバー側インクルード			Web-Includes		Installed
    [ ] FTP サーバー				Web-Ftp-Server		Available
        [ ] FTP サービス				Web-Ftp-Service		Available
        [ ] FTP 拡張				Web-Ftp-Ext		Available
    [X] 管理ツール					Web-Mgmt-Tools		Installed
        [X] IIS 管理コンソール			Web-Mgmt-Console		Installed
        [X] IIS 6 管理互換				Web-Mgmt-Compat		Installed
            [X] IIS 6 メタベース互換			Web-Metabase		Installed
            [X] IIS 6 WMI 互換			Web-WMI			Installed
            [X] IIS 6 スクリプト ツール		Web-Lgcy-Scripting		Installed
            [X] IIS 6 管理コンソール			Web-Lgcy-Mgmt-Console	Installed
        [X] IIS 管理スクリプトおよびツール		Web-Scripting-Tools	Installed
        [X] 管理サービス				Web-Mgmt-Service		Installed

 

Get-DscConfiguration で、DSCで構成した通りの状態になっているかどうかも分かるので、確認も簡単。ということで、はじめての DSC は、何時も通り簡単なネタで終わります。

RemoteApp での Ctrl+Alt+End キー送信時の画面機能を制限する

$
0
0

RemoteApp でアプリを起動しているときに Ctrl+Alt+End を送信すると、見慣れた画面が表示されます。
201408311520

 

しかし場合によっては、ココで表示されている機能を動作させたくない時などがあると思います。
そんなときは、グループポリシーで設定してあげるのが簡単ですね。

今回は、RemoteApp のサーバーのローカルグループポリシーで簡単に設定して確認してみたいと思います。

 

  1. まずは、ファイル名を指定して実行などから、gpedit.msc を起動します。
  2. [ユーザーの構成]-[管理用テンプレート]-[Ctrl + Alt + DEl オプション]をポイントします。
  3. 今回は下記の2つのポリシーを有効にしてみたいと思います。
    ・[パスワードの変更]を削除する
    ・タスクマネージャーを削除する
    201408311523

 

ポリシーを適用後、再度 RemoteApp でアプリケーションに接続して Ctrl+Alt+End を送信してみます。
201408311527

 

問題なく、パスワードの変更 と タスクマネージャー の項目が無くなっていますね。

今回は簡単に確認するために手っ取り早く管理用テンプレートに直接変更を与えているので、管理者もご多分に漏れず このポリシーが適用されます。必要であればユーザー・グループ別にポリシーを適用する感じでいいと思います。


PowerShell DSC で IIS 8.5 にWebサイトを構成する

$
0
0

PowerShell DSC で IIS 8.5 をインストールしてみる って感じで、簡単に PowerShell DSC を使ってみましたが、今回は Webサイトを構成してみたいと思います。

 

構成するにあたって、DSC を使った IIS 関係のリソースを簡単に構成することが出来るモジュールが TechNet から提供されているので、これを使うのが簡単みたいです。

インストールも簡単で、ダウンロードして  $env:ProgramFiles\WindowsPowerShell\Modules フォルダに解凍した xWebAdministration フォルダごとするだけです。
http://gallery.technet.microsoft.com/scriptcenter/xWebAdministration-Module-3c8bb6be

Get-DscResource コマンドレットで、読み込まれているモジュールの確認が出来ます。

 

ちなみに、モジュールの読み込みが出来ない場合、WindowsUpdate を実行するなどして BuildVersion を更新すると読み込めるようになります。
BuildVersion は $PSVersionTable で確認できます。
 
下図は Windows Server 2012 R2 で xWebAdministration モジュールをインストールしたけど読み込めなかった時の状況です。
201409221727

 

xWebAdministration モジュールのリソースやプロパティや使い方は、TechNet に書かれているため 問題ないと思います。ということで、サクッと簡単に試します。

 

TestWebSiteという名前でポート番号8080をバインドしたWebサイトを構成する。

Configuration SetupedIISConfig
{
    Param
    (
	    [Parameter(Mandatory = $true)]
	    [string[]] $Nodes
    )
    Import-DscResource -Module xWebAdministration

    Node $Nodes
    {
        WindowsFeature Installed-IIS
        {
            Name = "Web-Server"
            Ensure = "Present"
            IncludeAllSubFeature = $true
        }
        Windowsfeature Installed-AspNet45
        {
            Name = "Web-Asp-Net45"
            Ensure = "Present"
        }
        xWebsite TestWebSite
        {
            Name = "TestWebSite"
            PhysicalPath = "C:\inetpub\wwwroot"
            State = "Started"
            BindingInfo = MSFT_xWebBindingInformation
                        {
                            Protocol = "HTTP"
                            Port = 8080
                        }
            Ensure = "Present"
            DependsOn = "[WindowsFeature]Installed-IIS"
        }
    }
}

SetupedIISConfig -OutputPath . -Nodes ("localhost")
Start-DscConfiguration -Path .\SetupedIISConfig -Wait -Verbose

 

こんな感じで簡単に構成できますね。
201409221714
201409221713

Outlook 2013 と Outlook.com を Exchange ActiveSync で接続

$
0
0

Outlook 2013 から Exchange ActiveSync がサポートされてたみたいです。
http://technet.microsoft.com/ja-jp/library/cc179110(v=office.15).aspx

ちなみに、Outlook.com も Exchange ActiveSync を喋れるみたいなので、Outlook 2013 と Outlook.com を Exchange ActiveSync で簡単に接続の確認をしてみたいと思います。

 

Outlook 2013 を起動して アカウントの追加を行います。
201410111655

Outlook.com のアカウント情報を入力します。
201410111656

あとは勝手に Outlook.com に接続しにいってくれます。
201410111658

このとき、仕組み的に AutoDiscover が効いてるんだろうなあ と思ったので一応かるく動作を追ってみたら、案の定 AutoDiscover で設定がされているっぽいです。
201410111709

当然、TLS で接続しているのも分かります。
201410121048

問題が無ければ アッサリ接続完了です。
201410111727

Outlook 2013 の設定からでも、ちゃんと Exchange ActiveSync で接続しているのが分かります。
201410111728

ということで、Outlook 2013 を使っていて Outlook.com も使うようならサクッと使うことが出来ますね。

メルボルンIT から Amazon Route 53 へドメインを移管

$
0
0

ベリサインのドメインネームサービスがサービス終了したことにより、期間内に移管してなかったドメインはメルボルンITへ移管したみたいですね。
https://www.verisign-japan-domain.com/

自動で移管される分にはいいんですが、メルボルンITの料金をみてみると…。
https://www.melbourneit.com.au/domain-names/
※表示価格はオーストラリアドル

と、いうことで、今回はDNSだけでなくドメインも管理できるようになった Amazon Route 53 に移管してみたいと思います。
http://aws.amazon.com/jp/route53/

 

1.メルボルンITで AuthCode を確認

まずは、移管する際に必要となる AuthCode を確認します。

201410301550

 

2.ドメイン状態を変更

ドメイン状態を Unlock に変更してログアウトします。

201410301553

 

3.Amazon Route 53 で、NSレコードの内容を確認

NSレコードの設定値を確認する方法は、なんでもいいのですが、Route 53 にログインしたついでなので…。
※今回は 既に移管するドメインのDNSはAmazon Route 53で運用をしている前提で書いています。
201410301603

 

4.Transfer Domain の選択

Route 53 の Domains から Transfer Domain を選びます。
201410301608

 

5.カートに追加

移管する所有ドメイン名を入力(gTLD選択)してチェックをします。問題が無ければ Add to Cart から Continue。
201410301609

 

6.AuthCode と NSレコードの入力

1と3で確認した、AuthCodeとNSレコードの内容を入力してContinue。
201410301615

 

7.Whois情報の入力

Whois情報の各項目に対して入力を行います。
201410301625

 

8.規約同意

「 I have read and agree to the AWS Domain Name Registration Agreement」にチェックを入れて規約に同意して Complete Purchanse。
201410301630

 

9.受付終了

受付完了。
201410301633

 

※手続き完了後のダッシュ―ボードは下図のような状態です。
201410301637

 

あとは表示されている内容通りメールが届くので、本文に記載されてある内容に従って Accept します。
しばらく時間が経過したら もう何通かメールが届きますので、これまた内容に従います。
あとは、自動でドメインは移管されるはずです。

 

10.移管完了

私の場合は 約5日ほどで移管が完了されました。
201411041137

 

特に困ることも躓くところも無くアサッリと移管できますね。

Azure の Websites にインストールした WordPress の 特定ページのみSSLに対応にさせる

$
0
0

Azure の Websites に限ったお話ではありませんが、インストールした WordPress の 特定ページのみ、SSLで通信させたいと思った時に IIS とかなら URLRewrite でリダイレクトさせるが簡単ですよね。

 

Azure の Websites に WordPressをインストールすると、Web.confgにはURLRewriteの規則が追加されます。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="WordPress Rule 1" stopProcessing="true">
                    <match url="^index\.php$" ignoreCase="false" />
                    <action type="None" />
                </rule>
                <rule name="WordPress Rule 2" stopProcessing="true">
                    <match url="^files/(.+)" ignoreCase="false" />
                    <action type="Rewrite" url="wp-includes/ms-files.php?file={R:1}" appendQueryString="false" />
                </rule>
                <rule name="WordPress Rule 3" stopProcessing="true">
                    <match url="^" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAny">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" />
                    </conditions>
                    <action type="None" />
                </rule>
                <rule name="WordPress Rule 4" stopProcessing="true">
                    <match url="." ignoreCase="false" />
                    <action type="Rewrite" url="index.php" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

 

この Web.confg に書かれている規則の一番上に、下記の SSLでアクセスさせたいページへリダイレクトさせる規則 を追加してあげます。
※ ^(2014/12/29/3391/.*)$ の部分を、リダイレクトさせたいURLで適当に書き換えてください。

<rule name="Custom Rule Form HTTPS Redirect" stopProcessing="false">
    <match url="^(2014/12/29/3391/.*)$" />
    <conditions>
        <add input="{HTTPS}" pattern="^OFF$" />
    </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>

 

編集後の Web.config は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Custom Rule Form HTTPS Redirect" stopProcessing="false">
                    <match url="^(2014/12/29/3391/.*)$" />
                    <conditions>
                        <add input="{HTTPS}" pattern="^OFF$" />
                    </conditions>
                    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
                </rule>
                <rule name="WordPress Rule 1" stopProcessing="true">
                    <match url="^index\.php$" ignoreCase="false" />
                    <action type="None" />
                </rule>
                <rule name="WordPress Rule 2" stopProcessing="true">
                    <match url="^files/(.+)" ignoreCase="false" />
                    <action type="Rewrite" url="wp-includes/ms-files.php?file={R:1}" appendQueryString="false" />
                </rule>
                <rule name="WordPress Rule 3" stopProcessing="true">
                    <match url="^" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAny">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" />
                    </conditions>
                    <action type="None" />
                </rule>
                <rule name="WordPress Rule 4" stopProcessing="true">
                    <match url="." ignoreCase="false" />
                    <action type="Rewrite" url="index.php" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

 

結果良好ですね。
201412291539

 

ということで、いつも通りカンタンな内容でしたが コレが本年最後のブログです。来年もカンタンな内容になりますが、よろしくお願いします。

Windows Internal Database でインストールした WSUS の移行

$
0
0

今回は、Windows Server 2003 内の同一サーバー内で WSUSのデータベースを移動させる必要があったので、OSのサポートがそろそろ切れるけれど なんとなく方法をメモとして残しておきます。

なお、WSUSのデータベースは WID(Windows Internal Database)を使っているものとしていますが、SQL Server にインストールしている場合においても、アプローチの仕方が違うだけで、やってることはほとんど一緒なので適時読み替えてください。

また、WSUSの構成情報はレジストリを参照するか、WsusDebugTool.exe の GetConfiguration コマンドで確認できますので、作業前に一度見ておくとイイかもしれません。
WsusDebugTool.exe

201501091714

 

 

まずは、コンテンツフォルダの移動。
とっても簡単で下記のコマンドを入力して、終わるのをひたすら待つだけです。

%ProgramFiles%¥Update Services¥Tools¥wsusutil.exe movecontent "移動先フォルダパス" "作業ログの保存先ファイルパス"

 

次に、データベースの移動ですが、今回は sqlcmd.exe を使います。
もし sqlcmd がローカルサーバーに無い場合は、OSなどを考慮した feature pack をダウンロードしてインストールしてください。
Microsoft SQL Server 2005 用 Feature Pack- 2005 年 11 月

その場合 必要なプログラムは下記の通りで上から順番にインストールすれば、sqlcmd が使えるはずです。
・sqlncli.msi
・SQLServer2005_SQLCMD.msi

 

あとは、sqlcmd で作業していきますが、作業内容としては デタッチ・アタッチ するような流れなので簡単です。
※ローカルにSSMSがインストールされているようであれば、sqlcmd を使わずに SSMS を起動して 次のようにサーバー名をパイプ用に入力すればOKだと思います。

\\.\pipe\MSSQL$MICROSOFT##SSEE\sql\query

 

まずは、データベースのデタッチ前に下記のコマンドを入力します。

Net Stop WsusService
Iisreset /STOP Net Pause MSSQL$MICROSOFT##SSEE Net Continue MSSQL$MICROSOFT##SSEE

 

次に、引き続きコマンドプロンプトからSUSDBのデタッチをおこないます。

Sqlcmd -S \\.\pipe\MSSQL$MICROSOFT##SSEE\sql\query -E -Q "EXEC sp_detach_db SUSDB"

 

デタッチが終了したら、エクスプローラーから下記の物理ファイルを移行したい場所にコピーします。

UpdateServicesDbFiles\SUSDB.mdf
UpdateServicesDbFiles\SUSDB.ldf

 

そしてSUSDBのアタッチ。

Sqlcmd -S \\.\pipe\MSSQL$MICROSOFT##SSEE\sql\query -E -Q "EXEC sp_attach_db @dbname = N'SUSDB', @filename1 = N'F:\WSUS\UpdateServicesDbFiles\SUSDB.mdf', @filename2 = N'F:\WSUS\UpdateServicesDbFiles\SUSDB_log.ldf'"

 

最後に停止したサービスの開始をします。

IISRESET /START
NET START WsusService

 

以上で、同一サーバー内でのWSUSの移行は終了です。
念のため 下記のコマンドで、WSUSの状態確認をしておくといいいかもしれません。

wsusutil.exe checkhealth

 

また、sqlcmd が使えるようになれば、下記のインデックスの再構築とかも可能になります。
Re-index the WSUS 3.0 Database

Sqlcmd -S \\.\pipe\MSSQL$MICROSOFT##SSEE\sql\query -E -i c:\temp\WsusDBMaintenance.sql

Servant を使って Azure クラウドサービスにデプロイしたサイトを管理する

$
0
0

Servant は、IIS の管理操作をブラウザベースで行うことが出来るツールです。

Servant
https://www.servant.io/

 

どういう操作が出来るかというと、IIS上でホストしているWebサイトの開始・停止や、Application Pool のリサイクル、バインドの設定などを行うことが出来るほか、仮想ディレクトリの追加やファイルのアップロード、ファームを構成したりすることも可能です。
201501151001

 

 

というようなツールを ひょんなことから知ったので、Azure のクラウドサービスで使えるようにしてみたいと思います。

ServiceDefinition.csdef ファイルを開いて管理者権限にします。

<Runtime executionContext="elevated"></Runtime>

 

ServiceConfiguration.Cloud.cscfgファイルの osFamily は 4 にて動作を確認します。

 

WebRole.cs を下記のように編集します。

namespace WebRole1
{
    public class WebRole : RoleEntryPoint
    {
        public override bool OnStart()
        {
            // For information on handling configuration changes
            // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.

            const string SERVANT_KEY = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX";
            const string INSTALL_LINE = "\" /c msiexec.exe /i {0} KEY=\"{1}\" /norestart /qn\"";

            var param = string.Format(INSTALL_LINE, Environment.ExpandEnvironmentVariables(@"%RoleRoot%\approot\bin\Setup\Servant.Client.1.0.16.0.msi"),  SERVANT_KEY);
            ExecuteCommand("cmd.exe", param);

            return base.OnStart();
        }

        private void ExecuteCommand(string exe, string arguments)
        {
            using (var p = new Process())
            {
                p.StartInfo.FileName = exe;
                p.StartInfo.Arguments = arguments;
                p.StartInfo.CreateNoWindow = true;
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.RedirectStandardError = true;
                p.StartInfo.Verb = "RunAs";
                p.Start();
                var results = p.StandardError.ReadToEnd();
                p.WaitForExit(60000);
                p.Close();
            }
        }
    }
}

 

SERVANT_KEY の部分は、Servant のダッシュボード上で確認できます。
201501151020

 

Servant のサイトからダウンロードしてきた Servant.Client.1.0.16.0.msi をプロジェクトルートの Setip フォルダ内に保存して、出力ディレクトリを [常にコピーする] にしておきます。

 

あとは、デプロイして正常にインスタンスが起動してくれば、Servant のダッシュボード上で確認できるはずです。
201501151022

 

ちなみに、Webサイトのルートパスが下記のようになるので、Servant のフォルダ部分を削ってあげる必要があります。
201501151034

PowerShell DSC で カスタムリソースの作り方

$
0
0

はじめに

PowerShell DSC を使ってなんらかの構成をする際に、標準リソースだけでは対処できない場合があります。
そのような時は、例えば下記の様な便利なリソースが公開されていますので、一度 目的が達成できるかチェックすると良いかもしれません。
DSC Resource Kit (All Modules)

しかし、それでも事足りない状況は当然発生しますので、そんな時はリソースを自作しちゃえばいいだけですね!

でも、どうやってリソースを作るのかサッパリわからず、下記の TechNet を参考にしました。
Build Custom Windows PowerShell Desired State Configuration Resources

ということで、今回は自分用のメモとしてカスタムリソースの作り方を記録しておきます。

 

xDSCResourceDesigner

とりあず、他のDSCリソースの中身をみてみましょう。
下図は DSC Resource Kit でダウンロードできる xWebAdministration の MSFT_xWebAppPool.psm1 の内容です。
201501291132
こういうファイルを1から手動で作っていくのは億劫なのでやってられません。
 
なので、このようなファイルなどなどを簡単に作成してくれるモジュールがあります。
xDSCResourceDesigner

このモジュールを読み込んで、必要なパラメーターを与えるだけでモジュールを作る上で必要になるファイルなどなどを作成してくれます。

 

では、早速作っていきます。
ダウンロードした xDSCResourceDesigner を下記のフォルダに配置してモジュールを読み込めるようにします。

$env:ProgramFiles\WindowsPowerShell\Modules

 
Import-Module でモジュールを読み込み、Get-Command で読み込んだモジュールが利用可能かどうかを確認します。
 

Import-Module xDSCResourceDesigner
Get-Command -Module xDSCResourceDesigner

201501291134
 
つづいて、カスタムリソースで利用するプロパティを定義して .psm1 と .mof ファイルを作成します。
今回のカスタムリソースはあくまで参考程度に作るものなので、指定したパスに該当するファイルが存在している のような簡単なお話でリソースを書いていきたいと思います。

$FilePath = New-xDscResourceProperty -Name FilePath -Type String -Attribute Key
$Ensure = New-xDscResourceProperty -Name Ensure -Type String -Attribute Write -ValidateSet "Present","Absent"
New-xDscResource `
 -Name "SampleDSCresource" `
 -Property $FilePath, $Ensure `
 -Path "C:\Program Files\WindowsPowerShell\Modules\SampleDSCmodule" `
 -ClassVersion 1.0 `
 -FriendlyName "SampleDSCresource" `
 -Force

201501291135
 
これで、$env:ProgramFiles\WindowsPowerShell\Modules フォルダ内には、下図のようにファイルとフォルダが作られます。
201501291138
 
次に .psd1 ファイルを作ります。このファイルは下記の New-ModuleManifest で作成できます。

$param = @{
guid = [Guid]::NewGuid()
author = "64"
company = "DSC Demos"
moduleversion = "1.0"
description = "Creating a sample DSC resource"
path= "C:\Program Files\WindowsPowerShell\Modules\SampleDSCmodule\SampleDSCmodule.psd1"
}
New-ModuleManifest @param

201501291139
 
.psd1 ファイルはModulesフォルダのカスタムリソースフォルダの直下に作成します。
201501291140
 
基本的に必要となるフォルダやファイルの作成は以上で、次にカスタムリソースで やりたいこと を書いていきます。

 

カスタムモジュールの機能

.psm1 ファイルをエディターで開いて、自作したい内容を Get-TargetResource Set-TargetResource Test-TargetResource それぞれのファイルに書くことになります。

Get-TargetResource

function Get-TargetResource
{
    [CmdletBinding()]
    [OutputType([System.Collections.Hashtable])]
    param
    (
        [parameter(Mandatory = $true)]
        [System.String]
        $FilePath,
        [parameter(Mandatory = $true)]
        [ValidateSet("Present","Absent")]
        [System.String]
        $Ensure
    )

    $returnValue = @{
        FilePath = $FilePath
        Ensure = $Ensure
    }
    $returnValue
}

Set-TargetResource

function Set-TargetResource
{
    [CmdletBinding()]
    param
    (
        [parameter(Mandatory = $true)]
        [System.String]
        $FilePath,
        [parameter(Mandatory = $true)]
        [ValidateSet("Present","Absent")]
        [System.String]
        $Ensure
    )

    $IsExists = Test-Path -Path $FilePath;
    if($Ensure -eq "Present")
    {
        if ($IsExists)
        {
            return
        }

        Out-File -FilePath $FilePath -InputObject $Content
    }else{
        if($IsExists)
        {
            Remove-Item -Path $FilePath
        }
    }
}

Test-TargetResource

function Test-TargetResource
{
    [CmdletBinding()]
    [OutputType([System.Boolean])]
    param
    (
        [parameter(Mandatory = $true)]
        [System.String]
        $FilePath,
        [parameter(Mandatory = $true)]
        [ValidateSet("Present","Absent")]
        [System.String]
        $Ensure
    )

    $bool = $false;
    $IsExists = Test-Path -Path $FilePath;

    if (($Ensure -eq "Present") -and ($IsExists)) 
    { 
        Write-Debug -Message ("Ensure: {0}`t IsExists: {1}" -F $Ensure, $IsExsis) -Debug
        $bool = $true
    } 
    elseif (($Ensure -eq "Present") -and (!$IsExists))
    { 
        Write-Debug -Message ("Ensure: {0}`t IsExists: {1}" -F $Ensure, $IsExsis) -Debug
        $bool = $false
    } 
    elseif (($Ensure -eq "Absent") -and ($IsExists))
    { 
        Write-Debug -Message ("Ensure: {0}`t IsExists: {1}" -F $Ensure, $IsExsis) -Debug
        $bool = $false
    } 
    elseif (($Ensure -eq "Absent") -and (!$IsExists))
    { 
        Write-Debug -Message ("Ensure: {0}`t IsExists: {1}" -F $Ensure, $IsExsis) -Debug
        $bool = $true
    }

    $bool
}
Export-ModuleMember -Function *-TargetResource

 

動作確認

以上で、自作リソースの作成が完了しましたので、例えば下記の様な Configuration を書くことが出来ます。

Configuration SampleExecTest
{
    param (
        $MachineName="localhost"
    )
    Import-DscResource -ModuleName SampleDSCmodule

    node $MachineName
    {
        SampleDSCresource Sample
        {
            FilePath = "C:\Temp\hoge.txt"
            Ensure = "Present"
        }
    }
}

SampleExecTest -MachineName "localhost" -OutputPath .
Start-DscConfiguration -path .\SampleExecTest -Wait -Verbose

 

結果はこんな感じで ちゃんと動いていますね。
201501291151


Windows 8.1 で remapkey.exe を使ってキーマップを変更する

$
0
0

使い始めてほぼちょうど一か月。VAIO-Z(VJZ13A1)には概ね満足しています、方向キーが小さいことを除いては。
201503271434

別にそこまで大きな問題ではないですが、ごくごくときどきまれまれでミスったりします。とくに上下キーで。
そういうのがイヤだなーと感じ始めたこともあり、以前 教えて頂いた remapkey.exe でキーマップを変更してみようと思います。

remapkey.exe はリソースキットにありますので、2003のリソキの書籍に挟まってるメディアからインストールしてもいいですし、下記のURLからダウンロードしてインストールすることもできます。
http://www.microsoft.com/en-us/download/details.aspx?id=17657

 
ということで、右シフトキーを ↑ に変更していきます。

  1. ダウンロードした rktools.exe を実行します。

  2. 互換性アシスタントが起動するので「ヘルプ情報を使用せずにプログラムを実行する」を選択します。
    201503271042

  3. セットアップウィザードが起動するので「Next >」
    201503271043

  4. 「I Agree」
    201503271045

  5. 「Next >」
    201503271046

  6. 「Install Now」
    201503271047

  7. 「Finish」
    201503271048

  8. エクスプローラーから「C:\Program Files (x86)\Windows Resource Kits\Tools」フォルダを開きます。(デフォルトの場合

  9. remapkey.exe を管理者として実行します。
    201503271055

  10. 変更したいキーを画面上部のキーボードからドラッグして、画面下部のキーボードにドロップします。
    201503271101

  11. 必要な変更を行ったのちに「保存して終了」し、再起動すればキーマップが変更されているはずです。

 
実際にはそれ以外にも、変換とか無変換とか使わないキーもモリモリあるので変更してたりします。

Azure File サービス(プレビュー) + 仮想マシン でファイルサーバーを作ってみる

$
0
0

Build 2015 でオモシロそうな機能がモリモリ発表されました。が、そんな旬な話題には今回も触れずにマイペースな感じで行きたいと思います。(とはいえ、ようやくポータルに Cloud Service が出てきて、ほんのり枕を高くして眠れそうです。
http://www.buildwindows.com/

で、本編です。
Azure File サービスは、現在もプレビュー機能ですが Azure ストレージサービスをベースにして SMB 2.1 プロトコルを使ったファイル共有機能です。
http://blogs.msdn.com/b/windowsazurej/archive/2014/06/05/blog-introducing-microsoft-azure-file-service.aspx

今回は仮想ネットワークを利用したVPN内に仮想マシンを作って、この File サービスからストレージをマウントしてフォルダ共有をかけてファイルサーバーとして設定してみたいと思います。
なお、内容についてはすでにサイト間接続でVPNの疎通が出来ている前提での記載です。

プレビュー

プレビュー機能を申し込んで使えるようにしておきましょう。
http://azure.microsoft.com/ja-jp/services/preview/
201501241137

Azure ストレージ

プレビュー段階では、Azure File サービスを利用するにはストレージアカウントを新規に作る必要があります。

また、のちほどアカウント名とアクセスキーが必要になりますので確認しておきます。
201501241238

仮想マシン

仮想ネットワーク内に仮想マシンを適当に作成します。

Windows Azure PowerShell

仮想マシンにリモートデスクトップで接続して、Windows Azure PowerShell をインストールします。
Microsoft Web Platform Installer
http://go.microsoft.com/fwlink/p/?linkid=320376&clcid=0×411
201501241223

ディレクトリの作成

Azure ストレージに対して Azure PowerShell の New-AzureStorageDirectory でディレクトリを作成します。

まずは Azure PowerShell を起動して、下記のコマンドからアカウント情報を入力しサブスクリプションを読み込みます。

Add-AzureAccount

次に 下記のコマンドを入力します。
なおココで利用している下記のコマンドは次のサイトからの引用です。
http://azure.microsoft.com/us-en/documentation/articles/storage-dotnet-how-to-use-files/

account-name と account-key は、さきほど作ったストレージ情報を使います。

# create a context for account and key
$context = New-AzureStorageContext -StorageAccountName files001 –StorageAccountKey XXXXXXXXXXXXXXXXXXXXXXXXX==
# create a new share
$share = New-AzureStorageShare -Name shared -Context $context
# create a directory in the share
New-AzureStorageDirectory -Share $share -Path shareddirectory

201501241248

マウント

仮想マシンのローカルアドミニストレーターにてログインして、下記のコマンドを実行します。

net use コマンドでマウントをかけます。

net use i: \\files001.file.core.windows.net\shared XXXXXXXXXXXXXXXXXXXXXXXXX== /user:files001

なお、仮想マシン再起動時に自動的に再接続させるために、cmdkey コマンドで資格情報を事前に登録しておくことも可能です。

cmdkey /add:files001.file.core.windows.net /user:localhost\files001 /pass:XXXXXXXXXXXXXXXXXXXXXXXXX==

201501241732

問題が無ければ、エクスプローラー上にドライブが表示されるはずです。
201501241745

ちなみに、今回 使っている仮想マシンはオンプレのADに参加させていますが、上記のコマンドを実行してもドメインユーザーでログインした際のエクスプローラー上には表示されませんので、ご注意を。(コマンドプロンプトなどでは参照可能です。)

VHD(X)ファイルの作成と共有フォルダの設定

あとは ディスクの管理 を開いて、VHD(X)ファイルを「追加したドライブ内」に作成します。あとはそのVHD(X)をマウントして共有フォルダの設定をおこなえば終わりです。

201501241937
これでNTFSアクセス権やらクォータの設定やらも出来ますね。(上図のEドライブがVHD(X)ファイルをマウントしたドライブです。)

なお、上記のように素直に手動でマウントした場合は、仮想マシンの再起動後はマウントは外れていますので、ご注意ください。

RD Web アクセスでパスワードの変更をする

$
0
0

ちょっとRDSに関することを調べてた時に、RD Web アクセス画面でユーザーアカウントのパスワードを変更できることを知りました。
http://blogs.msdn.com/b/rds/archive/2014/06/04/failed-logons-due-to-expired-passwords-password-change-functionality-in-rd-web-access.aspx

ということで、Windows Server 2012 R2 でさっそく確認してみたいと思います。

 

1:適当に ActiveDirectory をたてて RDS をインストールしたら、Webアクセスの画面が閲覧できることを確認します。
201505301941

 

2:IISマネージャーを起動して、下図の場所にある「Pages」アプリケーションをポイントしてアプリケーションの設定を確認します。
201505301943

 

3:PasswordChangeEnabled の値を true に変更します。
201505301944

 

4:再び、下記のURLのように password.aspx にアクセスするようにWebアクセスの画面を開きます。
https://[サーバー名]/rdweb/pages/ja-jp/password.aspx

 

5:問題が無ければ、下図のようにパスワードの変更フォームが表示されるはずです。
201505301948

 

ですが、入力してもパスワードの変更は「新しいパスワードは、パスワードの長さ、複雑さ、または履歴に関するドメインの要件を満たしていません。別の新しいパスワードを選択してください」とメッセージが表示され、どれだけパスワードを複雑に長く履歴を考慮しても失敗します。もちろんポリシーを無効にして試してみても失敗します。
201505302214

 

変更するには「Active Directory ユーザーとパスワード」から該当のユーザーアカウントオプションの「ユーザーは次回ログオン時にパスワード変更が必要」をONにします。
201505302219

 

これで問題なくWebアクセスからパスワードの変更を行うことが可能になります。
201505302057

URL Rewrite で Azure ストレージ上に配置した画像の URL を書き換える

$
0
0

公開環境とテスト環境で Azure ストレージを分けて画像ファイルを保存している場合、URL Rewrite の Outbound を使って表示を切り替えることもデキるんじゃないかと、いまさら気が付いたので簡単に試してみました。

 

ココでは下記のように2つのストレージを用意しています。

・テスト環境ストレージ:production001.blob.core.windows.net
・公開環境ストレージ:staging001.blob.core.windows.net

 

また、コンテナ以降は同様の URL にて、それぞれ違う画像を配置してあります。

production001

20150628200002

staging001

20150628200001

 

で、HTMLではとりあえずテスト環境ストレージの画像を参照するように適当にimgタグを書いておきます。

<html>
<head>
    <meta name="viewport" content="width=device-width"/>
    <title>Index</title>
</head>
<body>
    <div>
        <img src="https://staging001.blob.core.windows.net/images/animal/cat001.jpg" alt="" title=""/>
    </div>
</body>
</html>

 

つぎに、URL Rewrite の設定ですが、今回は Web.Relase.config を下記のように編集して Debug モードと Release モードでそれぞれの動作を見てみようと思います。

<?xml version="1.0" encoding="utf-8"?>

<!-- Web.config 変換の使用の詳細については、http://go.microsoft.com/fwlink/?LinkId=301874 を参照してください -->

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
  </system.web>

  <system.webServer xdt:Transform="Replace">
    <modules>
      <remove name="FormsAuthentication" />
    </modules>
    <rewrite>
      <outboundRules>
        <rule name="OutboundRule1">
          <match filterByTags="Img" pattern="https://staging001.blob.core.windows.net/(.*)" />
          <conditions>
            <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
          </conditions>
          <action type="Rewrite" value="https://production001.blob.core.windows.net/{R:1}" />
        </rule>
      </outboundRules>
    </rewrite>
    <urlCompression doDynamicCompression="false" />
  </system.webServer>
</configuration>

 

URL Rewrite の規則の箇所は IIS Manager で確認すると下記のような感じです。
201506282015

 

以上で設定完了です。動作を見てみます。

・Debugモードでデプロイ
20150628201001

・Releaseモードでデプロイ
20150628201002

 

簡単に確認した程度ですが、とりあえずちゃんと動いてますね。

URL Rewrite で HTTP レスポンスヘッダーを書き換える

$
0
0

定期的に どうやって書くんだっけ? と過去のプロジェクトを漁ることになってるのでメモ書きです。

今回は、下記のヘッダー値を対象に URL Rewrite で空の文字列に書き換えます。

  • Server
  • X-AspNetMvc-Version
  • X-AspNet-Version
  • X-Powered-By

 

まずは、何も設定していない初期の状態をチラッと確認しておきます。

201507311454

 

Server

<rule name="RESPONSE_SERVER">
    <match serverVariable="RESPONSE_SERVER" pattern=".*" />
    <action type="Rewrite" />
</rule>

201507311455

 

X-AspNetMvc-Version

<rule name="RESPONSE_X-ASPNETMVC-VERSION">
    <match serverVariable="RESPONSE_X-ASPNETMVC-VERSION" pattern=".*" />
    <action type="Rewrite" />
</rule>

201507311458

 

X-AspNet-Version

<rule name="RESPONSE_X-ASPNET-VERSION">
    <match serverVariable="RESPONSE_X-ASPNET-VERSION" pattern=".*" />
    <action type="Rewrite" />
</rule>

201507311457

 

X-Powered-By

<rule name="RESPONSE_X-POWERED-BY">
    <match serverVariable="RESPONSE_X-POWERED-BY" pattern=".*" />
    <action type="Rewrite" />
</rule>

201507311456

 

これら全てのルールを有効にした場合は、下図のようになります。

<rewrite>
    <outboundRules>
        <rule name="RESPONSE_SERVER">
            <match serverVariable="RESPONSE_SERVER" pattern=".*" />
            <action type="Rewrite" />
        </rule>
        <rule name="RESPONSE_X-POWERED-BY">
            <match serverVariable="RESPONSE_X-POWERED-BY" pattern=".*" />
            <action type="Rewrite" />
        </rule>
        <rule name="RESPONSE_X-ASPNET-VERSION">
            <match serverVariable="RESPONSE_X-ASPNET-VERSION" pattern=".*" />
            <action type="Rewrite" />
        </rule>
        <rule name="RESPONSE_X-ASPNETMVC-VERSION">
            <match serverVariable="RESPONSE_X-ASPNETMVC-VERSION" pattern=".*" />
            <action type="Rewrite" />
        </rule>
    </outboundRules>
</rewrite>

201507311453

 

空文字ではなく、値を書き換えたければ下記のように編集すればOK。

<action type="Rewrite" value="hoge" />
Viewing all 45 articles
Browse latest View live