web-dev-qa-db-ja.com

IIS Expressでカスタムドメインを使用する

伝統的に私は自分のlocalhost開発サーバーでカスタムドメインを使います。次の行に沿った何か

dev.example.com
dev.api.example.com

これは私がFacebookのような外部のAPIを使って作業するときの柔軟性を私に与えました。 127.0.0.1を指すDNSレコードにCNAMEを追加するだけで済むため、これは過去には組み込みのVisual Studio Development Serverでうまく機能しました。

しかし、これをIIS Expressで動作させることはできませんでした。私が試したことはすべて失敗したようです。 IIS Express用のapplicationHost.configファイルに正しいXML設定を追加しましたが、IISの実際のインストールほど有効なエントリとして認識されないようです。

<binding protocol="http" bindingInformation="*:1288:dev.example.com" />

この行を入力してhttp://dev.example.com:1288をリ​​クエストしようとすると、次のメッセージが表示されます。

不正な要求 - 無効なホスト名

誰かが私が明白な何かを見逃しているかどうか知っていますか?それとも、IIS Expressチームは、実際にこの種の用途を理解するのに先見性が欠けていましたか?

285
Nick Berardi

これは私にとってうまくいったものです(VS 2013用に更新、2010年の改訂履歴を参照、VS 2015こちらを参照: https://stackoverflow.com/a/ 32744234/218971 ):

  1. Webアプリケーションプロジェクト▶PropertiesWebを右クリックし、次にServersセクションを次のように設定します。
    • 選択する IIS Express ▼ ドロップダウンから
    • プロジェクトのURL:http://localhost
    • アプリケーションのルートURLを上書きする:http://dev.example.com
    • クリック Create Virtual Directory (ここでエラーが発生した場合は、IIS 5/6/7/8を無効にし、IISのDefault Siteをポート:80以外に変更する必要があるかもしれません。 Skype isn 'を確認してください。ポート80 などを使用するt)
  2. オプション:Start URLhttp://dev.example.comに設定します
  3. %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config(Windows XP、Vista、および7)を開き、<sites> configブロック内のサイト定義を次の行に沿って編集します。

    <site name="DevExample" id="997005936">
        <application path="/" applicationPool="Clr2IntegratedAppPool">
            <virtualDirectory
                path="/"
                physicalPath="C:\path\to\application\root" />
        </application>
        <bindings>
            <binding
                protocol="http"
                bindingInformation=":80:dev.example.com" />
        </bindings>
        <applicationDefaults applicationPool="Clr2IntegratedAppPool" />
    </site>
    
  4. MVCを実行している場合:applicationPoolが「Integrated」オプションのいずれかに設定されていることを確認してください(「Clr2IntegratedAppPool」など)。

  5. hostsファイル を開き、行127.0.0.1 dev.example.comを追加します。
  6. ► Start あなたの申請!

コメントからいくつかの素晴らしいアドバイス:

  • 管理者としてVisual Studioを実行する必要があります。
  • 他の開発者にあなたのIISを見させたい場合はnetsh http add urlacl url=http://dev.example.com:80/ user=everyoneを実行してください。
  • サイトがすべてのホストについて解決するようにしたい場合はbindingInformation="*:80:"を設定します。あなたが望む任意のポートを使用してください、80はちょうど便利です。
350
David Murdoch

Visual Studio 2015の場合、上記の回答の手順は適用されますが、applicationhost.configファイルは新しい場所にあります。あなたの "solution"フォルダでパスをたどってください、あなたがアップグレードして、あなたのマシンにapplicationhost.configの2つのバージョンがあるならば、これは混乱します。

\.vs\config

そのフォルダ内にあなたのapplicationhost.configファイルがあります。

あるいは、ソリューションフォルダで.configファイルを検索してその方法で見つけることもできます。

私は個人的に次の設定を使用しました:

enter image description here

私のhostsファイルに次のように:

127.0.0.1       jam.net
127.0.0.1       www.jam.net

そして、私のapplicationhost.configファイルには以下のものがあります。

<site name="JBN.Site" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\Dev\Jam\shoppingcart\src\Web\JBN.Site" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:49707:" />
            <binding protocol="http" bindingInformation="*:49707:localhost" /> 
    </bindings>
</site>

Visual Studio 2015のインスタンスを管理者として実行することを忘れないでください!毎回これを実行したくない場合は、次のようにしてください。

デフォルトで管理者としてVisual Studioを実行する方法

私はこれが誰かに役立つことを願っています、私はビジュアルスタジオ2015にアップグレードしようとするとき問題を抱えていました、そして、私の構成のどれも引き継がれていないことに気付きました。

140
njfife

IIS Expressを指定してVisual Studio 2012を使用している場合、既存のバインディングをに変更しても永続的に機能しません。 (あなたがVSを閉じるまではうまくいくかもしれませんが、その後は事態が混乱してしまいます。)

重要なのは、既存のlocalhostバインディングを保持し、その後にを追加することです。

管理者として実行しているのでない限り、 netsh add urlacl を実行する必要があります(ローカルホスト以外のサイトを標準ユーザーとして実行する権限を付与するため)。

任意のホスト名を許可したい場合は、完全なプロセスは次のとおりです。

  1. Webアプリケーションを作成し、それがどのポートを使用しているかを調べます(プロジェクトプロパティ、[Web]タブ、[Project Url]を参照)。
  2. 管理者のプロンプトから、次のコマンドを実行します(portnumberを#1で見つけたポート番号に置き換えます)。

    netsh http add urlacl url="http://*:portnumber/" user=everyone
    netsh http add urlacl url="http://localhost:portnumber/" user=everyone
    

セキュリティを強化するために、全員ではなく自分のユーザー名(DOMAIN\USER)を使用することもできます。

  1. Applicationhost.config(通常はMy Documents\IIS Express\configの下)を開き、自分のポート番号を持つ要素を見つけます。
  2. 必要なホスト名を使用してもう1つバインディングを追加します(この場合は*)。例えば:

    <site name="MvcApplication1" id="2">
        <application path="/" applicationPool="Clr4IntegratedAppPool">
            <virtualDirectory path="/" physicalPath="C:\sites\MvcApplication1" />
        </application>
        <bindings>
            <binding protocol="http" bindingInformation="*:12853:localhost" />
            <binding protocol="http" bindingInformation="*:12853:*" />
        </bindings>
    </site>
    

すべてのホスト名(*)を開くには、2つのnetshコマンド(1つは*用、もう1つはlocalhost用)が必要です。特定のホスト名だけを開きたい場合は、2番目のnetshコマンド(localhost)は厳密には必要ありません。特定のホスト名を持つものだけで十分です。

44
dmatson

無効なホスト名は、IIS Express設定ファイルで設定した実際のサイトが(おそらく)実行されていないことを示します。 IIS Expressには、IISのようなプロセスモデルはありません。


サイトを実行するには、(webmatrixを開いてアクセスするか、/ siteパラメータを指定してiisexpress.exeを(インストールディレクトリから)呼び出すことで)明示的に開始する必要があります。


一般に、完全修飾DNS名をローカルアクセスに使用できるようにするための手順は、次のとおりです。あなたのDNS名の例dev.example.comを使用しましょう。

  1. %windows%\ system32\drivers\etc\hostsファイルを編集して、dev.example.comを127.0.0.1にマッピングします(管理者特権が必要)。 (Nickの場合のように)DNSサーバーを制御する場合は、この手順は不要なのでDNSエントリで十分です。
  2. プロキシ経由でインターネットにアクセスする場合は、dev.example.comがプロキシに転送されないようにしてください(ブラウザの例外リストに追加する必要があります(IEの場合は、Tools/Internet Optionsになります)。/Connections/Lan Settingsをクリックし、次にProxy Server/Advancedに移動してdev.example.comを実行リストに追加します。
  3. あなたのサイトのIISエクスプレスバインディング(例:Site1)にdev.example.comを含めるように設定します。バインディングを使用するには管理者特権が必要です。代わりに、http.sysでワンタイムURL予約を行うことができます。

    netsh http add urlacl url=http://dev.example.com:<port>/ user=<user_name>

  4. iisexpress /site:Site1を起動するか、WebMatrixでSite1を開く

23
Jaro Dunajsky

私のWebMatrixでは、IIS高速インストールを"*:80:localhost"から"*:80:custom.hostname"に変更してもうまくいきませんでした( "Bad Hostname"、適切なetc\hostsマッピングがあっても)、しかし"*:80:"しました work - そしてここで他の答えによって必要とされる追加ステップのどれもと。 "*:80:*"がそれをしないことに注意してください。 2番目のアスタリスクを省きます。

18
rymo

パブリックIPアドレスを自分のワークフローに統合しようとしていましたが、これらの答えは役に立ちませんでした(私はIDEとしてIDEを使いたいのですが)。しかし、上記の方法で解決策を導き出しました(これをVisual Studio 2012/Windows 8と統合するために約2時間壁にぶつかった後)。

applicationhost.config Visual StudioによってC:\Users\usr\Documents\IISExpress\configの下に生成されます

    <site name="MySite" id="1">
        <application path="/" applicationPool="Clr4IntegratedAppPool">
            <virtualDirectory path="/" physicalPath="C:\Users\usr\Documents\Visual Studio 2012\Projects\MySite" />
        </application>
        <bindings>
            <binding protocol="http" bindingInformation="*:8081:localhost" />
            <binding protocol="http" bindingInformation="*:8082:localhost" />
            <binding protocol="http" bindingInformation="*:8083:192.168.2.102" />
        </bindings>
    </site>
  • IISExpressをAdministratorとして実行するように設定し、外部ホスト(ローカルホストではない)にバインドできるようにします。
  • バインドを可能にする管理者としてプロセスを開始できるようにAdministratorとしてVisual Stuioを実行します。

最終的には、私の場合は192.168.2.102を参照してテストすることができます(たとえばAndroidエミュレータなど)。これは間違いなく私にとっては苛立たしいプロセスなので、他の人に役立つことを願っています。

どうやらそれは私が無効にして見たいのですがセキュリティ機能です。

7

投票された回答は有効です..そしてこの情報は私をかなり助けてくれました。私はこのトピックが以前に議論されたことを知っていますが、私はいくつかの追加の入力を加えたいと思いました。ユーザーは、Users IISExpress/Configディレクトリにあるapplication.configファイルを「手動で編集する」必要があると言っています。これは私にとって大きな問題でした。ソース管理を介して構成をさまざまな開発者に配布したいからです。

私が見つけたのは、「C:¥Program Files¥IIS Express¥appcmd.exe」プログラムを使用して、このファイルの更新を自動化できるということです。制御パラメータを見つけるのに時間がかかりましたが、ここで私の発見を共有しています。基本的に、IIS Expressを使用してHostヘッダーの設定を簡単にするために、NETSHコマンドとAPPCMD.EXEの両方を実行する.batファイルを作成することができます。

あなたのインストール用batファイルは次のようになります。

netsh http add urlacl url=http://yourcustomdomain.com:80/ user=everyone 

"C:\Program Files\IIS Express\appcmd.exe" set site "MyApp.Web" /+bindings.[protocol='http',bindingInformation='*:80:yourcustomdomain.com']

私はまた、これらのバインディングをクリーンアップする「アンインストール」batファイルを作成します。(私はしばしばホスト名に敏感なコードで作業できるようにImをDNSを偽装しているので)

netsh http delete urlacl url=http://yourcustomdomain.com:80/

"C:\Program Files\IIS Express\appcmd.exe" set site "MyApp.Web" /-bindings.[protocol='http',bindingInformation='*:80:yourcustomdomain.com']

私はこの情報が誰かに役立つことを願っています。

4
Jesse Flint

Jaroの助言に従い、私はこれをWindowsのXPとIIS Express(Web Matrix経由でインストール)の下で少し修正することで動作させることができ、localhostだけに限定されませんでした。バインディングを正しく設定するだけの問題です。

  1. Webアプリケーションルートのフォルダから新しいサイトを作成するには、WebMatrixを使用してください。
  2. WebMatrixを閉じます。
  3. %USERPROFILE%\My Documents\IISExpress\config\applicationhost.configを開く (Windows XP。Vistaと7つのパスは似ています) そして<sites> configブロック内のサイト定義を以下の行に沿うように編集します。

    <site name="DevExample" id="997005936">
        <application path="/" applicationPool="Clr2IntegratedAppPool">
            <virtualDirectory
                path="/"
                physicalPath="C:\path\to\application\root" />
        </application>
        <bindings>
            <binding
                protocol="http"
                bindingInformation="*:80:dev.example.com" />
        </bindings>
        <applicationDefaults applicationPool="Clr2IntegratedAppPool" />
    </site>

MVCを実行している場合は、applicationPoolを「統合」オプションの1つに設定したままにします。

4
Neil Monroe

上記のJessa Flintのように、変更をソース管理に保持したいので、手動で。vs\config\applicationhost.configを編集したくありませんでした。私はまた別のバッチファイルを持ちたくなかった。私はVS 2015を使用しています。

プロジェクトのプロパティ→イベントのビルド→イベントの事前ビルドのコマンドライン:Screenshot of project properties


::The following configures IIS Express to bind to any address at the specified port

::remove binding if it already exists
"%programfiles%\IIS Express\appcmd.exe" set site "MySolution.Web" /-bindings.[protocol='http',bindingInformation='*:1167:'] /apphostconfig:"$(SolutionDir).vs\config\applicationhost.config"

::add the binding
"%programfiles%\IIS Express\appcmd.exe" set site "MySolution.Web" /+bindings.[protocol='http',bindingInformation='*:1167:'] /apphostconfig:"$(SolutionDir).vs\config\applicationhost.config"

ポート番号をご希望のポートに変更してください。

3
Jon

Davidの解決策はいいです。しかし、プロジェクトのURLはhttp://dev.example.comで上書きされていても、プロジェクトのURLは依然としてローカルホストであるため、ページ内の<script>alert(document.domain);</script>が依然として「localhost」と警告することがわかりました。私が遭遇するもう一つの問題は、私がDavid Murdochによって推奨されるように80ポート番号を使ってSkypeを無効にしたとしても、ポート80がすでに使われていることを私に警告することです。だから私ははるかに簡単ですもう一つの解決策を考え出しました:

  1. 管理者としてメモ帳を実行し、C:\ Windows\System32\drivers\etc\hostsを開き、127.0.0.1 mydomainを追加してファイルを保存します。
  2. Visual Studio 2013でWebプロジェクトを開き(注:管理者としても実行する必要があります)、プロジェクトを右クリックし、[プロパティ] - > [Web]([IIS Express]オプションの[プロジェクトURL]をhttp://localhost:33333/とします)に変更します。 http://localhost:33333/からhttp://mydomain:333333/へ注:この変更後は、プロジェクトのURLボックスの右側にある[仮想ディレクトリの作成]ボタンをクリックしたり、Visual Studioの[保存]ボタンをクリックしたりしても成功しません。次のステップ3の後に設定を保存できます。
  3. %USERPROFILE%\ My Documents\IISExpress\config\applicationhost.configを開き、「33333:localhost」を検索して「33333:mydomain」に更新し、ファイルを保存します。
  4. 手順2の説明に従って設定を保存します。
  5. ビジュアルスタジオのWebページを右クリックして、[ブラウザで表示]をクリックします。これで、ページはhttp://mydomain:333333/の下に開かれ、ページ内の<script>alert(document.domain);</script>は "mydomain"を警告します。

注:上記のポート番号は33333と想定されています。ビジュアルスタジオで設定したポート番号に変更する必要があります。

編集後:今日、私は別のドメイン名を試してみて、次のエラーを受け取りました:IIS Express Webサーバーを起動できません。 URLの登録に失敗しました...アクセスは拒否されました。 (0x80070005) Windowsタスクバーの右隅にあるIIS Expressアイコンを右クリックしてIIS Expressを終了し、管理者としてVisual Studioを再起動すると問題は解決しました。 。

3
wcb1

万が一の場合に備えて、ここに残してください。

IIS ExpressでWordpress Multisiteセットアップ用のカスタムドメインを作成する必要がありましたが、管理者としてWebmatrix/Visual Studioを起動するまで何も機能しませんでした。それから私は同じアプリケーションにサブドメインをバインドすることができました。

<bindings> 
    <binding protocol="http" bindingInformation="*:12345:localhost" />
    <binding protocol="http" bindingInformation="*:12345:whatever.localhost" />
</bindings>

次に http://whatever.localhost:12345 / に移動します。

0
MW247

私はこれにiisexpress-proxy(npmから)を使っていました。

https://github.com/icflorescu/iisexpress-proxy

0
trd