Apache настройка virtualhost – Минимальный конфиг виртуального хоста Apache 2 для настройки работы домена в связке Apache + NGiNX

Содержание

Apache: примеры создания VirtualHost

Что такое VirtualHost можно почитать на Wiki.

Все примеры приведены в системе FreeBSD 8.2 и Apache 2.2, но подойдут для любой другой ОС (учтите только другие пути к файлам конфигурации).

В статье не будут рассмотрены вопросы создания и настройки доменов и субдоменов на DNS — это совсем другая тема. Если вы не используете свой собственный DNS и не знаете как настроить домен — проще всего воспользоваться этой>>> ссылкой или спросить совета у вашего регистратора доменного имени.

Для примеров используются следующие данные:

2 IP-адреса:

77.120.106.40
77.120.106.52

2 домена и 1 субдомен:

it-news.in.ua
website.co.ua
vhost1.website.co.ua

Для простоты, все пути к служебным каталогам остаются по-умолчанию, т.е. такими, какие они были после установки Apache:

ServerRoot «/usr/local»

DocumentRoot «/usr/local/www/apache22/data»

Если планируется создание только одного VirtualHost-а, то все записи можно производить прямо в файле /usr/local/etc/apache22/httpd.conf. Но правильнее будет все настройки виртуалов хранить в файле /usr/local/etc/apache22/httpd-vhosts.conf. Для этого, в конце файла /usr/local/etc/apache22/httpd.conf раскомментируйте строку:

#Virtual hosts
#Include etc/apache22/extra/httpd-vhosts.conf

Запуск нескольких name-based виртуалов на одном IP-адресе

#Укажем Apache слушать порт 80
Listen 80

#Слушать запросы к виртуалам на всех IP-адресах:
NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot www/apache22/data/website.co.ua
ServerName www.example.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot www/apache22/data/it-news.in.ua
ServerName www.example.org
</VirtualHost>

В этом примере website.co.ua находится первым в списке виртуалхостов, поэтому в случае, если к серверу придет запрос без определённого

ServerName, то будет показано содержимое website.co.ua.

Если вы хотите, то можно указать реальный IP-адрес сервера, в таком случае параметр VirtualHost должен совпадать с NameVirtualHost:

NameVirtualHost 77.120.106.40
<VirtualHost 77.120.106.40:80>

</VirtualHost>

Но, как правило, используется параметр *, обозначающий любой IP-адрес. Это полезно, например, если вы используете услугу типа No-Ip, позволяющую привязать динамический IP-адрес к домену.

Name-based хосты на сервере с несколькими IP-адресами

У сервера есть два IP-адреса: 77.120.106.40 и 77.120.106.52.  Запустим 1 «главный» сайт, и несколько «вторичных»:

Listen 80
# Это «главный» сайт, работающий на IP-адресе 77.120.106.40
ServerName website.co.ua
DocumentRoot www/apache22/data/website.co.ua

# А это «вторичные» сайты:
NameVirtualHost 172.20.30.50
<VirtualHost 77.120.106.52>
DocumentRoot www/apache22/data/vhost1.website.co.ua
ServerName vhost1.website.co.ua
</VirtualHost>

<VirtualHost 77.120.106.52>
DocumentRoot www/apache22/data/it-news.in.ua
ServerName it-news.in.ua
</VirtualHost>

Все запросы на адреса, отличные от 77.120.106.52 будут переданы «главному» сайту. Все запросы к 77.120.106.52 с неуказанным HostName будут переданы к website.co.ua.

Обслуживание одного виртуала по разным IP-адресам (например, локальной и внешней сети)

У сервера есть две сети с двумя разными адресами — 77.120.106.40 (внешняя сеть) и 192.168.0.1 (внутренняя сеть). Из мира адрес  website.co.ua направлен на 77.120.106.40, а изнутри имя server направлено на 192.168.0.1. По обоим запросам, как из внешней сети, так и из внутренней, сервер будет выдавать содержимое одного и того же виртуалхоста:

NameVirtualHost 192.168.0.1
NameVirtualHost 77.120.106.40

<VirtualHost 192.168.0.1 77.120.106.40>
DocumentRoot www/apache22/data/website.co.ua
ServerName website.co.ua
ServerAlias server
</VirtualHost>

Обслуживание разных сайтов на разных портах

Можно обрабатывать запросы к разным  и/или одинаковым доменам на разные порты, выдавая разное содержимое:

Listen 80
Listen 8080

NameVirtualHost 77.120.106.40:80
NameVirtualHost 77.120.106.40:8080

#по запросу website.co.ua и стандартному http-порту 80 выдаем
#содержимое каталога /usr/local/www/apache22/data/www/website.co.ua-80
<VirtualHost 77.120.106.40:80>
ServerName website.co.ua
DocumentRoot www/apache22/data/www/website.co.ua-80
</VirtualHost>

#по запросу website.co.ua и не-стандартному http-порту 8080 выдаем
#содержимое каталога /usr/local/www/apache22/data/www/website.co.ua-8080
<VirtualHost 77.120.106.40:8080>
ServerName website.co.ua

DocumentRoot www/apache22/data/www/website.co.ua-8080
</VirtualHost>

#то же самое, на том же сервере, но для домена it-news.in.ua
<VirtualHost 77.120.106.40:80>
ServerName it-news.in.ua
DocumentRoot www/apache22/data/www/it-news.in.ua-80
</VirtualHost>

<VirtualHost 77.120.106.40:8080>
ServerName it-news.in.ua
DocumentRoot www/apache22/data/www/it-news.in.ua-8080
</VirtualHost>

IP-based виртуалхосты

У сервера есть два IP-адреса и два домена: it-news.in.ua с адресом 77.120.106.40 и website.co.ua с адресом 77.120.106.52:

Listen 80

<VirtualHost 77.120.106.40>
DocumentRoot www/apache22/data/www/it-news.in.ua
ServerName it-news.in.ua
</VirtualHost>

<VirtualHost 77.120.106.52>
DocumentRoot www/apache22/data/www/website.co.ua
ServerName website.co.ua
</VirtualHost>

Смешанные port-based и ip-based виртуалхосты

Listen 77.120.106.40:80

Listen 77.120.106.40:8080
Listen 77.120.106.52:80
Listen 77.120.106.52:8080

<VirtualHost 77.120.106.40:80>
DocumentRoot www/apache22/data/www/website.co.ua-80
ServerName website.co.ua
</VirtualHost>

<VirtualHost 77.120.106.40:8080>
DocumentRoot www/apache22/data/www/website.co.ua-8080
ServerName website.co.ua
</VirtualHost>

<VirtualHost 77.120.106.52:80>
DocumentRoot www/apache22/data/www/it-news.in.ua-80
ServerName it-news.in.ua
</VirtualHost>

<VirtualHost 77.120.106.52:8080>
DocumentRoot www/apache22/data/www/it-news.in.ua-8080
ServerName it-news.in.ua
</VirtualHost>

В статье использовалась документация с официального сайта веб-сервера Apache.


Настройка виртуальных хостов Apache в Windows. Категория: Web-разработка • Разное

Виртуальные хосты могут быть привязаны к имени хоста (например, host.local) или к IP-адресу (например, 127.0.0.3

). Рассмотрим оба способа, и начнём с создания директорий виртуальных хостов. После установки Apache у меня уже есть директория DocumentRoot:

DocumentRoot d:/work/localhost/www
<Directory "d:/work/localhost*/www">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

Внутри директории d:/work создаем еще три: localhost1, localhost2, localhost3. Внутри каждой директории localhost* создаем еще одну директорию www. В каждую папку www добавляем файл index.html с любым содержанием, который позволил бы идентифицировать хост. Например

  • в файл D:\work\localhost1\www\index.html добавляем текст «localhost1»
  • в файл D:\work\localhost2\www\index.html добавляем текст «localhost2»
  • в файл D:\work\localhost3\www\index.html
    добавляем текст «localhost3»
[D:\]
    [work]
        [localhost]
            [www]
                index.html
            access.log
            error.log
        [localhost1]
            [www]
                index.html
            access.log
            error.log
        [localhost2]
            [www]
                index.html
            access.log
            error.log
        [localhost3]
            [www]
                index.html
            access.log
            error.log

В файле C:\wamp\apache\conf\httpd.conf надо найти и раскоментировать строку:

Include conf/extra/httpd-vhosts.conf

В файле C:\wamp\apache\conf\extra\httpd-vhosts.conf надо закомментировать (или удалить) те строки, которые приведены по умолчанию.

Виртуальные хосты на основе IP-адреса

Для виртуальных хостов, которые привязаны к IP, требуются несколько IP-адресов. Таковые у нас имеются: это 127.0.0.1

, 127.0.0.2, 127.0.0.3, 127.0.0.4, 127.0.0.5 и так далее. И к каждому из них можно привязать виртуальный хост.

Для этого добавляем в файл C:\Windows\System32\drivers\etc\hosts строки

127.0.0.1 localhost host.ru www.host.ru
127.0.0.2 localhost1 host1.ru www.host1.ru
127.0.0.3 localhost2 host2.ru www.host2.ru
127.0.0.4 localhost3 host3.ru www.host3.ru

А в файл C:\wamp\apache\conf\extra\httpd-vhosts.conf добавляем следующее

#
#   localhost
#
<VirtualHost 127.0.0.1:80>
    ServerAdmin admin@localhost
    ServerName localhost
    DocumentRoot d:/work/localhost/www
    ServerAlias host.ru www.host.ru
    ErrorLog d:/work/localhost/error.log
    CustomLog d:/work/localhost/access.log common
</VirtualHost>
#
#   localhost1
#
<VirtualHost 127.0.0.2:80>
    ServerAdmin admin@localhost1
    ServerName localhost1
    DocumentRoot d:/work/localhost1/www
    ServerAlias host1.ru www.host1.ru
    ErrorLog d:/work/localhost1/error.log
    CustomLog d:/work/localhost1/access.log common
</VirtualHost>
#
#   localhost2
#
<VirtualHost 127.0.0.3:80>
    ServerAdmin admin@localhost2
    ServerName localhost2
    DocumentRoot c:/work/localhost2/www
    ServerAlias host2.ru www.host2.ru
    ErrorLog d:/work/localhost2/error.log
    CustomLog d:/work/localhost2/access.log common
</VirtualHost>
#
#   localhost3
#
<VirtualHost 127.0.0.4:80>
    ServerAdmin admin@localhost3
    ServerName localhost3
    DocumentRoot d:/work/localhost3/www
    ServerAlias host3.ru www.host3.ru
    ErrorLog d:/work/localhost3/error.log
    CustomLog d:/work/localhost3/access.log common
</VirtualHost>

Теперь можно обращаться к виртуальным хостам так:

  • http://127.0.0.1, http://localhost/, http://host.ru/, http://www.host.ru/
  • http://127.0.0.2
    , http://localhost1/, http://host1.ru/, http://www.host1.ru/
  • http://127.0.0.3, http://localhost2/, http://host2.ru/, http://www.host2.ru/
  • http://127.0.0.4, http://localhost3/, http://host3.ru/, http://www.host3.ru/

Виртуальные хосты на основе имени хоста

Для этого добавляем в файл C:\Windows\System32\drivers\etc\hosts строки

127.0.0.1 localhost host.ru www.host.ru
127.0.0.1 localhost1 host1.ru www.host1.ru
127.0.0.1 localhost2 host2.ru www.host2.ru
127.0.0.1 localhost3 host3.ru www.host3.ru

А в файл C:\wamp\apache\conf\extra\httpd-vhosts.conf добавляем следующее

#
#   localhost
#
<VirtualHost *:80>
    ServerAdmin admin@localhost
    ServerName localhost
    DocumentRoot d:/work/localhost/www
    ServerAlias host.ru www.host.ru
    ErrorLog d:/work/localhost/error.log
    CustomLog d:/work/localhost/access.log common
</VirtualHost>
#
#   localhost1
#
<VirtualHost *:80>
    ServerAdmin admin@localhost1
    ServerName localhost1
    DocumentRoot d:/work/localhost1/www
    ServerAlias host1.ru www.host1.ru
    ErrorLog d:/work/localhost1/error.log
    CustomLog d:/work/localhost1/access.log common
</VirtualHost>
#
#   localhost2
#
<VirtualHost *:80>
    ServerAdmin admin@localhost2
    ServerName localhost2
    DocumentRoot c:/work/localhost2/www
    ServerAlias host2.ru www.host2.ru
    ErrorLog d:/work/localhost2/error.log
    CustomLog d:/work/localhost2/access.log common
</VirtualHost>
#
#   localhost3
#
<VirtualHost *:80>
    ServerAdmin admin@localhost3
    ServerName localhost3
    DocumentRoot d:/work/localhost3/www
    ServerAlias host3.ru www.host3.ru
    ErrorLog d:/work/localhost3/error.log
    CustomLog d:/work/localhost3/access.log common
</VirtualHost>

Теперь можно обращаться к виртуальным хостам так:

  • http://localhost/, http://host.ru/, http://www.host.ru/
  • http://localhost1/, http://host1.ru/, http://www.host1.ru/
  • http://localhost2/, http://host2.ru/, http://www.host2.ru/
  • http://localhost3/, http://host3.ru/, http://www.host3.ru/
Дополнительно

Поиск: Apache • Web-разработка • Windows • Установка • Настройка • Виртуальный хост • IP-адрес • VirtualHost

Настройка virtualhost в apache2 как сделать виртуальный хост

Для настройки виртуальных хостов на web сервере apache2 под ubuntu 7.10, 8.04, 8.10, 9.04, 9.10, Debian 5 необходимо в самое начало или конец (вне инструкций ) файла /etc/apache2/sites-available/default добавить директиву:

NameVirtualHost 192.168.0.1

Там необходимо указать IP адрес либо DNS имя компютера на котором размещён вебсервер, можно указать localhost или 127.0.0.1

Затем, учитывая организацию конфигов apache2 в Debian, необходимо создать файл виртуального хоста в директории: /etc/apache2/sites-available/
например ваш сайт называется supebreys.ru, значит логичнее создать чтото вроде /etc/apache2/sites-available/supebreys_ru.conf. В любом случае это название должно вам говорить для чего этот файл и будет лучше если вы будете придерживаться какого то одного правила создания таких файлов. Затем в этот файл добавляем такой текст:

<VirtualHost *:80>
        DocumentRoot "/home/httpd/breys.ru/www"
        ServerName    breys.xxx
        <Directory />
                allow from all
                Options +Indexes
       </Directory>
        ScriptAlias /cgi-bin/ "/home/httpd/breys.ru/cgi-bin/"
        CustomLog  /home/httpd/breys.ru/access.log common
        ErrorLog /home/httpd/breys.ru/error.log
</VirtualHost>

Здесь мы создали виртуальный хост которых будет обрабатывать запросы на 80 порту с любого доступного адреса

Также тут указана корневая директория сайта, директория с cgi скриптами и пути к файлам журналов работы вебсервера

Для корневой директори указаны дополнительные(необязательные) опции: разрешение доступа с любого адреса и включение модуля обработки индексного файла, в принципе эти опции не обязательны и нужны только если прихоится переопределять глобальные политики доступа и загрузки модулей вебсервером

После создания этого файла веб сервер ещё не видит его. Если внимательно посмотреть на файлы в директориях /etc/apache2/sites-enabled/ и /etc/apache2/sites-available/ то должно стать ясно, то что в директории /etc/apache2/sites-available лежат файлы описывающие виртуальные хосты, а в папке/etc/apache2/sites-enabled/ лежат симлинки на файлы в sites-available.  Исходя из названий становится ясно, что:
sites-available — все доступные виртуальных хосты
sites-enabled — включаемые вебсервером
то есть, чтобы добавить виртульный хост в apache2, необходимо либо создать файл нового виртуального хоста в sites-available либо дописать(не желательно) его в уже имеющийся там файл, а чтобы включить виртуальный хост, необходимо чтобы директории sites-enabled была ссылка на файл описывающий виртуальных хост

Это сделанно для того, чтобы разделить виртуальные домены на уровне хостинга. Например, хостер чтобы временно удалить какой то домен удаляет ссылку из папки sites-enabled и перезапускает вебсервер и так же быстро включает домен снова, без правки единого конфига, как это было реализованно ранее.

Итак, включаем наш, только что созданный, новых виртуальный хост:

ln -s /etc/apache2/sites-available/breys_ru.conf /etc/apache2/sites-enabled/breys_ru.conf

Этой командой мы создаём симлинк(символическую ссылку на один файл в другой директории) на рабочий файл виртуального хоста, который будет обработан при следующем перезапуске вебсервера

Возможно вам потребуется расширить поведение вашего виртуального хоста — может потребоваться чтобы он был доступен по нескольким адреса

Например, у меня имеются зеркала моих сайтов и я работаю с ними дома используя имена сайтов + моя домашняя зона .xxx, тоесть для сайта breys.ru у меня есть домашнее зеркало breys.xxx, но вполне вероятна ситуация когда нужно показать зеракло ещё кому то, тогда я могу использовать DNS зону зарегистрированную за мной на DYNDNS.COM, тоесть это зеркало имеет дополнительный адрес в виде:breys.ffsdmad.homelinux.org, ещё более частая ситуация когда нужно иметь имя www.breys.ru и соответственноwww.breys.ffsdmad.homelinux.org
Чтобы включить этого необходимо в файл виртального хоста, внутри инструкций .. добавить список необходимых алиасов:

<VirtualHost *:80>
....другие инструкции
 ServerName breys.xxx
 ....
 ServerAlias www.breys.xxx
 ServerAlias breys.ffsdmad.homelinux.org
 ServerAlias www.breys.ffsdmad.homelinux.org
 ....
</VirtualHost>

Вполне возможно придётся заниматься отладкой модуля mod_rewrite, для этого необходимо в файл виртуального хоста добавить строки:

<VirtualHost *:80>
....другие инструкции
RewriteLog /home/httpd/breys.ru/rewrite.log
RewriteLogLevel 9
</VirtualHost>

Начните с небольшого примера и постепенно расширяйте возможности своего виртуального хостинга различными возможностями вебсервера apache2 (а их у него предостаточно) и постепенно вы поймёте насколько проста и логична такая структура в условиях такого сложного сервиса как вебхостинг

Также следует заметить, что если вы поставили на локальную машину сервер apache2 и виртуальные хосты прописаны в /etc/hosts (соответствия имени ip адресу), то начинаются тормоза при обращении к вебсерверу. Дело в том, что браузер сначала пытается распознать ip адрсе у dns сервера, который у вас прописан в /etc/resov.conf, а не проверять файл /etc/hosts. Это можно исправить заменив в файле /etc/host.conf последовательность перебора сервисов разрешения имён, но лучше всего настроить bind и забыть про тормоза и проблемы с обратным разрешением имени по IP

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

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

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

 

Apache 2.4, не могу настроить name-based VirtualHost на localhost. Почему ошибка 400? — Хабр Q&A

Уважаемые знатоки — прошу помощи.
Есть комп под Windows 7. Нужен локальный сервер на нем. Раньше пользовался XAMPP, но он перестал меня устраивать.
Решил отдельно поставить Apache2.4+PHP+mySQL. Особых проблем не возникло.
Но уже второй день не могу настроить name-based VirtualHost. т.е. нужно что бы по адресам localhost, captcha_lite и при необходимости еще другим именам — открывались разные сайты. На XAMPP это работало.
Как я настраивал это на Apache:
В файле httpd.conf раскомментировал эти строки
LoadModule vhost_alias_module modules/mod_vhost_alias.so

Include conf/extra/httpd-vhosts.conf

в файле httpd-vhost.conf написал следующее

<VirtualHost *:80>
    DocumentRoot "D:/USR/www"
    ServerName localhost
	ServerAlias www.localhost
    ErrorLog "D:/USR/log/localhost/error.log"
    CustomLog "D:/USR/log/localhost/access.log" common
	ServerAdmin webmaster@localhost
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "D:/USR/www/captcha_lite"
    ServerName captcha_lite
	ServerAlias www.captcha_lite
    ErrorLog "D:/USR/log/captcha_lite/error.log"
    CustomLog "D:/USR/log/captcha_lite/access.log" common
	ServerAdmin webmaster@captcha_lite
</VirtualHost>

Естественно сделал соответствующие записи в hosts

Но ничего не работает!

При заходе на localhost открывается то что должно открываться, однако это происходит только потому, что в httpd-vhost.conf он указан первый и используется по умолчанию в любых ситуациях. Например, тоже самое открывается если зайти на s1.localhost (тоже прописан в hosts на тот же адрес).

Если же зайти на captcha_lite то выдает ошибку 400. А должна открываться страничка с одной строкой для теста.

Bad Request

Your browser sent a request that this server could not understand.

Additionally, a 400 Bad Request error was encountered while trying to use an ErrorDocument to handle the request.

Проблема заключается в следующем:
Как все должно работать, согласно описанию

With name-based virtual hosting, the server relies on the client to report the hostname as part of the HTTP headers. Using this technique, many different hosts can share the same IP address.

When a request arrives, the server will find the best (most specific) matching argument based on the IP address and port used by the request. If there is more than one virtual host containing this best-match address and port combination, Apache will further compare the ServerName and ServerAlias directives to the server name present in the request.

Браузер все делает правильно — в заголовках есть Host «captcha_lite» . А сервер в ответ присылает ошибку 400.
ПОЧЕМУ? Как будто я просто что то не так настроил, но что? Перерыл уже весь гугл. Помогите пожалуйста.
Самое интересное, что при добавлении в httpd-vhosts.conf такого:

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "D:/USR/www/s1.localhost"
    ServerName s1.localhost
    ErrorLog "D:/USR/log/s1.localhost/error.log"
    CustomLog "D:/USR/log/s1.localhost/access.log" common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "D:/USR/www/s2.localhost"
    ServerName s2.localhost
    ErrorLog "D:/USR/log/s2.localhost/error.log"
    CustomLog "D:/USR/log/s2.localhost/access.log" common
</VirtualHost>

по адресу s1.localhost открывается то что надо, а по s2.localhost — открывается то что должно открываться по адресу captcha_lite.
если оставить там только эти записи — все вообще работает как надо, но только для них.
Как заставить работать captcha_lite?

Ubuntu: настройка VirtualHost в Apache

Файлы сервера Apache хранятся в каталоге /etc/apache2, который включает в себя такие директории:

# ls -dl */
drwxr-xr-x 2 root root 4096 Фев 25 08:46 conf.d/
drwxr-xr-x 2 root root 4096 Фев 25 08:37 mods-available/
drwxr-xr-x 2 root root 4096 Фев 25 08:37 mods-enabled/
drwxr-xr-x 2 root root 4096 Фев 25 11:54 sites-available/
drwxr-xr-x 2 root root 4096 Фев 25 11:55 sites-enabled/

В этом же каталоге находится основной конфигурационный файл сервера — apache2.conf.

Настройки сайтов, которые обслуживает сервер, находятся в каталоге /etc/apache2/sites-available. А активные сайты — в каталоге /etc/apache2/sites-enabled, файлы в котором являются просто ссылками на каталог /etc/apache2/sites-available:

# pwd
/etc/apache2/sites-enabled

# ls -la
итого 8
drwxr-xr-x 2 root root 4096 Фев 25 11:55 .
drwxr-xr-x 7 root root 4096 Фев 25 08:37 ..
lrwxrwxrwx 1 root root   26 Фев 25 08:37 000-default -> ../sites-available/default
lrwxrwxrwx 1 root root   34 Фев 25 11:55 rtfm.co.ua.conf -> ../sites-available/rtfm.co.ua.conf

Для добавления нового VirtualHost — в каталоге /etc/apache2/sites-available создаём файл с именем sitename.conf, например — rtfm.co.ua.conf.

В него добавляем обычные параметры, как и на любой другой платформе:

# cat rtfm.co.ua.conf
<virtualhost *:80>
ServerName rtfm.co.ua
ServerAlias www.rtfm.co.ua
DocumentRoot /var/www/rtfm.co.ua
ErrorLog     /var/log/apache/rtfm.co.ua-error.log
CustomLog  /var/log/apache/rtfm.co.ua-access.log combined
</virtualhost>

Теперь выполним команду:

# a2ensite /etc/apache2/sites-available/rtfm.co.ua.conf

Которая создаст символическую ссылку в каталоге /etc/apache2/sites-enabled.

Если при выполнении a2ensite вы получаете ошибку вида:

# a2ensite /etc/apache2/sites-available/rtfm.co.ua.conf
ERROR: No site found matching /etc/apache2/sites-available/rtfm.co.ua.conf!

Или такую:

# a2ensite rtfm.co.ua.conf
ERROR: Site rtfm.co.ua does not exist!

Укажите путь к файлу конфигурации без указания полного пути:

# pwd
/etc/apache2/sites-available

# a2ensite rtfm.co.ua.conf
Enabling site rtfm.co.ua.conf.
Run ‘/etc/init.d/apache2 reload’ to activate new configuration!

Перезапускаем Apache:

# service apache2 restart

Сайт готов к работе.

Подробнее о конфигурировании VirtualHost-ов можно почитать в статье  Apache: примеры создания VirtualHost.


Apache HTTP Server | Русскоязычная документация по Ubuntu

Apache HTTP Server — проект, развиваемый The Apache Software Foundation, в рамках которого разрабатывается кроссплатформенный HTTP сервер с открытым исходным кодом. Входит в состав LAMP и XAMPP.

Версии Apache в Ubuntu

Ubuntu Apache
12.04 LTS (Precise) 2.2
14.04 LTS (Trusty) 2.4
15.10 (Wily) 2.4
16.04 LTS (Xenial) 2.4

Хостинг сайтов

Можно реализовать четырьмя способами:

  1. по умолчанию в папке /var/www/html. Доступом является http://localhost/

  2. настройки основного хостинга. Например, http://localhost/phpmyadmin

  3. в любой папке с помощью модуля виртуальных хостов. Например, http://mysite/

  4. в папке пользователя public_html (модуль userdir). Например, http://localhost/~username

Установка

Для установки Apache выполните в терминале:

sudo apt-get install apache2

Настройка

Для применения изменений в настройках необходимо перезапустить демон Apache:
sudo service apache2 restart

В Ubuntu конечный файл настройки (apache2.conf) расделён на несколько файлов, расположенных в разных поддиректориях. Подробней написано в комментариях файла apache2.conf.

       /etc/apache2/
       |-- apache2.conf
       |       `--  ports.conf
       |-- mods-enabled
       |       |-- *.load
       |       `-- *.conf
       |-- conf-enabled
       |       `-- *.conf
       `-- sites-enabled
               `-- *.conf

Настройки модулей расположены в директории /etc/apache2/mods-available. Для подключения или отключения модулей (настроек модулей) следует использовать соответствующие команды a2enmod или a2dismod. Пример подключения модуля:

sudo a2enmod <mod-name>

Свои настройки следует сохранять в файлы, расположенные в директории /etc/apache2/conf-available. Для подключения или отключения своих настроек следует использовать соответствующие команды a2enconf или a2disconf. Пример подключения файла со своими настройками:

sudo a2enconf <config-name>

Настройки виртуальных хостов следует сохранять в файлы, расположенные в директории /etc/apache2/sites-available. Для подключения виртуальных хостов следует использовать соответствующие команды a2ensite или a2dissite. Пример подключения виртуального хоста:

sudo a2ensite <site-name>

Кодировка по умолчанию

Для указания кодировки по умолчанию следует использовать директиву AddDefaultCharset в файле /etc/apache2/conf-available/charset.conf (или раскомментировать соответствующую строку):

AddDefaultCharset UTF-8

Виртуальные хосты

Файлы настроек виртуальных хостов хранятся в /etc/apache2/sites-available/*.conf. По умолчанию в Apache уже настроен один виртуальный хост. Его настройки лежат в файле 000-default.conf. Вы можете использовать этот виртуальный хост в качестве примера.

Пример настройки виртуального хоста:

<VirtualHost *:80>
    #Имя хоста
    ServerName host1.server1
    #Корневая папка хоста
    DocumentRoot /var/www/host1.server1
    <Directory /var/www/host1.server1>
        #Разрешение на перезапись всех директив при помощи .htaccess
        AllowOverride All
    </Directory>
</VirtualHost>

Назовите файл настройки именем вашего хоста host1.server1.conf и сохраните.

После создания файла настроек допишите в /etc/hosts имя вашего хоста:

127.0.0.1    host1.server1

Для включения созданного виртуального хоста используется утилита a2ensite:

sudo a2ensite host1.server1

Отключается хост аналогично утилитой a2dissite:

sudo a2dissite host1.server1

Модули

mod_userdir

Модуль mod_userdir позволяет использовать директории, находящиеся в домашних директориях пользователей для хранения веб страниц. По умолчанию Apache ищет запрашиваемые страницы в директории ~/public_html

mkdir ~/public_html

Чтобы включить mod_userdir, выполните:

sudo a2enmod userdir

и добавьте необходимого пользователя в группу www-data:

sudo adduser $USER www-data

после чего перезагрузите Apache:

sudo service apache2 restart

Страницы будут доступны по адресу http://localhost/~username, где username — имя пользователя.

Настройка public_html подробно.

CGI

Если Вы хотите запускать на сервере cgi-скрипты, подключите модуль cgi командой

sudo a2enmod cgi

По умолчанию cgi-скрипты размещаются в директории /usr/lib/cgi-bin, но вы можете разместить их где угодно, указав это в настройках своего виртуального хоста, либо глобально для всех хостов в файле /etc/apache2/conf-enabled/serve-cgi-bin.conf.

Eсли ваш сервер работает во внешней сети, то в целях безопасности настоятельно рекомендуется размещать cgi-скрипты вне корневой директории виртуального хоста

Настройка HTTPS в Apache

Веб-сервер Apache полностью поддерживает работу по HTTPS. Чтобы активировать поддержку HTTPS на уже установленном Apache, необходимо выполнить следующее.

Создание ключа и ssl-сертификата

Использование самоподписанных сертификатов хоть и защищает от пассивного прослушивания, тем не менее не гарантирует клиентам, что сервер является именно тем сервером, который им нужен. Преимуществом самоподписанных сертификатов является их бесплатность. Сертификат, подписанный компанией-сертификатором (Certificate authority), стоит денег.

Для создания ключа и сертификата вводим команду:

openssl req -new -x509 -days 30 -keyout server.key -out server.pem

На вопрос «Enter PEM pass phrase:» отвечаем паролем, подтверждаем и запоминаем.

На все последующие вопросы отвечаем произвольно, можно просто щелкать по Enter, соглашаясь с предложенными вариантами, только на вопрос «Common Name (eg, YOUR name) []:» отвечаем именем сайта, для которого создаем сертификат, например www.example.com.

После ответа на все вопросы в директории должны появиться два новых файла — server.pem (ключ) и server.crt (сертификат).

Чтобы использовать сгенерированный ключ, нужно знать пароль, введённый нами, и Apache будет спрашивать его у нас при загрузке, а к чему нам лишние вопросы от демонов? 🙂 Поэтому снимаем пароль с ключа:

cp server.key{,.orig}
openssl rsa -in server.key.orig -out server.key
rm server.key.orig

Скопируем их в /etc/ssl и назначим файлу ключа права чтения только администратору:

sudo cp server.pem /etc/ssl/certs/
sudo cp server.key /etc/ssl/private/
sudo chmod 0600 /etc/ssl/private/server.key

Настройка Apache

Для начала необходимо активировать mod_ssl:

sudo a2enmod ssl

А затем включить настройки HTTPS сайта по умолчанию:

sudo a2ensite default-ssl

Теперь необходимо отредактировать файл с настройками HTTPS сайта по умолчанию, указав в нём пути к вашим сертификатам. Сам файл называется /etc/apache2/sites-enabled/default-ssl (или /etc/apache2/sites-enabled/default-ssl.conf).

В этом файле рекомендуется после директивы

SSLEngine on

добавить строчку

SSLProtocol all -SSLv2

чтобы запретить использование устаревшего протокола SSLv2.

Дальше вам необходимо отредактировать параметры, ответственные за сертификаты.

# Публичный сертификат сервера
SSLCertificateFile    /etc/ssl/certs/server.pem
# Приватный ключ сервера
SSLCertificateKeyFile /etc/ssl/private/server.key

Теперь просто перезагрузите Apache:

sudo service apache2 restart

И если все параметры указаны верно, ваши сайты станут доступны по HTTPS.

Протокол HTTPS работает по 443 порту, поэтому если сервер находится за шлюзом, то необходимо на нём пробросить данный порт.

Перенаправление HTTP запросов на HTTPS

Если вы хотите запретить использование HTTP, то самым разумным будет перенаправлять все HTTP запросы к страницам на их HTTPS адрес. Сделаем это с помощью mod_alias. Если он не включён — включаем:

sudo a2enmod alias
sudo service apache2 restart

Затем изменяем файл /etc/apache2/sites-enabled/000-default, отвечающий за виртуальный хост по умолчанию для HTTP запросов. В этот файл добавляем директиву

Redirect / https://example.com/

При этом все настройки директорий можно удалить, поскольку по HTTP на ваши сайты всё равно будет не попасть.

Всё, теперь ещё раз перезапустите Apache и убедитесь, что при заходе по HTTP вы автоматически перенаправляетесь на HTTPS-страницу.

Ссылки

Возможные проблемы

Если при запуске появляется ошибка

apache2: Could not determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

добавьте в свой файл конфигурации строку

ServerName localhost

Смотрите также

Ссылки

Минимальный конфиг виртуального хоста Apache 2 для настройки работы домена в связке Apache + NGiNX

Минимальный конфиг виртуального хоста Apache 2 для настройки работы домена в связке Apache + NGiNX

В предыдущей статье был рассмотрен минимальный конфиг виртуального хоста веб-сервера NGiNX, работающей в качестве прокси-сервера для другого веб-сервера — Apache. Надо понимать, что всё это рассматривается на платформе сервера, работающего на Debian 9, но приведённые настройки должны работать на на других операционных системах. В этой статье рассмотрим минимальный файл конфигурации виртуального хоста веб-сервера Apache, в связке с рассмотренным конфигом NGiNX, данное решение позволяет поднимать большое количество сайтов (доменов) на одном рабочем сервере.

Пример минимального конфигурационного файла виртуального хоста Apache для настройки работы домена в связке Apache + NGiNX

Как обычно, сразу приведу готовое решение, потом объясню, что есть что.

Про конфигурацию и предварительную настройку Апача можно почитать пошаговую инструкцию по → этой ссылке. Это сразу позволит понять и разобраться с тем, какие настройки в систему вносятся, а также, откуда что берётся. Итак, собственно минимальный конфиг виртуального хоста веб-сервера Apache:

<VirtualHost 127.0.0.1:8080>
	ServerName amorale.club
	ServerAdmin Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
	ServerAlias www.amorale.club
	DocumentRoot /var/www/amorale/data/www/amorale.club
	CustomLog /var/www/amorale/data/www/logs/amorale.club.access-apache.log combined
	ErrorLog  /var/www/amorale/data/www/logs/amorale.club-apache.error.log
	AssignUserID amorale amorale
	AddDefaultCharset UTF-8
	DirectoryIndex index.php index.html index.htm
	<Directory /var/www/amorale/data/www/amorale.club>
		Options +ExecCGI
	</Directory>
</VirtualHost>

Как видно (или заранее известно), настройки виртуального хоста у Апача находятся внутри контейнера VirtualHost. А теперь обо всём по порядку, согласно приведённому листингу.

IP и порт виртуального хоста Apache

В открывающем теге контейнера VirtualHost прописывается IP и порт виртуального хоста. IP обычно выставляется тот, что соответствует localhost, а вот порт в связке Apache + NGiNX в случае, когда Apache стоит за проксирующим NGiNX, должен быть не стандартным 80, а тем, который прописан в системе. В нашем случае, второй порт по договорённости для http — 8080. Так сложилось исторически. =)

В итоге получим первую строчку нашего конфига: <VirtualHost 127.0.0.1:8080>

Доменное имя виртуального хоста

Директива ServerName служит для привязки доменного имени к виртуальному хосту. После пробела за ней нужно указать домен, который должен отвечать. Конечно, домен должен быть привязан записями DNS к данному серверу.

Контактные данные администратора виртуального хоста

Для того, чтобы было куда жаловаться, нужно после директивы ServerAdmin указать email администратора хоста.

Дополнительные домены виртуального хоста

Снова, так сложилось исторически (и это так засело в головах, что люди до сих пор пользуются), можно задать другие доменные имена, на которые будет отзываться виртуальный хост. После директивы ServerAlias через пробелы нужно указать эти доменные имена. www (куда уж без него) и другие, если нужно.

Домашняя папка с файлами сайта

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

Файлы логов доступа и ошибок виртуального хоста

Следующие две директивы CustomLog и ErrorLog задают пути до файлов логов доступа и ошибок работы виртуального хоста соответственно.

Лирическое отступление
Веб-серверы Apache и NGiNX разрабатываются разными командами людей, поэтому логи этих серверов находятся в разных местах на сервере. Что, на мой взгляд, очень неудобно. Поэтому тут можно прописать ту же папку, что и в конфиге NGiNX для этих логов. Просто пометить, какому веб-серверу, какой лог соответствует. И тогда, всё будет в одном месте, и в случае необходимости, доступно в пределах одной папки (и даже упорядочено по алфавиту и следовать одно под другим в списке файлов). Удобно жешь! =D

Указание группы и пользователя для запуска процесса Apache

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

Это позволяет свести ущерб взлома одного сайта и усложнить взлом других. Для работы директивы AssignUserID требуется установить модуль mpm-itk к серверу Apache, но это делается предельно просто. Прочитать, о том как, можно по → этой ссылке.

Задание кодировки символов документов виртуального хоста

С кириллицей вообще, ещё тот головняк, но с введением кодировки UTF-8, жизнь стала проще. Директива AddDefaultCharset задаёт кодировку символов в текстовых документах сервера. Для того, чтобы браузер не выдавал кракозябдиков, нужно следить за тем, чтобы все документы сервера на русском языке (кириллистические символы) были в одной кодировке, совпадающей с кодировкой по умолчанию, установленной на сервере. Если с кодировкой что-то не так, и в браузере кракозяблики, — разбирайтесь, где косяк: на сервере установлена другая кодировка, документ стырен под другой кодировкой или база данных отдаёт данные в третьей кодировке. Есть ещё html мета-тег, который тоже может задавать кодировку документа для вывода в браузере. В общем, чтобы не было головной боли, нужно выбрать кодировку раз и на всю оставшуюся жизнь сохранять ей верность в любых ситуациях. Тогда всё будет хорошо и наступит счатье. =)

Задание индексных файлов для папок на сервере

Директива DirectoryIndex задаёт индексные файлы для папок на сервере. Если в запросе к серверу указана всего лишь папка, но в ней расположен один из указанных файлов, то именно он и будет открыт. Последовательность расположения индексных файлов в директиве DirectoryIndex имеет принципиальное значение. В нашем примере, если в папке есть все три файла, то откроется первый, который указан (то есть index.php).  Если его нет, то сервер отдаст index.html. Если и его нет в папке, то следующий по списку. Если список кончился, а индексный файл так и не найден, сработает следующая директива:

Задание свойств папок на сервере

Эти свойства можно перепрописать в файле .htaccess, но если его нет или свойства не перепрописаны, то применятся те, что заданы в контейнере Directory.

Сейчас подробно не буду останавливаться на этом (может быть напишу отдельную статью о том, как использовать данную конструкцию для правильной (безопасной и удобной) настройки папок сайта на сервере.

Резюме

Собственно всё. После этого надо не забыть закрыть контейнер виртуального хоста: </VirtualHost>.

Надо понимать, что это минимальный джентльменский набор настроек, но он позволяет поднять виртуальные хосты Apache 2 для настройки работы домена в связке Apache + NGiNX. Ну и доменное имя нужно конечно использовать своё, а не моё amorale.club. Пути к папкам и файлам должны существовать. Иначе рискуете нарваться на ошибку рестарта Апача.

Конфиги виртуальных хастов обычно лежат в папке /etc/apache2/sites-available на сервере.

Для того, чтобы поднять виртуальный хост (запустить его в работу) нужно выполнить команду

# a2ensite ваш_домен.ru

Это активирует виртуальный хост, если в конфиге нет критических ошибок. То есть создаёт символьную ссылку в папке /etc/apache2/sites-enabled на этот файл конфига.

Не уверен, что это необходимо, но я ещё и перезапускаю Апач командой:

# service apache2 reload

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

Заберите ссылку на статью к себе, чтобы потом легко её найти 😉

Выберите, то, чем пользуетесь чаще всего:

Спасибо за внимание, оставайтесь на связи! Ниже ссылка на форум и обсуждение ; )

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *