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


304

従来、私は自分のlocalhost開発サーバーでカスタムドメインを使用しています。以下に沿ったもの:

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

これにより、Facebookなどの外部APIを操作するときに、かなりの柔軟性が得られました。これは、組み込みのVisual Studio Development Serverで過去にうまく機能しました。なぜなら、私がしなければならないことは、CNAMEをを指すDNSレコードに追加することだけだったから127.0.0.1です。

ただし、これをIIS Expressで動作させることができませんでした。私が試みたすべてが失敗したようです。applicationHost.configIIS Express のファイルに正しいXML構成を追加しましたが、IISの実際のインストールのようにエントリが有効であると認識していません。

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

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

不正なリクエスト-無効なホスト名

明らかなものがない場合、誰かが知っていますか?または、IIS Expressチームは、この種の使用法を実際に見通すことができませんでしたか?


アプリケーションノードのapplicationPool属性が "Clr2IntegratedAppPool"または "Clr4IntegratedAppPool"に設定されていることを確認してください。「Clr2ClassicAppPool」または「Clr4ClassicAppPool」を使用すると表示されるBad Hostnameエラーが発生しました。
Neil Monroe

混乱-CNAMEレコードはIPアドレスを受け付けず、代わりに他のホスト名を受け付けます。もしかしてAレコード?
Scott Coates

1
私はこれで問題の多くを持っていたし、代わりにIIS Expressは、IISだけで使用することがはるかに容易に見つける
user0b101010

私もこれに遭遇しました。私はそれがポート番号を見てドメインを無視することを望んでいました。そのような運はありません。....私は有効ポートで「すべてを受け入れる」ことがしたい
ブレイディモリッツに

今すぐ投票してください!:私は、ユーザーボイスの提案追加したvisualstudio.uservoice.com/forums/121579-visual-studio/...
ルークPuplett

回答:


367

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

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

    <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が「統合」オプション(「Clr2IntegratedAppPool」など)の1つに設定されていることを確認します。

  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が便利です。

12
これはまさに私がやったことであり、これを書き込もうとしていたのですが、あなたは私をパンチに打ちのめしました:-)補足として、他の開発者にあなたのIISを見せたい場合は、「netsh http add urlacl url = dev.example.com:80 user = everyone "
EBarr

6
また、すべてのホストでサイトを解決したい場合は、次を使用できます。bindingInformation = "*:80:"これを使用して、localtunnel.comが機能するようにします。
ランスフィッシャー

17
アクセス拒否エラーが発生しました。管理者としてVS 2012を実行すると修正されました。
xanadont 2012年

3
これはIIS Expressのどのバージョンですか?私はVS2012(これはIIS Express 8.0と考えています)を実行しています。Webプロパティページの[サーバー]領域の下にある[ローカルIISサーバーを使用する]ラジオボタンをクリックすると、[IIS Expressを使用する]チェックボックスをクリックしてから、 「mydev.example.com」を入力して「仮想ディレクトリの作成」ボタンをクリックすると、「仮想ディレクトリを作成できません。Webサイトmydev.example.comを作成できません」というエラーが表示されます。サーバー名には「localhost」を指定する必要があります。
Michael McCarthy 2013年

12
これは複雑です。いくつかの異なる場所で展望を変える必要があります。本当の混乱を作るのは簡単です。本当に簡単な方法はありませんか?
アンダーソン

151

以下のためのVisual Studio 2015上記の回答の手順が適用されますが、applicationhost.configファイルは新しい場所です。「ソリューション」フォルダーでパスをたどります。これは、アップグレードapplicationhost.configしてマシンにの2つのバージョンがある場合、混乱を招きます。

\.vs\config

そのフォルダー内にapplicationhost.configファイルが表示されます

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

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

ここに画像の説明を入力してください

私の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を実行する方法

これが誰かのお役に立てば幸いです。VisualStudio 2015にアップグレードしようとしたときに問題が発生し、私の構成が引き継がれていないことがわかりました。


9
重要な部分は、他の多くの回答で提案されいるデフォルトを置き換えるのではなく、2番目のバインディングを追加することです。そして、VSを管理者として実行する必要があります。ありがとうございました。*:49707:*:49707:localhost
fracz 2016年

3
http://jam.127.0.0.1.xip.io/hostsファイルを変更したくない場合のように、URLを使用することもできます。さらに、共同編集者は自分の共同編集者を変更する必要はありません。xip.ioを参照してください。
Zack Martin

1
フォルダ ".vs"は非表示であり、最初は表示する必要があることに注意することをお勧めします
失望

3
これはVisual Studio 2017でも動作することを確認しました。興味深いことに、私は両方の<binding>要素を必要としませんでした( "localhost"のない最初の要素のみ)。ただし、Visual Studioは確かに管理者として実行する必要があります。これは一種の迷惑なことです
Loren Paulsen 2017

1
管理者がこれを実行することを許可されていない人たちのための方法があったらいいのにと思います。どのようにして安全にこれを有効にすることができるかについて何も考えずに管理者特権を全面的に禁止する雇用者/クライアントは、信じられないほど近視眼的です。
スティーブペティファー2017

44

IIS ExpressでVisual Studio 2012を使用する場合、既存のバインディングの変更は永続的に機能しません。(VSを閉じるまでは機能するかもしれませんが、その後は本当に混乱します。)

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

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

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

  1. Webアプリケーションを作成し、使用しているポートを確認します(プロジェクトのプロパティ、[Web]タブ、[プロジェクトの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コマンド(*用とlocalhost用の2つ)が必要になることに注意してください。特定のホスト名のみを開きたい場合は、2番目のnetshコマンド(localhost)は厳密には必要ありません。特定のホスト名を持つもので十分です。


同じことをしました(1番目のアプローチ)。mycustomhost:myportnrを参照すると、「Service Unavailable」が表示されます。VS2012。「マイドキュメント」の下にIIS Expressがなく、c:\ Program files \ IIS Expressにあるapplicationhost.configにWebアプリケーションの設定がなかったため、2番目を試すことができません...
firepol

2
VS2013では、この構成が機能するのは、管理者として実行した場合のみです。(非管理者として実行していると、IIS Expressは2番目のバインディングを無視するようです-通知アイコンからUIを開くと、IISはサイトを実行中と表示しますが、最初のバインディングのみを表示し、localhostのみを使用できます...私は管理者として実行していますが、UIに両方のバインディングが表示され、両方とも機能します。)urlaclsをnetshで追加しましたが、これは違いがないようです-IIS Expressはlocalhost以外のものもバインドしようとしないようです。上昇していない場合。
イアングリフィス

*解決された「Service Unavailable」のレコードを追加してください。
jerone

ポート443でHTTPSを使用する必要があるシナリオについてはどうですか?
キクソカ

@Kixoka HTTPSを実行しようとしています。なんとか動作させることができましたが、ブラウザは証明書がドメインと一致しないと不平を言っています。私はそれを乗り越えましたが、すべてのリソースがロードに失敗するため、画像、スクリプト、CSSはありません。
Prime By Design

24

無効なホスト名は、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にマップします(管理者権限が必要です)。DNSサーバーを制御している場合(Nickの場合など)、この手順は必要ないため、DNSエントリで十分です。
  2. プロキシ経由でインターネットにアクセスする場合は、dev.example.comがプロキシに対応していないことを確認してください(ブラウザの例外リストに追加する必要があります(IEの場合は、ツール/インターネットオプション/接続/ LAN設定、次に、Proxy Server / Advancedに移動し、dev.example.comを例外リストに追加します。
  3. サイト(例:Site1)のIIS Expressバインディングを構成して、dev.example.comを含めます。バインディングを使用するには、管理者権限が必要です。または、http.sysを使用して1回限りのURL予約を行うこともできます。

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

  4. iisexpress /site:Site1WebMatrixでSite1を起動または開く


2
こんにちはJaro、助けてくれてありがとう。ただし、ホストファイルではなく、127.0.0.1が私のDNSに設定されているため、すべての開発者が同じアクセス権を持ちます。2つ目は、マシンのすべてのIPアドレスにバインドされているが "localhost"のホストヘッダーしか受け入れないため、まったく役に立たない設定である "*:1234:localhost"としてバインドを設定しない限り、VSでデバッグを開始できません。 」なぜ彼らは単に「127.0.0.1:1234:」を実行し、このがらくたをすべて回避しなかったのですか。IPとポートが解決される限り、ホストヘッダーは必要ありません。また、管理者として実行することは、大規模なチームにとっては非常に大きな負担になります。IIS Expressはどのような災害ですか。
Nick Berardi、2011年

1
また、参考として、Bad Request - Invalid Hostname私が使用しようとしているホスト名は解決できないことを意味します。IISExpressチームの無限の知恵により、機能する唯一のホストヘッダーとして「localhost」を明確に呼び出すことにしたためです。そしてVSでは、「*:1234:localhost」以外の方法で実行することはできません
Nick Berardi

2
127.0.0.1の問題についてお聞きします。127.0.0.1のトラフィックが含まれていないため、バインディングの「localhost」は間違いなく苦痛です。現在のhttp.sys(httpプロトコルハンドラー)の契約により、管理以外の目的で "localhost"のみを認識するため、設計が制限されます。管理者のみの要件は、http.sysを使用した1回限りのURL予約によって軽減できます(上記の情報が更新されます)。Visual Studioでの正確な使用を教えてください(それはSP2010のVS2010ですか?)。この問題にもう少し取り組み、(うまくいけば)問題を解決してみましょう。
Jaro Dunajsky、2011年

注-netsh.exeエラー87が表示される場合、パラメーターが正しくありません。ホスト名の後にURIパス(/)を省略したことが原因である可能性があります。
Tim Lovell-Smith

19

私WebMatrixのIIS Expressでから変えるインストール"*:80:localhost"する"*:80:custom.hostname"(さえなど、適切な\ホストのマッピングで、「悪いホスト名」)の仕事をしませんでしたが、"*:80:" やった仕事を-と、ここで他の回答に必要な追加手順のいずれもして。し"*:80:*"ないことに注意してください。2番目のアスタリスクは省略します。


3
uuuum、これで"*:80:*"うまくいきましたが、その後コンピュータを再起動したところ、に変更して"*:80:"すべてが正常になるまで突然動作しなくなりました!ありがとう。
CWSpear 2013

2
最後に!!また、他のすべての手順を実行し、最後の*を削除すると機能しました。
Charles Philip

これが私のために働いたことを言うためにちょうどここに。私は受け入れられた答えを試し、すべての変更をあなたが言ったものに戻し、すべてがうまくいきました。VS2013 Update4を使用しています。
JasonWilczak

これは完全に動作するようです。VS2017を使用している場合、それをapplicationhost.configファイルに書き込むためにプロジェクトURLに何を配置すればよいかわかりませんか?VS IDEから設定できますか?
ジム、

8

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

下のVisualStudioによって生成されたapplicationhost.configC:\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外部アドレス(ローカルホストではない)にバインドできるように実行するように設定します
  • Visual Stuioをとして実行してAdministrator、バインディングの実行を許可する管理者としてプロセスを開始できるようにします。

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

どうやらこれは無効にしたいセキュリティ機能です。


8

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

プロジェクトプロパティ→ビルドイベント→ビルド前イベントコマンドライン: プロジェクトプロパティのスクリーンショット


::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"

ポート番号を目的のポートに変更してください。


ここで1つのマイナーな追加。Windowsファイアウォールでそのポートを開くルールを作成してください。それからそれは魅力のように働きました!
Peter M

複数の開発者が自分のマシンでIIS Expressを実行している場合、.vs \ config \ applicationhost.configを編集することは不可能であるため、私はあなたの答えを気に入っています。ありがとうございました!
コリン

6

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

私が見つけたのは、「C:\ Program Files \ IIS Express \ appcmd.exe」プログラムを使用してこのファイルの更新を自動化できることです。制御パラメーターを見つけるのにしばらく時間がかかりましたが、ここで私の発見を共有します。基本的に、NETSHコマンドとAPPCMD.EXEの両方を実行する.batファイルを作成して(必要に応じてホストファイルをスワップアウトして)、IIS Expressでホストヘッダーの構成を簡単にすることができます。

インストール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']

また、これらのバインディングをクリーンアップする "アンインストール"バットファイルも作成します。(多くの場合、ホスト名に依存するコードで作業できるように、私はしばしば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

Jaroのアドバイスに従い、Windows XPとIIS Express(Web Matrix経由でインストール)で小さな変更を加えるだけでこれを機能させることができ、localhostだけに限定されませんでした。バインディングを正しく設定するだけです。

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

    <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つに設定したままにします。


3

デビッドの解決策は良いです。しかし<script>alert(document.domain);</script>、ページのが「localhost」を警告していることがわかりました。http://dev.example.comです。私が遭遇したもう1つの問題は、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. Visual StudioでWebページを右クリックし、[ブラウザーで表示]をクリックします。これで、ページがの下http://mydomain:333333/で開かれ、<script>alert(document.domain);</script>ページで「mydomain」に警告が表示されます。

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

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


1
今、これが適切な解決策と見なされるべき答えです!あなたは、Visual Studio 2015を使用している場合は必ず.vs / configにありますのapplicationHost.configを編集してください
ファビオSalvalai

1

上記のすべてを試しましたが、何もうまくいきませんでした。問題を解決したのは、hostsファイルにIPv6バインディングを追加することでした。@David Murdochsの回答のステップ5で、1行ではなく2行を追加します。

127.0.0.1 dev.example.com
::1 dev.example.com

私はそれ$ ping localhostを返すために使用されたコマンドラインからチェックすることでそれを理解しました:

Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

代わりに、次を返します:

Reply from ::1: time<1ms

理由はわかりませんが、何らかの理由でIIS ExpressはIPv4ではなくIPv6を使い始めました。



0

誰かが必要な場合に備えて、これをここに残します...

IIS ExpressでWordpressマルチサイトをセットアップするためのカスタムドメインが必要でしたが、Webmatrix / Visual Studioを管理者として実行するまで何も機能しませんでした。次に、サブドメインを同じアプリケーションにバインドすることができました。

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

次に、http://whatever.localhost:12345 /にアクセスすると実行されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.