21

OSX で Apache2 を使用して mod_mono を構成しようとしています。同じ仮想ホスト上で複数の MVC3 プロジェクトを実行したいのですが、何らかの理由で最初にリストされたプロジェクトしか機能していません。これに関するドキュメントはあまりないため、これに関するヘルプは大歓迎です。さまざまな設定オプションを試しましたが、どれも機能していないようです。

Listen *:9005
<VirtualHost *:9005>
  DocumentRoot "/Library/WebServer/vhosts/api"
  ServerName api
  MonoAutoApplication disabled

  Alias /gamecenter "/Library/WebServer/vhosts/api/gamecenter"
  AddMonoApplications gamecenter "/gamecenter:/Library/WebServer/vhosts/api/gamecenter"
  MonoServerPath gamecenter "/usr/bin/mod-mono-server4"
  MonoDebug gamecenter true
  MonoSetEnv gamecenter MONO_IOMAP=all
  MonoUnixSocket gamecenter-stage /tmp/mod_mono_server_gc
  <Location /gamecenter>
    Allow from all
    Order allow,deny
    MonoSetServerAlias gamecenter
    SetHandler mono
    SetOutputFilter DEFLATE
    SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png)$" no-gzip dont-vary
  </Location>

  Alias /gamecenter-stage "/Library/WebServer/vhosts/api/gamecenter-stage"
  MonoServerPath gamecenter-stage "/usr/bin/mod-mono-server4"
  MonoDebug gamecenter-stage true
  MonoSetEnv gamecenter-stage MONO_IOMAP=all
  AddMonoApplications gamecenter-stage "/gamecenter-stage:/Library/WebServer/vhosts/api/gamecenter-stage"
  MonoUnixSocket gamecenter-stage /tmp/mod_mono_server_gcs
  <Location /gamecenter-stage>
    Allow from all
    Order allow,deny
    MonoSetServerAlias gamecenter-stage
    SetHandler mono
    SetOutputFilter DEFLATE
    SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png)$" no-gzip dont-vary
  </Location>

  <IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript
  </IfModule>
</VirtualHost>
4

1 に答える 1

3

あなたの問題は、エイリアス名と物理パスがまったく同じであるため、apache がどちらを提供するかを認識できないことです。

注: mod_mono ではなく、一般的な Apache2 構成に基づいて回答を提供しています。おそらく mod_mono がこれを防ぐために何かを行っている可能性があります。以前に *nix ボックスの下に MVC アプリを設定したことがありません:-)

ともかく...

あなたが持っているパス構成を見ると...

/Library/WebServer/vhosts/api
/Library/WebServer/vhosts/api/gamecenter
/Library/WebServer/vhosts/api/gamecenter-stage

エイリアスが配置されていない場合、これらはマップしようとしているパスにすでに解決されています。

/Library/WebServer/vhosts/api  = /
/Library/WebServer/vhosts/api/gamecenter  = /gamecenter
/Library/WebServer/vhosts/api/gamecenter-stage  = /gamecenter-stage

次に、Apacheにそれを伝えます

/ = /
/gamecenter = /gamecenter
/gamecenter-stage = /gamecenter-stage

ファイルのサブフィックスまたは既存のスラッシュがない場合 (最後の 2 のように) Apache がコンテンツを配信しようとすると、自動的にフォルダーに / をサブフィックスとして付け、リダイレクト (306 だと思います) を発行し、基本的にブラウザに EG からリダイレクトするように指示します。 :

/gamecenter to /gamecenter/

Alias ... が場所 x にあることを伝えるエイリアスが配置されているので、サービスを提供することを決定する必要があります。

/gamecenter/

また

/gamecenter/gamecenter/../ (Because in terms of folder structure the alias name is 1 folder level down in the web than it is physically)

混乱してしまい、パスを解決できない場合に仮想ホストのセットアップが行うことも混乱し、Web サイトのルートが返されます。

ただし、これは一般的な NON-MONO Apache の動作であり、mod_mono が何らかの方法で処理パイプラインを変更して、この動作を変更する可能性があります。

私がお勧めするのは、これを 3 つの仮想ホストに分割することです。これは、1 つの IP でも非常に簡単に実行できます。

最初にやりたいことは、マスター Apache 設定ファイルのどこかに、

Listen 9005

声明。これにより、すべての仮想インスタンスがそのポートと他の構成済みポートでリッスンするようになります EG: 80

次に、すべての仮想ホストをキャッチするデフォルトがあることを確認します。これにより、他の場所にマップされていないサーバー名がすべてキャッチされます。

<VirtualHost *>
  DocumentRoot "/some/folder/where/the/default/is/"
  #Followed by other server directives. NOTE: there is NO servername line
</VirtualHost>

セットアップが完了したら、「api」サブドメインに移動します

<VirtualHost *>
  ServerName api
  DocumentRoot "/Library/WebServer/vhosts/api/"
  #Other required directives here
</VirtualHost>

この時点で、一時停止してドメイン名について説明します。これが内部テスト システムである場合 (そうであると思われます)、ボックスに DNS サーバーをインストールし、プライベートな内部ネットワーク アドレスを使用してそれをマスター ドメインとして設定すると、仮想ドメインでの生活がより簡単になります。

例えば:

ルート ゾーンを作成し、「mydevnetwork.local」という名前を付けます。

次に、マシン名を追加します。

例: PC の名前が devpc1 の場合、「devpc1.mydevnetwork.local」の IP アドレスを作成し、PC に EG の静的 IP アドレスを割り当てます: 192.168.50.1

次に、そのエイリアスを設定します

api.mydevnetwork.local = devpc1.mydevnetwork.local

ここで完全な DNS セットアップの投稿を行う余裕はありませんが、うまくいけば、アイデアが得られることを願っています.

DNS (または最低限のホスト ファイル エントリ) をセットアップすると、Apache の下の仮想ホストの管理が非常に簡単になります。

<VirtualHost *>
  ServerName api.mydevnetwork.local
  DocumentRoot "/Library/WebServer/vhosts/api/"
  #Other required directives here
</VirtualHost>

また、必要に応じて別のマシンに簡単に移動できます。

残りの仮想ホストもほぼ同じ方法でセットアップできます

<VirtualHost *>
  ServerName gamecenter.mydevnetwork.local
  DocumentRoot "/Library/WebServer/vhosts/api/gamecenter/"
  #Other required directives here
</VirtualHost>

<VirtualHost *>
  ServerName gamecenter-stage.mydevnetwork.local
  DocumentRoot "/Library/WebServer/vhosts/api/gamecenter-stage/"
  #Other required directives here
</VirtualHost>

上記と同じパスを設定することに注意してください。これは機能しますが、それぞれに独自の一意のフォルダーを指定することを強くお勧めします。通常は次のようにします。

wwwroot
    api.mydevnetwork.local
        htdocs   <-- Web files go here
        cgi-bin  <-- cgi scripts go here and it's mapped to /cgi-bin/
        logs     <-- logs here
        access   <-- htpasswd files here

上記が完全な解決策ではない場合、少なくともそこからさらに調査のアイデアが得られることを願っています。

于 2011-10-12T19:51:38.790 に答える