Quantcast
Channel: Japan SharePoint Support Team Blog
Viewing all articles
Browse latest Browse all 182

SharePoint Server におけるホストヘッダーの利用について

$
0
0

こんにちは SharePoint サポートの森 健吾 (kenmori) です。

今回の投稿では、SharePoint Server オンプレミス製品をホストする Web サーバーでホスト ヘッダーを利用する方法や注意点についてご説明します。
新しい情報ではありませんが、代替アクセス マッピングと合わせて質問が多いため、今回情報を公開させていただくに至りました。

なお、ホストヘッダーは、SharePoint Server 2013 から導入されたホスト名付きサイト コレクションには対応していません。本投稿ではホスト名付きサイト コレクションには言及しません。

 

ホストヘッダーの用途

ホストヘッダーを指定すれば、要求アドレスのホスト名をもとに、Web サーバーが到達先の Web サイトを振り分けることができるようになります。そのため、例えば複数の異なる IIS Web サイト (または異なる SharePoint の Web アプリケーション) で同じポート番号 (例. 80, 443) を共有することが可能になります。

ホストヘッダーを指定した場合、HTTP 要求されたアドレスのホスト名とポート番号の両方が合致した Web サイトに要求が振り分けられます。

hostheader1

この機能が利用される背景としては、Web サーバーにおいて、特に 80 番ポート (http://) 443 番ポート (https://) など、URL 表記する際に番号を省略できるポートであるということ。また、ファイアウォール設定などもあるため、あまり多くのポートを開けたくないという要件などもあります。

SharePoint でホストヘッダーを設定できる画面は、新規 Web アプリケーションを作成画面か、Web アプリケーションの拡張画面のみです。

その他の画面で、ホストヘッダーの設定値を変更や参照する画面は用意されていません。(*1)

hostheader3

hostheader4

IIS においてホストヘッダーを設定するのは、下記画面の通り、サイトバインドのホスト名が該当します。

hostheader2

上記の通り、IIS 管理コンソールでサイトのホスト ヘッダーの設定値を参照することは可能ですが、SharePoint は製品として直接 IIS 管理コンソールからサイトのバインドを変更し、ホストヘッダーを指定することを想定しておりません。

もちろん、IIS を基盤にして動作する以上、IIS でサイト バインドを設定するだけで要求の振り分けは可能です。しかし、IIS での設定変更は、構成データベースに格納されませんので、IIS 設定と SharePoint 製品の構成データとの間にかい離が生じます。

このことから、SharePoint 全体管理画面でのオペレーションや PowerShell による管理コマンドの実行時等で、構成データの値に基づき、設定内容が意図せず元に戻ることが想定されます。

また、新しくホストヘッダーを登録する場合や SharePoint ホスト アドインの構築など、製品動作として IIS のバインドを変更する処理はいくつかあります。これらの制御を行うにあたり、構成データベースに設定が格納されていなければ、ホストヘッダーが登録されている前提を考慮した動作ができませんので、様々なシナリオで構成上の不整合を引き起こし、Web サイトにアクセスできなくなる (404 エラー) などの現象発生が想定されます。

 

補足 (*1) ホストヘッダーを確認する方法

SharePoint 全体管理画面でホスト ヘッダーを画面上から確認する方法はありません。IIS 管理コンソールから Web サイトのバインドを確認する方法もありますが、整合性が気になるとお考えの方は、PowerShell を使ってホストヘッダーを照会する方法が有効です。

下記にファーム全体の Web アプリケーション全体における IIS のバインド設定を確認するための PowerShell を用意しましたので、これをお役立ていただけますと幸いです。

 

$global:SPBindings = [System.Collections.ArrayList]@()

function GetBindings($webappurl, $key, $bindings)
{
  foreach ($binding in $bindings)
  {
    $bindtoadd = new-object psobject -property ([ordered]@{WebApplication = $webappurl; Zone = $key; HostHeader = $binding.HostHeader; Port =
$binding.Port})
    [void]$global:SPBindings.add($bindtoadd)
  }
}

foreach ($webApp in (Get-SPWebApplication))
{
  foreach ($key in $webApp.IisSettings.Keys)
  {
    GetBindings -webappurl $webApp.Url -key $key -bindings $webApp.IisSettings[$key].ServerBindings
    GetBindings -webappurl $webApp.Url -key $key -bindings $webApp.IisSettings[$key].SecureBindings
  }
}
$global:SPBindings | select WebApplication, Zone, HostHeader, Port

上記のスクリプトを GetSPBindings.ps1 として保存し、SharePoint 管理シェルで実行します。

PS>.\GetSPBindings.ps1

なお、取得する $SPBindings をグローバル スコープの変数として定義しておりますので、本スクリプト実行後の同じ PowerShell ウインドウで $SPBindings を参照すれば結果が取得できるようにしています。

さらに $SPBindings | fl のようにすることも可能ですし、フィルターやソートなども可能ですので、ご自由に使ってみてください。

タイトル : SPSecureBinding class
アドレス : https://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spsecurebinding(v=office.15).aspx

タイトル : SPServerBinding class
アドレス : https://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spserverbinding.aspx

タイトル : SPIisSettings class
アドレス : https://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spiissettings.aspx

タイトル : SharePoint Server で PowerShell を使用する際の準備事項
アドレス : https://blogs.technet.microsoft.com/sharepoint_support/2013/10/04/sharepoint-server-powershell/

 

その他 : 代替アクセス マッピング (AAM) との違いについて

別の Web アプリケーション (. SharePoint – 8080) の代替アクセス マッピングに、80番ポートのアドレス (. http://www.sharepoint.com)を登録することでも、動作上同様の構成を実現できているように見えます。

hostheader5

しかし、上記の図に記載の通り IIS はポート番号で要求を振り分けています。その上で、80 番ポートのサイト内で処理が実行され、SharePoint のモジュールが代替アクセス マッピングのテーブルを参照して適切な Web サイトを探し出し、要求を対象の 8080 番ポートの Web サイトに転送します。そして、転送先の 8080 番の Web サイトが実際の処理を行います。

この構成は、双方の Web サイトに全ユーザーから毎回アクセスされる形となるため非効率です。IIS ログを確認すると、両方の Web サイトにログが記録されることが確認できます。

このような理由で、複数の Web アプリケーション間で同じポートを共有するよう構成するにあたり、ホストヘッダーではなく、代わりに代替アクセス マッピングを使うことは推奨しておりません。

それぞれの役割をあらためてまとめると以下のようになります。
・ホストヘッダーは、SharePoint Web フロント エンド サーバーに到達する HTTP を、各 IIS Web サイトに振り分けるための機能。
・代替アクセス マッピングは、Web アプリケーションが HTTP を受けるアドレスを管理する機能。

上記のように、別のものとして理解することが一般的となります。代替アクセス マッピングにつきましては、合わせて過去のブログ記事もご参考にしてください。

タイトル : 代替アクセス マッピングを理解する
アドレス : https://blogs.technet.microsoft.com/sharepoint_support/2015/09/15/4401/

以上の通りお伝えいたします。


Viewing all articles
Browse latest Browse all 182

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>