Подтвердить что ты не робот

Как разместить несколько сайтов MVC3 на одном виртуальном хосте Apache2?

Я пытаюсь настроить mod_mono с Apache2 на OSX. Я хотел бы запустить несколько проектов 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>
4b9b3361

Ответ 1

ваша проблема заключается в том, что ваше псевдоним и физический путь являются одним и тем же, поэтому apache не знает, какой из них будет обслуживаться.

ПРИМЕЧАНИЕ. Я даю ответ, основываясь на общей конфигурации Apache2, а не на mod_mono, возможно, mod_mono делает что-то, чтобы предотвратить это, я не устанавливал приложения MVC под полем * nix до: -)

В любом случае...

если вы посмотрите на свои конфигурации путей, которые у вас есть...

/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

Когда Apache пытается доставить контент, если нет подфайла файла или существующего косая черта (как в последних 2), он будет автоматически, подстройте папку с /then выпустите перенаправление (как я полагаю, 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)

и заканчивается тем, что запутывается, и делает то же, что настроен любой виртуальный хост, когда он неспособен разрешить путь и возвращает корень сайта.

AS я SAY, однако, это общее поведение NAN-MONO Apache, возможно, что mod_mono может каким-то образом изменить конвейер обработки, что может изменить это поведение.

Я бы рекомендовал разделить его на 3 виртуальных хоста, которые вы можете сделать очень просто даже на одном 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-сервер в поле, а затем установите это как основной домен, используя частный внутренний сетевой адрес.

EG:

Создайте корневую зону и назовите ее "mydevnetwork.local"

затем добавьте в него имена машин:

EG: если ваш компьютер называется devpc1, создайте IP-адрес для "devpc1.mydevnetwork.local" и дайте вашему компьютеру статический IP-адрес EG: 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>

Обратите внимание на iv'e, чтобы пути были такими же, как и у вас выше, и хотя это будет работать, я настоятельно рекомендую вам дать каждому свой уникальный каталог, я обычно делаю что-то вроде:

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

Надеюсь, если выше это не полное решение, вы можете хотя бы получить от него дополнительные идеи исследования.