Archive for the ‘IT’ Category

ノートでWebアプリ – ホームインターネットの構築

火曜日, 1月 19th, 2021

ノートでWebアプリ

・Lavie Windows8.1でIIS
IISのインストールは、コントロールパネル>Windows機能の有効化でおこなう。.net3.5と.net4.0にチェックがついていたので、インターネットインフォメーションサービスにチェックをつけ、Web管理ツールとWorldWideWebサービスにチェックを入れる。デフォルトのままで、FTPがはずれているが、そのままOKを押すと、インストールが始まる。
少し時間がかかるが、完了するとIISが使用可能になる。IISマネージャがアプリケーションに追加されているので、それを起動する。

・aspxがいきなりエラー
各種の設定をして、LocalHostでアクセスすると、しばらく時間がたってから、「HTTP エラー 404.3 – Not Found 拡張構成により、要求しているページは使用できません。…」というエラーが出た。
特に設定には問題がなさそうなので、***.htmlのファイルを作り、それを直接指定してみる。今度は問題なくすぐに開いた。.netが機能していないのだ。しかし、アプリケーションプールの設定では.net3と.net4が表示されて選択できている。

.net3.5、.net4.5はインストール済みだが…。

よく分からないのでgoogleでエラーを検索してみる。いくつかの掲示板が「.netがインストールされていない…」と回答している。その中の一つにインターネットインフォメーションサービスのインストールのツリーの内容が英語で表示されていた。どうも、WorldWideWebサービスの下に.netのチェックがあるようだ。

開発ではなく運用なんだけど、と思いながら、チェックを入れる。これで、ようやくIISでasp.netを使用できるようになるようだ。IISの標準ではaspやasp.netは使用できないということらしい。それじゃ、IISマネージャのアプリケーションプールに出てきた.netは何だったのか。

・分かりにくいWindows語
相変わらず釈然としないwindowsのセットアップだ。バージョンが変わると、とたんに手順が変わる、普通の商売ではとても考えられないサービスの悪さだ。
また、最近はこの手の検索をすると、microsoftのサイトばかりが出てくる。ほとんどが英文直訳のページだ。そこには、日本語しかできない自分達にとっては、よく分からない日本語のような説明文が載っているだけで、ほとんど理解できない。windows専用の国語辞典が必要かもしれない。

・ノートでWebアプリ
IISが動けば、asp.netで開発したアプリがノートでも利用できることになる。元々サーバー用のWebアプリだが、ノートでディスクトップアプリとしても動作することになる。
C++等の開発ツールで作成したアプリは、WindowsやMacなどのOSの違いで動作しないが、このWebアプリはブラウザで動くため、その機能の制限を受けるだけで、どのOSからも利用することができる。それには、IISノートのHTTPポートを開けてやるのと、共有フォルダを提供してやることが必要だ。(下記を参照)
また、Windowsのディスクトップアプリに限れば、ドラッグ&ドロップのようなファイル処理も可能になる。ローカルPC上のIISで動くWebアプリは、サーバーにもなるし、クライアントにもなる、新しいアプリといえる。

PC ホームインターネットを作る

参照 PC ローカルネットワークの構築

・ファイアウォールを開く
作成したWebは自分のPCからは問題なく接続できますが、そのままではネットワーク(ローカルネット)で接続されている他のPCからは接続できません。ファイアウォールのhttp(80)ポートを開く必要があります。Windows Serverの場合は、IISをインストール
すると自動的にhttp(80)ポートが開かれますが、PCの場合はそうならないようです。
ファイアウォール>詳細設定>受信の規則
World Wide Web サービス (HTTP トラフィック)
有効にする
これでhttpが通るようになります。

さらに、アクセスをローカルネットワークのPCだけに制限するのには、
スコープ
リモートIPアドレス
任意のIPアドレス>これらのIPアドレス
192.168.11.0/24
等の設定をする。
これでローカルネットワーク内のPCに限り、このWebサーバーが使用できるようになります。


ファイアウォール

受信の規則に新規追加する

・固定IPアドレス
また、このPCをローカルネットのWebサーバーとして使用する場合は、IPアドレスを固定する必要もあります。
家庭のホームネットワークでは、ネットワークのWiFiの状態、詳細に取得したIPアドレスが表示されています。buffaloのWiFiネットワークの場合、デフォルトゲートウェイが192.168.11.1になっているので、それを参考にして、自動で割り振られないように192.168.11.100以降を使用しています。
社内ネットワークの場合は、DHCPの管理者に相談してIPアドレスを決めてください。

固定IPアドレス

・hostsファイル
以上でリモートのPCからこのWebサーバーにアクセスできるようになります。ただし、IPアドレスでのアクセスに限られます。(http://(IPアドレス)/**)
IISにはバインドによって、一つのIPアドレスで複数のサイトを作成できます。通常のインターネットではDNSサーバーがこの名前解決をしています。社内ネットワークでもDNSサーバーを構築することはできますが、専門知識が必要で敷居が高くなります。
少人数のネットワークやグループでこの名前解決をするのには、hostsファイルを使用する方法がいいと思います。

hostsの場所
C:\Windows\System32\drivers\etc\hosts

hostsファイルの例

------------------------------------------------------------
# Copyright (c) 1993-2009 Microsoft Corp.
#
#
# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost

192.168.11.101   pc01               # hosts test
192.168.11.101   www                # hosts test
192.168.11.102   pc02               # hosts test
192.168.11.102   www02              # hosts test
------------------------------------------------------------

こう書いてやると、http://www/***で192.168.11.101の任意のWebサイトにアクセスすることができます。
なお、hostsファイルにはグローバルのサイトも記述できます。
DNSサーバーとは違い、このWebサイトを使用する限定のメンバーだけに、このhostsファイルを配布する方法も考えられます。

関連ページ
PC ローカルネットワークの構築

Web – IIS7~10でURLの書き換えが可能に

金曜日, 7月 31st, 2020

URL Rewrite Module 2.1

server2016、Windows10のIIS10になると、今までの「URL Rewrite Module 2.0」がインストールできなくなります。
これは、2.0のバグで、IISのバージョン10を1.0と判断し9より下として処理するのが原因のようです。
そのため2.0をインストールするには、レジストリのIISのバージョンを9に変えてインストールし、その後10に戻すという方法があります。
IIS10におけるrewrite.dllのインストール

この問題を解消したのが「URL Rewrite Module 2.1」です。
URL Rewrite ダウンロード
下の方に日本語インストーラがあります。
Download URL Rewrite Module 2.1
Japanese: x86 installer / x64 installer

しかし「URL Rewrite Module 2.1」には別の問題があります。
URL Rewrite モジュール 2.1 にはVC ランタイムのインストールが必要になります
このためserver2016では問題ありませんが、Windows10ではエラーになることがあります。
「VisualC++のランタイム」をインストールすれば、問題は解決します。
それが面倒な場合は、上記の「URL Rewrite Module 2.0」のインストールを実行するのも一つの方法です。

URL Rewrite Module を使う

・それまでのURLの書き換え
Server2003 IIS6.0までは、URLを書き換えるため、ThunderMain URLRewriterというツールを使用していました。

・ワイルドカードのマッピング
このツールの設定方法は、まず、書き換えるディレクトリをアプリに変換し、binフォルダを作成し、そこにDLLファイルをいれる。
アプリの構成で、ワイルドカードのマッピングを追加して、ハンドラに.netのDLLを指定してやる。
ディレクトリ下にglobal.asaxを用意して、イベントハンドラを設定し、ThunderMain.URLRewriter関数を指定する。
さらにweb.configを用意して、その中に、変換のルールを正規表現で記述しておく。
以上でそのディレクトリに来たリクエストは、ルールに従って、指定したアプリにクエリ付きで変換されます。
各ディレクトリ毎に設定を行うのは、ツールでは、ディレクトリ(/)だけのURLを捕まえることができないからです。/のリクエストは、まずIISがこれを捕まえて、既定のドキュメント(例えばindex.aspx)に処理を渡してしまいます。つまり.netまで回ってこないのです。変な書き方をすると、思わないエラーが起きることになります。

IIS6.0のワイルドカードマッピング

・server2012で動作しない
今回サーバーを新しくすることになり、Server2012R2を導入しました。そして、IISでサイトを作成し、上記の方法で、DLLおよびweb.config等を設定しました。ところが、このIISにはアプリの構成やワイルドカードのマッピングがありません。よくよく見ると、ハンドラ マッピングというそれらしいアイコンがあったので、それをクリックしてみました。
そこにワイルドカード スクリプト マッピングというのがあったので、これで設定することにしました。画像で分かるように、ワイルドカード*がたくさんあります。一抹の不安を感じながら、URLを実行すると、案の定URLがないというエラーが出ました。その後*を捕まえるため、色々と試してみましたが、見事に全滅しました。ネットもかなり調べましたが、原因は分かりません。これがIISのバージョンアップなのだろうということで、あきらめることにしました。

IIS8.5のワイルドカードマッピング、うまく動作しない。

・Microsoft URL Rewrite Module 2.0
その後、「IIS URL Rewrite」で検索していると、なんだかIISでもURLの書き換えができるというような記事がいくつか見つかりました。さらに調べていくと、Microsoft URL Rewrite Moduleというツールに行き着きました。IIS7.0(Server2008)から提供されていたようです。サイトを構築する上で必要なことなので、今までも、何回か「IIS URL Rewrite」に関して情報がないかどうかは調べていましたが、気がつきませんでした。

・あまり使われていない
これだけ徹底的に調べて、ようやく見つかったということは、この機能はあまり使用されていないということなのでしょう。IIS(.net、Windows)ユーザーは、多分URLを書き換えることがほとんどないのでしょう。確かに実務本位の業務用システムにはURLの整形は全く必要ありません。
しかし、業務用アプリではなく、商用サイトとしてWEBを構築する場合、?から始まるクエリでページを表すのはあまり賢明ではありませんし、ともするとApacheユーザーからはバカにされます。page.aspx?p=1ではなく、1.htmlあるいは1.aspxとした方が分かりやすく、スマートになります。
たったこれだけのことですが、今までのIISでは簡単にはできませんでした。WordPressやPHPなどApache系のwebでは常識なのですが…。これでようやく、ApacheにIISが追いついたというか、webの仲間入りできたことになります。

・モジュールのインストール
URLを書き換えモジュールをダウンロードしてインストールします。IISマネージャに「URL 書き換え」のアイコンが表示されます。

「URL 書き換え」のアイコン

・Web.config
トップページのweb.cofigファイルの<system.webServer>ブロックに書き換えルールを書きます。
下記は、/aaa/10.aspxを/aaa/page.aspx?p=10に書き換える例です。

<system.webServer>
  …
  <rewrite>
    <rules>
      <rule name="1">
        <match url="^aaa/(.*).aspx$" />
        <action url="/aaa/page.aspx?p={R:1}" type="Rewrite" />
      </rule>
      <rule name="3">
        <match url="^abc/(.*)/(.*).html$" />
        <action url="/a/b/c.aspx?d={R:1}&amp;n={R:2}" 
          type="Rewrite" />
      </rule>
    </rules>
  </rewrite>
</system.webServer>

ルールは正規表現で書きます。
先頭の^と末尾の$を入れておくことが必要です。これがないと、/bbbaaa/や1.aspx/もマッチしてしまいます。
()でくくると変数扱いになります。変数呼び出しは正規表現では$1、$2ですが、ここでは{R:1}、{R:2}…になります。変数というより、変数の配列と考えた方がいいでしょう。ちなみに{R:0}はURL全体になるようです。試してみてください。
&は&amp;と書きます。web.configファイルはXMLファイルのため、<や&はそのまま書くとエラーになります。
ルールを書いたweb.cofigを保存します。間違いがなければ、即「URL書き換え」が実行されます。

・GUI
URL書き換えルールは、IISのGUI(URL書き換え)でもできます。MSのテクニカルサイトにはこちらの記述方法が載っています。
上記のようにWeb.configを編集すると、それがGUIでも表示されます。書き方がまずいとXMLエラーになり、内容が表示されない場合がありますので注意が必要です。正式な記述を知りたい場合は、GUIを使用した方がいいでしょう。
結果はWeb.configに反映されます。


GUIでルールを記述、編集する

「URL 書き換え」はApache並みの複雑なURL書き換え、リダイレクト、ヘッダー等の分析もできるようになっているようです。詳しくはMSのテクニカルサイトを参照してください。