Как настроить виртуальный хост для локальной разработки

10

Ubuntu 11.04 установлен с apache2 и все соответствующие пакеты установлены. Я перепробовал большинство блогов и сделал Google и другие форумы моими лучшими друзьями, но пока не могу решить эту проблему.

Мне нужно настроить именованный виртуальный хост в моей локальной системе для разработки.

Я создал каталог "vivek" /var/wwwи скопировал файл index.html по умолчанию и отредактировал некоторые элементы.

Я добавил файл vivek.comв /etc/apache2/sites-availableследующим образом :

# Ensure that Apache listens on port 80
Listen 80

# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80

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

# Other directives here
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/vivek/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>

</VirtualHost>



<VirtualHost *:80>
ServerAdmin webmaster@localhost

DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
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 ${APACHE_LOG_DIR}/error.log

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

CustomLog ${APACHE_LOG_DIR}/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>

</VirtualHost>

Т.е. я добавил следующие строки

# Ensure that Apache listens on port 80
Listen 80

# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80

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

# Other directives here
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/vivek/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>

</VirtualHost>

К файлу по умолчанию, который уже присутствовал в папке «sites-available» (перед редактированием сделал резервную копию файла по умолчанию)

Добавил это в файл hosts, представленный в / etc / hosts

127.0.0.1 localhost
127.0.1.1 vivek-PC
127.0.0.1 www.vivek.com

Выполнены следующие операции без ошибок:

root@vivek-PC:~# a2ensite vivek.com
Enabling site vivek.com.
Run '/etc/init.d/apache2 reload' to activate new configuration!
root@vivek-PC:~# /etc/init.d/apache2 reload
* Reloading web server config apache2

Когда я вошел www.vivek.com, он дал мне index.html по умолчанию, /var/wwwно не присутствовал в папке / var / www / vivek, которая редактируется.

Позже я отредактировал index.html, /var/wwwно все еще получал тот же index.html (по умолчанию - до редактирования). Все index.htmls были отредактированы, но у Apache, кажется, есть какой-то скрытый, который продолжает появляться, когда я запрашиваюwww.vivek.com

Ирония в том, что после перезапуска - Apache подошел нормально, но мой сайт - www.vivek.comне появился (даже с index.html, который скрыт, бог знает где !!) .. Теперь мой браузер показывает «Невозможно подключиться» "

Пожалуйста, помогите. Я пытался настроить это с недели безуспешного результата.

mvivekc
источник

Ответы:

6

Позже я отредактировал index.html из / var / www, но все еще получал тот же index.html (по умолчанию - до редактирования). Все index.htmls были отредактированы, но у Apache, похоже, есть какой-то скрытый, который появляется, когда я запрашиваю www.vivek.com

Читая это, я предполагаю, что вы просматриваете кэшированный файл. Вместо нажатия F5или нажатия кнопки «Обновить» пропустите кэш при обновлении, нажав « CtrlF5.

Альтернативно, используйте программу командной строки curl(которая не установлена ​​по умолчанию). Пример использования:

$ curl -i http://localhost/
HTTP/1.1 200 OK
Date: Sat, 02 Jul 2011 00:42:01 GMT
Server: Apache/2.2.17 (Ubuntu)
Last-Modified: Fri, 01 Jul 2011 04:12:49 GMT
ETag: "4507-b1-4a6fa3b114149"
Accept-Ranges: bytes
Content-Length: 177
Vary: Accept-Encoding
Content-Type: text/html

<html><body><h1>It works!</h1>
<p>This is the default web page for this server.</p>
<p>The web server software is running but no content has been added, yet.</p>
</body></html>

Одно замечание: я сделал следующее при чистой установке apache:

  • Добавьте свой первый файл конфигурации в /etc/apache2/sites-available/vivek.com
  • (оставить /etc/apache2/sites-available/default нетронутым )
  • Пробег sudo a2ensite vivek.com
  • Пробег sudo /etc/init.d/apache reload

Я получаю те же сообщения, что и вы. Тем не менее, сервер не удалось запустить. При остановке сервера с использованием sudo /etc/init.d/apache2 stopи повторном запуске с использованием sudo /etc/init.d/apache2 startон вообще отказался запускаться. Просмотр журнала ошибок /var/log/apache2/error.logвыявил некоторые ошибки:

[Sat Jul 02 00:48:09 2011] [notice] Graceful restart requested, doing restart
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
[Sat Jul 02 00:48:09 2011] [warn] NameVirtualHost *:80 has no VirtualHosts
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs

Таким образом, порт 80, кажется, используется. Но если Apache еще не запущен, я могу подтвердить, что ничто не слушает порт 80 при запуске sudo netstat -tpln. Я рассмотрел конфигурацию и пришел к выводу , что линия Listen 80должна быть удалена из файла конфигурации /etc/apache2/sites-available/vivek.com. После этого я мог снова запустить сервер и с помощью curlподтверждения подтвердил, что сервер правильно отвечает на запросы.

ПОЦЕЛУЙ , твой второй vhost-блок избыточен, поскольку он покрыт /etc/apache2/sites-available/default. Следующий файл конфигурации /etc/apache2/sites-available/vivek.com:

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

    # Other directives here
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/vivek/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>
Lekensteyn
источник
1

Существует скрипт, который делает это простым для вас - https://github.com/RoverWire/virtualhost

Это в конечном итоге делает то же самое, что объясняется данными ответами, но делает это всего за одну команду, например. -

sudo virtualhost create mysite.local my_site

Это также позволяет вам удалить созданный вами хост

sudo virtualhost delete mysite.local my_site

Просто обратите внимание, что my_dir предполагает, что он начинается после / var / www

Так что если папка вашего сайта находится в / var / www / my_site

Вы должны запустить это (передать путь к каталогу без / var / www) -

sudo virtualhost create mysite.local my_site

Вы также можете изменить файл сценария и удалить путь по умолчанию "/ var / www", чтобы вы могли передать абсолютный путь к каталогу сайта

Нитиш Дхар
источник