はじめに
社内で調査用にFAQサイトとしてオープンソースの「phpMyFAQ」をWindow Server上に構築しました。
WebサーバーはIISではなくApacheを使用したため、ポート番号は1080番となっている。
その際にポート番号なしのURLを入力して、phpMyFAQサイトの接続できるようにしたい。
調査したところ2つの方法がある。
- URLのポート番号を表示
- URLのポート番号を非表示
※今回の記事を書く上では、phpMyFAQではなくテストサイトで試している。
導入方法
URL書き換えを行うには、IISに拡張モジュールを追加する必要があリます。
「Application Request Routing Chace」のアイコンは、「(PC名)ホーム」側に表示されます。「Default Web Site ホーム」側には表示されません。
URL Rewrite
IISのURL Rewrite(URL書き換え処理)は、Microsoftによって提供されている無償のモジュールです。モジュール名のとおりURLの書き換えのほか、リダイレクトを行います。
下記サイトからURL Rewriteをインストールしてください。
Application Request Routing(ARR)
IISのApplication Request Routing(アプリケーション要求ルーティング処理)は、Microsoftによって提供されている無償のモジュールです。モジュール名のとおりリクエストに対するルーティング機能のほか、負荷分散、ディスクキャッシュの機能を利用できます。
下記サイトからARRをインストールしてください。
URLにポート番号が付かない方法の場合のみ使用します。
URLのポート番号を表示
ポート番号なしのURLを入力した後、ポート番号が表示されたURLにしてApacheのサイトに接続する。
※正確にはポート番号なしのURLは80ポートが省略されている。
http://localhost/test/index.html
↓
http://localhost:1080/index.html
URL 書き換えの設定
1.IISマネージャーから「URL 書き換え」をクリックします。
2.規則の追加で規則テンプレート内の受信規則から「空の規則」を選択してOKボタンをクリックします。
3.名前を決めます。今回は「test」にしています。
4.正規表現パターンとして「test(.*)」を入力します。
5.アクションの種類として「リダイレクト」を選択します。
6.リダイレクト URL先を入力します。今回は「http://localhost:1080/{R:0}
」とします。
結果
URLのポート番号が表示状態でApacheのサイトに接続されます。
URLのポート番号を非表示
ポート番号なしのURLを入力した後、そのままのURLでApacheのサイトに接続する。(内部はポート番号が付いたURLに書き換え)
http://localhost/test/index.html
Application Request Routingの設定
1.IISマネージャーから「Application Request Routing」をクリックします。
2.右パネルの操作の「Server Proxy Settings」をクリックします。
3.「Enable proxy」にチェックを付けます。
4.右パネルの操作の「適用」をクリックします。
URL 書き換えの設定
1.IISマネージャーから「URL 書き換え」をクリックします。
2.規則の追加で規則テンプレート内の受信規則から「空の規則」を選択してOKボタンをクリックします。
3.名前を決めます。今回は「test」にしています。
4.正規表現パターンとして「test(.*)」を入力します。
5.アクションの種類として「書き換え」を選択します。
6.リダイレクト URL先を入力します。今回は「http://localhost:1080/{R:0}
」とします
結果
URLのポート番号が非表示状態でApacheのサイトに接続されます。
最後に
社内のみで使用するならURLのポート番号が表示状態でも気にならないだろうが、社外に公開するような場合だとURLのポート番号が非表示状態の方が好ましいだろう。
記事を書く際には既に理解したから書いているわけで、そこに至るまでは理解不足でネット検索しまくりである。
URL書き換えでポートを変更するだけなら簡単だろうと思ったんだが、正規表現は合っているのに全然変わらないのである。日本語での検索サイトで探しても一向に分からない。そこでキーワードを英語にして「IIS URL Rewrite port change」にして、「URL Rewrite to specific port - MSDN Forum」を見つける。まさに実現したい内容だった。
日本語訳で「1 つの Web サーバーから (同じ物理サーバー上の) 別の Web サーバーにハンドオフしているため、書き換えではなくリダイレクトを行う必要があります。」と、やっと何を間違えているのかを理解しました。
アクションの種類を「書き換え」から「リダイレクト」にすることでようやく目的を達成することができました。
そこから日本語サイトでのURL書き換えを説明しているサイトの内容を見直し、Application Request Routingを使用した場合にアクションの種類を「書き換え」にする必要があるってことがわかったのです。
参照
- URL Rewrite to specific port - MSDN Forum
- URL 書き換えモジュールでの書き換えマップの使用
- Windows IIS/Azure WebサイトのURL Rewrite機能でURLを書き換える(基本編)
- IIS Public WAN Redirect to Different Port
- URL rewrite with port redirect - MSDN Forum
- IIS 10とTomcat 8.5をApplication Request Routingで連携
- Application Request Routing(ARR)を使ったRedmineの設定について
- C#コードによるARR 3.0 RTMのインストールと設定