Конфигурация доступных сайтов Apache 2 - PullRequest
5 голосов
/ 21 декабря 2009

Я пытаюсь написать около 5 веб-сайтов на одном сервере Apache, который находится на одном IP-адресе.

Например:

  • / var / www / site1
  • / вар / WWW / site2
  • / вар / WWW / site3
  • / вар / WWW / site4
  • / вар / WWW / Site5

Однако, если я создам ссылку на сайте 2, просто используя, например. /index.php, вы ожидаете, что он будет выглядеть в /var/www/site2/index.php ... но на самом деле он разрешается в /var/www/index.php.

Есть ли способ настроить Apache, чтобы он знал, что отдельные папки сайта должны вести себя и преобразовываться в отдельные папки?

Это файл, доступный моим сайтам на данный момент. Я полагаю, довольно стандартная настройка:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>
    <Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride all
            Order allow,deny
            allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
            AllowOverride None
            Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
            Order allow,deny
            Allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

Любая помощь будет оценена.

Спасибо, любезно.

Эндрю Барлоу

Ответы [ 2 ]

11 голосов
/ 21 декабря 2009

Вам нужна директива ServerName внутри <VirtualHost>. Он сообщит серверу, какой виртуальный хост используется в настоящее время, в зависимости от запроса браузера (если ваш клиент имеет доступ http://site1.example.com или http://site2.example.com,, они подключатся к тому же IP-адресу, следовательно, к серверу, но запрос содержит URL исходного запроса). Вам нужно будет продублировать свой блок <VirtualHost>, чтобы иметь один блок для каждого размещенного сайта. Каждый блок будет отличаться в основном по ServerName и DocumentRoot. Вы можете использовать «apache2ctl -S», чтобы увидеть, как apache понимает настройки вашего виртуального хоста.

Вы можете использовать один файл с таким типом контента:

<VirtualHost *:80>
  ServerName site1.myserver.com
  DocumentRoot /var/www/site1
  ...
</VirtualHost>

<VirtualHost *:80>
  ServerName site2.myserver.com
  DocumentRoot /var/www/site2
  ...
</VirtualHost>

<VirtualHost *:80>
  ServerName site3.myserver.com
  DocumentRoot /var/www/site3
  ...
</VirtualHost>

<VirtualHost *:80>
  ServerName site4.myserver.com
  DocumentRoot /var/www/site4
  ...
</VirtualHost>

<VirtualHost *:80>
  ServerName site5.myserver.com
  DocumentRoot /var/www/site5
  ...
</VirtualHost>

Конечно, может быть уверен, что днс для всех этих имен попадает на ваш IP. Это не должно быть поддоменами, пока они приземляются на ip вашего сервера, и у вас есть соответствующее имя сервера для него. Если вам нужны дополнительные имена для одного сайта, вы можете добавить их с «ServerAlias ​​secondname.myserver.com thirdname.myserver.com» ниже ServerName

3 голосов
/ 23 мая 2014

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

Это то, что я запускал через командную строку в Ubuntu :

sudo a2enmod rewrite
sudo service apache2 restart

Если sudo service apache2 restart не работает, вы можете попробовать:

sudo /etc/init.d/apache2 restart
...