Два apache на одном сервере windows

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

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

К примеру, если вы хотите чтобы на одном компьютере можно было запустить несколько сайтов, то смотрите статьи:

  • Несколько сайтов на Apache
  • Виртуальные хосты Apache

Если вы хотите, чтобы веб-сервер работал сразу на нескольких портах, то смотрите статьи:

  • Как запустить Apache на Windows (раздел описывающий директиву Listen)
  • Как запустить Apache не на 80 порту

Если вы хотите, чтобы веб-сервер одновременно работал и с обычными и безопасными соединениями HTTPS (используя сертификат SSL), то изучите:

  • Apache SSL: переход Apache на HTTPS

Тем не менее, если вы твёрдо знаете, что вам нужен именно второй процесс Apache, то вы можете использовать опцию -f, после которой нужно указать альтернативный конфигурационный файл сервера. Если Apache уже запущен, то вам, как минимум, во втором конфигурационном файле нужно указать другой порт, поскольку в противном случае веб-сервер не запустится из-за ошибки: порт уже занят другой программой.

К примеру, я хочу запустить второй экземпляр Apache, исполнимый файл которого расположен по пути c:ServerbinApache24binhttpd.exe при этом я хочу использовать конфигурационный файл c:ServerbinApache24conftest_httpd.conf и я хочу выполнять запуск в режиме отладки (без отсоединения процесса от консоли) (-X):

c:ServerbinApache24binhttpd.exe -f c:ServerbinApache24conftest_httpd.conf -X

В дополнении к опциям -f и -X также при запуске второго экземпляра программы могут пригодиться опции:

  -D имя            : задать имя для использования в директивах <IfDefine name>
  -d директория     : указать альтернативный начальный ServerRoot
  -f файл           : указать альтернативный конфигурационный файл сервера
  -C "директива"    : обработать директиву перед чтением конфигурационных файлов
  -c "директива"    : обработать директиву после чтения конфигурационного файла
  -e уровень        : показать ошибки запуска указанного уровня (смотрите LogLevel)
  -E файл           : записать ошибки запуска в файл
  -L                : список доступных конфигурационных директив
  -T                : запуск без проверок DocumentRoot
  -X                : режим отладки (только один воркер, не отсоединять от командной строки)

Информацию про LogLevel вы найдёте в статье Apache log (логи): как настроить и анализировать журналы веб-сервера.

Связанные статьи:

  • Как узнать путь до конфигурационного файла Apache (100%)
  • Как проверить конфигурационный файл Apache (100%)
  • Настройка веб-сервера Apache для запуска программ Perl на Windows (100%)
  • Настройка веб-сервера Apache для запуска программ Ruby на Windows (100%)
  • Виртуальный хост Apache по умолчанию. _default_ и catch-all в Apache (100%)
  • Как сбросить пароль root MySQL или MariaDB в Windows (RANDOM — 50%)

Содержание

  • 1 Дано
  • 2 Задача
  • 3 Решение
    • 3.1 Создаём два сайта (виртуальные хосты)
    • 3.2 Создаём ссылки с нескольких DNS адресов на один сайт
    • 3.3 Ограничиваем доступ к сайтам
      • 3.3.1 файл .htaccess
        • 3.3.1.1 Пример
      • 3.3.2 директива <Directory>
        • 3.3.2.1 Пример
      • 3.3.3 Итог
    • 3.4 Последние штрихи
  • 4 Приложение
    • 4.1 Особенности директив Listen и NameVirtualHost
    • 4.2 См. также

Эта инструкция основана на статье «Многоликий Apache» из журнала «Системный администратор» №12, 2005г. (http://samag.ru)

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

Веб-сервер Apache, популярный благодаря своей прозрачности для программистов и администраторов и не в последнюю очередь благодаря бесплатности, реализован под все более-менее популярные операционные системы. Его настройки для всех ОС одинаковы, различаются только пути, где хранятся конфигурационные файлы. На одном сервере может быть запущено несколько экземпляров Apache, прослушивающих разные адреса и/или порты. Один экземпляр может обслуживать несколько сайтов (подробнее об этом ниже). Проект настолько популярен, что постоянно обрастает новой функциональностью. О степени популярности можно судить либо по статистике, что, на мой взгляд, довольно опрометчиво, либо по конкретным фактам. Фактов популярности Apache мы приведём два. Во-первых, его наличие в качестве веб-сервера по умолчанию в большинстве UNIX-подобных операционных систем. Во-вторых, такой гигант в области ИТ как компания Oracle приняла его в состав своего продукта Oracle Application Server 10g, где он играет одну из ключевых ролей.

Дано

  1. Компьютер с установленным пакетом Apache 1.3 или 2.0
  2. Адрес сервера в интернете: 10.0.10.15 и имя: teo.mynetwork.ru
  3. Адрес сервера в локальной сети: 192.168.100.18
  4. Несколько сайтов.
  5. Несколько имён для одного сайта

Задача

  1. Разместить все сайты на одном сервере
  2. Сделать доступ к каждому сайту по отдельному URL
  3. Ограничить доступ к некоторым сайтам
  4. Сделать перенаправление нескольких имён на один сайт

Решение

Создаём два сайта (виртуальные хосты)

Предположим, что у нас два различных сайта teo.mynetwork.ru и logos.mynetwork.ru. Эти имена должны быть доступны, т.е. держатель зоны mynetwork.ru должен прописать в ней узлы teo и logos

— Для каждого сайта создаём каталог в корневом каталоге документов Apache (teo и logos, соответственно). Для некоторых Linux по умолчанию /var/www/html, но чтобы убедиться, где он расположен на нашем сервере, смотрим значение директивы DocumentRoot в /etc/httpd/conf/httpd.conf. Итак, создаём:

# mkdir /var/www/html/teo /var/www/html/logos

— Мы будем разделять журналы для каждого сайта, поэтому создадим соответствующие каталоги:

# mkdir /var/log/httpd/teo /var/log/httpd/logos

— Если у нас уже был создан сайт, то всё его содержимое переносим в созданный для него каталог, т.е. из /var/www/html в /var/www/html/teo. Новый сайт logos.mynetwork.ru размещаем в /var/www/html/logos.
Теперь настраиваем Apache. Добавляем в конец файла /etc/httpd/conf/httpd.conf (некоторые ОС создают для каждого виртуального хоста отдельный конфигурационный файл, тог):

NameVirtualHost 10.0.10.15
<VirtualHost teo.mynetwork.ru>
DocumentRoot /var/www/html/teo
ServerName teo.mynetwork.ru
ErrorLog /var/log/httpd/teo/error_log
CustomLog /var/log/httpd/teo/access_log combined
</VirtualHost>

<VirtualHost logos.mynetwork.ru>
DocumentRoot /var/www/html/logos
ServerName logos.mynetwork.ru
ErrorLog /var/log/httpd/logos/error_log
CustomLog /var/log/httpd/logos/access_log combined
</VirtualHost>

Все настройки не заданные для сайта явным образом в директиве VirtualHost, наследуются от глобальных настроек Apache, указанных выше в этом же файле.

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

# /etc/init.d/httpd restart

— Теперь, обращаясь по DNS именам, мы будем получать разные сайты. Если обратиться по IP адресу, то получим сайт teo.mynetwork.ru, т.к. он подключен первым.

Создаём ссылки с нескольких DNS адресов на один сайт

Это можно осуществить двумя способами: созданием синонимов, или перенаправлением всех обращений с другого сайта.

1) Синонимы задаются директивой ServerAlias, могут содержать маску, и разделяются пробелом. Вот несколько примеров создания синонимов:

ServerAlias www.teo.mynetwork.ru
ServerAlias *.teo.mynetwork.ru
ServerAlias www.teo.mynetwork.ru god.mynetwork.ru pantheon.ru

Синоним — это DNS-имя. Имена могут быть абсолютно любыми, в том числе и из разных доменов, но все они должны разрешаться в IP-адреса, то есть их предварительно нужно зарегистрировать в DNS.

2) Перенаправление задаётся директивой Redirect. Создаём новый пустой сайт pantheon.ru. Как и для предыдущих сайтов, это делается в три шага: создание каталога для документов, для журналов и добавление конфигурации в httpd.conf:

<VirtualHost pantheon.ru>
    DocumentRoot /var/www/html/pantheon
    ServerName pantheon.ru
    ErrorLog /var/log/httpd/pantheon/error_log
    CustomLog /var/log/httpd/pantheon/access_log combined
    Redirect / http://teo.mynetwork.ru
</VirtualHost>

Можно перенаправлять не со всего сайта, а только с определённого каталога или даже документа:

Redirect /samag http://samag.ru
Redirect /ftp/ ftp://citkit.ru/pub/
Redirect /find/ya.htm http://yandex.ru

При этом Apache воспринимает первый параметр директивы Redirect не как URL, а как набор символов, при совпадении с которым происходит перенаправление. Отсюда следует, что он НЕ проверяет наличие указанных каталогов и файлов, а ссылки /samag и /samag/ НЕ считает одинаковыми.

Перенаправление с помощью файла .htaccess выглядит так:

RewriteEngine On
RewriteRule ^wiki/(.*)$ http://new.site.ru/wiki/$1 [R=permanent,L]
RewriteRule ^(.*)$ http://new.site.ru/ [R=permanent,L]
  • 1-я строка: включаем возможность менять URL
  • 2-я строка: перенаправляем запрос к странице http://old.site.ru/wiki/Что-то на другой сайт, передавая параметры ($1)
  • 3-я строка: любые другие запросы к старому сайту перенаправляем на новый.

Полезная ссылка:

  • http://www.portlet.ru/articles/webtips/redirect.html

Ограничиваем доступ к сайтам

Теперь, если пользователь обратится к нам по IP-адресу, либо по имени, на которые наш сервер откликается (см. Приложение), то Apache сначала определяет, не удовлетворяет ли запрос описанным директивами VirtualHost сайтам и если не находит ни один из них, то выдаёт сайт по умолчанию, который находится в каталоге, заданном глобальной директивой DocumentRoot, т.е. уровнем выше остальных. Таким образом, получается, что пользователь может попасть на любой из виртуальных сайтов не тем путём, какой мы для него приготовили, т.е. http://logos.mynetwork.ru/. Например, набрав в адресной строке браузера «http://192.168.100.18/logos/», он получит сайт logos.mynetwork.ru. Правда в этом случае документы, использующие ссылки на ресурсы этого же сайта, будут некорректно отображаться, потому что ссылки делаются относительно корня сайта и, если это была ссылка /img/picture.jpg, то во втором случае этот же файл уже нужно искать по ссылке /logos/img/picture.jpg, этого же браузер не знает. Таким образом, здесь все зависит от того, догадывается ли пользователь, в каких каталогах мы храним наши сайты. В принципе, в этом нет ничего плохого, ведь мы в любом случае выложили сайты, чтобы их посещали (правила по ограничению доступа к ресурсу всё равно будут действовать, о них мы поговорим чуть позже), но как-то это выглядит не красиво (для того и двери, чтоб в окна не лазить). Чтобы устранить эту некрасивость можно поместить сайт по умолчанию на тот же уровень, что и остальные сайты, т.е. создать каталог /var/www/html/default и указать его в двух директивах глобальных настроек (т.е. до описания виртуальных сайтов)

DocumentRoot "/var/www/html/default"
...
# This should be changed to whatever you set DocumentRoot to.
<Directory "/var/www/html/default">

Теперь перейдём непосредственно к раздаче прав доступа. Существует два способа указания прав доступа к каталогу веб-сайта средствами Apache:

1) поместить в каталог файл .htaccess,

2) использовать директиву <Directory> в файле конфигурации.

В обоих случаях правила распространяются и на вложенные каталоги. Мы рассмотрим оба способа и изменим права доступа к двум каталогам сайта logos.

файл .htaccess

Какие параметры можно переписать в файлах .htaccess определяется директивой AllowOverride. Для разрешения переопределения всех деректив нужно добавить в конфигурацию сайта строку:

AllowOverride All

Перечислим преимущества использования файла .htaccess:

  1. при его изменении не нужно перезапускать Apache;
  2. при одинаковом уровне доступа к разным ресурсам можно пользоваться ссылками на один файл .htaccess;
  3. можно предоставить пользователю право редактирования этого файла, что удобно, если у нас сервер с множеством клиентских сайтов.

Есть и недостатки:

  1. для того, чтобы ответить на вопрос: «какие ограничения доступа существуют на сайте?» — администратору необходимо помнить, в каких каталогах лежат эти файлы и ссылки;
  2. если сайт будет переноситься на другой сервер, и, что очень вероятно, будет размещён в другом каталоге, то для корректировки ссылок уйдёт много времени;
  3. повышается нагрузка сервера, т.к. при каждом запросе на ресурс он обращается к .htaccess в этом каталоге и всех верхних по иерархии, наследуя их настройки т.е. запрос на ресурс http://teo.mynetwork.ru/olimp/staff/zeus.htm инициирует проверку .htaccess файлов в каталогах
  • ./
  • ./olimp/
  • ./olimp/staff/

Пример

Предоставим права с помощью файлов .htaccess, нужно создать соответственно файл /var/www/html/logos/info1/.htaccess:

Options +Indexes
Order deny,allow
Deny from all
Allow from 192.168.100.11
Allow from 192.168.100.17

и файл /var/www/html/logos/info2/.htaccess:

AuthType Basic
AuthName "Boss"
AuthUserFile "/var/www/main_users"
Require valid-user

директива <Directory>

Определяя настройки доступа к каталогам сайта с помощью директивы <Directory> в одном конфигурационном файле всего сайта, мы получим следующие преимущества:

  1. можно быть уверенным, что ничего не пропустим, если вдруг нужно изменить уровень доступа к какому-нибудь ресурсу;
  2. повышаем скорость реакции сервера на запросы, т.к. все настройки загружаются при старте Apache.

Ну а мириться придётся с тем, что для каждого каталога необходимо описывать права отдельно (помним, что для подкаталогов права наследуются), даже если они одинаковые. Правда, есть поддержка масок, например:

<Directory ~ "^/www/.*/[0-9]{3}">

будет соответствовать именам каталогов в /www/ состоящим из трёх цифр, но это не всегда может облегчить ситуацию.

Пример

Описываем те же права в главном конфигурационном файле Apache httpd.conf или в файле настройки виртуального хоста:

<VirtualHost logos.mynetwork.ru>
  DocumentRoot /var/www/html/logos
  ServerName logos.mynetwork.ru
  ErrorLog /var/log/httpd/logos/error_log
  CustomLog /var/log/httpd/logos/access_log combined
  <Directory /var/www/html/logos/info1>
    Options +Indexes
    Order deny,allow
    Deny from all
    Allow from 192.168.100.11
    Allow from 192.168.100.17
  </Directory>
  <Directory /var/www/html/logos/info2>
    AuthType Basic
    AuthName "Boss"
    AuthUserFile "/var/www/main_users"
    Require valid-user
  </Directory>
</VirtualHost>

Итог

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

Доступ к ресурсу http://logos.mynetwork.ru/info1/ смогут получить только два пользователя из локальной сети с указанными IP адресами (хотя такие ресурсы лучше хранить на внутренних веб-серверах), ещё мы дали разрешение Apache, в случае отсутствия в каталоге начальной страницы, генерировать html документ с содержимым каталога.

Для доступа к ресурсу http://logos.mynetwork.ru/info2/ будут запрошены имя пользователя и пароль, которые будут сверены с данными в файле /var/www/main_users. Создадим этот файл:

# touch /var/www/main_users
# chown root.webmaster /var/www/main_users

Добавим в него пользователя chef:

# /usr/bin/htpasswd2 /var/www/main_users chef

В некоторых дистрибутивах команда может называться без цифры, т.е. htpasswd, находится она в пакете с утилитами Apache, в Debian это apache2-utils

Остальных пользователей добавляем аналогичным способом. Такие файлы создаём для каждой группы пользователей с одинаковыми правами доступа к ресурсу. Одни и те же группы можно использовать во всех сайтах.

Для удаления пользователя chef из списка, используем комманду:

# /usr/bin/htpasswd2 -D /var/www/main_users chef

— Если возникли проблемы, то смотрим в логах /var/log/apache2/error_log. Можно их сделать более детальными указав в /etc/httpd/conf/httpd.conf или в конфигурации определённого виртуального хоста:

LogLevel debug

Последние штрихи

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

Include /etc/httpd/conf/vhosts/teo.conf
Include /etc/httpd/conf/vhosts/logos.conf
Include /etc/httpd/conf/vhosts/pantheon.conf

Кроме изящности мы получаем удобство в быстром подключении и отключении сайта, путём добавления/снятия символа комментария “#” в начале строки. Это особенно актуально, когда настройка каждого сайта раздувается на несколько десятков строк.

Также нелишне будет настроить ротацию журналов с помощью logrotate.

Приложение

Особенности директив Listen и NameVirtualHost

Директива Listen имеет больший приоритет чем, NameVirtualHost. Она говорит, откуда принимать запросы. В то время как последняя определяет, как обрабатывать полученный запрос. Это значит, что если указано значение

Listen 80

то Apache будет прослушивать порт 80 на всех IP адресах и директива

NameVirtualHost 10.0.10.15

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

Listen 10.0.10.15:80

то

NameVirtualHost 192.168.100.18

не возымеет действия, и сайт будет не доступен из локальной сети.

См. также

  • Apache — общие вопросы, небольшие заметки, работа над ошибками.

При эксплуатации 1С Предприятия часто возникает потребность установки разных версий платформы. При этом, в том случае если имеется публикация WEB или HTTP сервисов, то возникает проблема несоответствия версий клиента в виде модуля расширение 1С для веб-сервера и версии самого сервера 1С. К сожалению, на веб-сервер возможно подключить только один модуль расширения 1С. Поэтому если мы попытаемся через данный веб-сервер обратиться к базе или веб-сервису 1С другой версии платформы, то получим ошибку несоответствия версии клиента и сервера 1С.

Текст ошибки:
1C:Enterprise 8 application error:
HTTP: Conflict
by reason:
Различаются версии клиента и сервера (8.3.13.1513 - 8.3.15.1830), клиентское приложение: Модуль расширения веб-сервера
by exception: 9f06d311-1431-4a54-bd6f-fa93c4d4c471

Ошибка Различаются версии клиента и сервера (8.3.13.1513 - 8.3.15.1830)

Окно браузера с ошибкой

Для чего нужен второй веб-сервер 1С

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

Установка второго сервера Апач

Итак, предположим, что у нас в системе уже установлен веб-сервер Apache 2.4. Далее по шагам:

1. Копируем всю папку с файлами веб-сервера Апач в новое расположение по своему усмотрению. Например, у нас был каталог первого экземпляра сервера в папке C:Apache24, копируем в папку C:Apache24_17001

Каталог установки веб-сервера Апач для 1С

2. Меняем в файле httpd.conf следующие настройки:

  • указываем новый путь к каталогу второго севера:

Define SRVROOT «C:Apache24_17001»

  • меняем порт, на котором второй сервер будет принимать подключения, укажем 17001 (можно указать свой порт):
  • При необходимости использования протокола HTTPS, дополнительно меняем в файле C:Apache24_17001confextra httpd-ahssl.conf номер порта для SSL, укажем 17443:

ServerName localhost:17443

  • прописываем загрузку модуля расширения 1С для веб-сервера нужного релиза (путь к модулю на вашем сервер может отличаться). Допустим у нас на первом веб-сервере подключен модуль версии 8.3.15.1830, а мы хотим так же работать с платформой 8.3.17.1549. Подключим модуль данного релиза:

LoadModule _1cws_module «C:/Program Files/1cv8/8.3.17.1549/bin/wsap24.dll»

3. Запускаем утилиту «Командная строка» от имени Администратора:

4. Переходим в каталог C:Apache24_17001bin

5. Установим службу для второго экземпляра веб-сервера Апач. Введем команду:

httpd.exe k install n «Apache_17001»

В результате должны увидеть сообщение об успешно установленной службе «Apache_17001»:

Устновка службы второго веб-сервера Апач для 1С

6. Переходим в оснастку «Службы», находим там службу с именем «Apache_17001» и если она не запущена, то стартуем ее:

Запуск службы второго веб-сервера Апач

7. Проверяем работу. Вводим в браузере адрес localhost:17001. Если видим тестовую страницу веб-сервера, то все прошло успешно

Проверка веб-сервера Апач

8. Проверяем HTTPS, вводим адрес https:// localhost:17443. После вопроса о безопасности сертификата так же должны увидеть тестовую страницу.

Проверка HTTPS протокола веб-сервера Апач

Итоги

Теперь после установки второго веб-сервера Апач мы получили возможность работать через веб-расширение как с сервером 1С версии 8.3.15.1830, так и с сервером 1С версии 8.3.17.1549.

Так для подключения к базе расположенной на сервере версии 8.3.15.1830 обращение идет по адресу:

localhost/base15/

а для обращения к базе на сервере версии 8.3.17.1549:

localhost:17001/base17/

Аналогично происходит обращение к web- и http- сервисам на указанных серверах.

Spent hours going in circles following every guide I can find on the net.

I want to have two sites running on a single apache instance, something like this —
192.168.2.8/site1
and
192.168.2.8/site2

I’ve been going round in circles, but at the moment I have two conf files in ‘sites-available (symlinked to sites-enabled)’ that look like this-

<VirtualHost *:2000>

ServerAdmin webmaster@site1.com
ServerName site1
ServerAlias site1

# Indexes + Directory Root.
DirectoryIndex index.html
DocumentRoot /home/user/site1/

# CGI Directory
ScriptAlias /cgi-bin/ /home/user/site1/cgi-bin/

Options +ExecCGI

# Logfiles
ErrorLog /home/user/site1/logs/error.log
CustomLog /home/user/site1/logs/access.log combined

</VirtualHost>

and

<VirtualHost *:3000>

ServerAdmin webmaster@site2.com
ServerName site2
ServerAlias site2

# Indexes + Directory Root.
DirectoryIndex index.html
DocumentRoot /home/user/site2/

# CGI Directory
ScriptAlias /cgi-bin/ /home/user/site2/cgi-bin/

Options +ExecCGI

# Logfiles
ErrorLog /home/user/site2/logs/error.log
CustomLog /home/user/site2/logs/access.log combined

</VirtualHost>

http.conf looks like this-

NameVirtualHost *:2000
NameVirtualHost *:3000

At the moment I’m getting this error-

[error] VirtualHost *:80 — mixing * ports and non-* ports with a NameVirtualHostaddress is not supported, proceeding with undefined results

Ports.conf looks like this – (although no guides have mentioned any need to edit this)

NameVirtualHost *:80

Listen 80
<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
Listen 443
</IfModule>

<IfModule mod_gnutls.c>
Listen 443
</IfModule>

Can anyone give some simple instructions to get this running? Every guide I’ve found says to do it a different way, and each one leads to different errors. I’m obviously doing something wrong but have found no clear explanation of what that might be.

Just want one site accessible on port 2000 and the other accessible on port 3000 (or whatever, just picked those ports to test with).

I’m running Ubuntu server 12.04…

=============

EDIT

Followed another ‘guide’…

I’ve now set this up in sites-available:

<VirtualHost *:80>
    DocumentRoot "/home/user/site1/"
    ServerName 192.168.2.10/site1
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/home/user/site2/"
    ServerName 192.168.2.10/site2
</VirtualHost>

Have set this in apache2.conf:

ServerName site1
ServerName site2

Have added this to ports.conf:

Listen 192.168.2.10:80

==============

EDIT

It now works, I put this in a conf file in site-enabled:

<VirtualHost *:81>
    DocumentRoot "/home/user/site1/"
    ServerName site1
</VirtualHost>

<VirtualHost *:82>
    DocumentRoot "/home/user/site2/"
    ServerName site2
</VirtualHost>

I have this in ports.conf:

Listen *:80
Listen *:81
Listen *:82

I have this in apache2.conf:

ServerName site1
ServerName site2

I didn’t find this in any guides I just got it working through an entire day of trial and error so I don’t know if this is a good solution. But it’s at least working how I want it to now.

Spent hours going in circles following every guide I can find on the net.

I want to have two sites running on a single apache instance, something like this —
192.168.2.8/site1
and
192.168.2.8/site2

I’ve been going round in circles, but at the moment I have two conf files in ‘sites-available (symlinked to sites-enabled)’ that look like this-

<VirtualHost *:2000>

ServerAdmin webmaster@site1.com
ServerName site1
ServerAlias site1

# Indexes + Directory Root.
DirectoryIndex index.html
DocumentRoot /home/user/site1/

# CGI Directory
ScriptAlias /cgi-bin/ /home/user/site1/cgi-bin/

Options +ExecCGI

# Logfiles
ErrorLog /home/user/site1/logs/error.log
CustomLog /home/user/site1/logs/access.log combined

</VirtualHost>

and

<VirtualHost *:3000>

ServerAdmin webmaster@site2.com
ServerName site2
ServerAlias site2

# Indexes + Directory Root.
DirectoryIndex index.html
DocumentRoot /home/user/site2/

# CGI Directory
ScriptAlias /cgi-bin/ /home/user/site2/cgi-bin/

Options +ExecCGI

# Logfiles
ErrorLog /home/user/site2/logs/error.log
CustomLog /home/user/site2/logs/access.log combined

</VirtualHost>

http.conf looks like this-

NameVirtualHost *:2000
NameVirtualHost *:3000

At the moment I’m getting this error-

[error] VirtualHost *:80 — mixing * ports and non-* ports with a NameVirtualHostaddress is not supported, proceeding with undefined results

Ports.conf looks like this – (although no guides have mentioned any need to edit this)

NameVirtualHost *:80

Listen 80
<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
Listen 443
</IfModule>

<IfModule mod_gnutls.c>
Listen 443
</IfModule>

Can anyone give some simple instructions to get this running? Every guide I’ve found says to do it a different way, and each one leads to different errors. I’m obviously doing something wrong but have found no clear explanation of what that might be.

Just want one site accessible on port 2000 and the other accessible on port 3000 (or whatever, just picked those ports to test with).

I’m running Ubuntu server 12.04…

=============

EDIT

Followed another ‘guide’…

I’ve now set this up in sites-available:

<VirtualHost *:80>
    DocumentRoot "/home/user/site1/"
    ServerName 192.168.2.10/site1
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/home/user/site2/"
    ServerName 192.168.2.10/site2
</VirtualHost>

Have set this in apache2.conf:

ServerName site1
ServerName site2

Have added this to ports.conf:

Listen 192.168.2.10:80

==============

EDIT

It now works, I put this in a conf file in site-enabled:

<VirtualHost *:81>
    DocumentRoot "/home/user/site1/"
    ServerName site1
</VirtualHost>

<VirtualHost *:82>
    DocumentRoot "/home/user/site2/"
    ServerName site2
</VirtualHost>

I have this in ports.conf:

Listen *:80
Listen *:81
Listen *:82

I have this in apache2.conf:

ServerName site1
ServerName site2

I didn’t find this in any guides I just got it working through an entire day of trial and error so I don’t know if this is a good solution. But it’s at least working how I want it to now.

Зачем устанавливать Apache HTTP Server на домашний ПК? Мне случалось делать это два раза. Первый раз — когда я изучал программирование веб-приложений (HTML-CSS-JavaScipt-PHP-MySQL). И я, естественно, не собирался размещать свой игрушечный сайт в интернете, поэтому я должен был разместить его на своем ПК. И второй раз — вот сейчас — когда я захотел завести блог и протестировать его на своем домашнем ПК (см. предыдущий пост). Итак, поехали.

Установка

  1. Скачиваем дистрибутив сервера Apache HTTP Server. Мой ПК работает под управлением Windows (точнее — 64-разрядная Windows 10), поэтому мне надо качать готовую сборку (а не исходный код) с одного из сайтов, список которых приведен на сайте httpd.apache.org. Я скачиваю ее с сайта Apache Lounge в виде zip-архива. На момент написания этого поста самой свежей была версия сборки 2.4.29.
  2. Залезаем в скачанный нами архив и читаем файл ReadMe.txt, в котором написано, что распаковывать архив надо не куда-нибудь, а на диск C: (т. е. надо скопировать из архива на диск C: папку Apache24). Почему? Потому что в конфигурационном файле httpd.conf (это специальный файл, который хранит всякие настройки сервера Apache) все директивы настроены в предположении, что папка Apache24 находится в корне диска C:, например, директива ServerRoot "c:/Apache24" и многие другие. Итак, распаковываем архив на диск C.
  3. В папке C:Apache24bin лежит файл httpd.exe. Это — исполняемый файл нашего сервера. Запуская его, вы запускаете сервер. Давайте добавим в переменную окружения PATH путь к папке с файлом httpd.exe. Нужно это для того, чтобы, если вы захотите запустить httpd.exe из командной строки, вам не не пришлось при помощи команд cd переходить в папку, где этот файл лежит. Чтобы изменить переменную окружения PATH в Windows 10 надо запустить классическое приложение Панель управления (его можно найти в поиске на панели задач). Далее Панель управленияСистема и безопасностьСистемаДополнительные параметры системыПеременные средыСистемные переменныеPATHИзменитьСоздать C:Apache24bin. Нажать ОК.
  4. Если теперь попытаться запустить httpd.exe, из командной строки, то он запустится и выведет сообщение об ошибке Could not reliably determine the server's fully qualified domain name... Set the 'ServerName' directive globally to suppress this message. В файле C:Apache24confhttpd.conf находим директиву ServerName и меняем ее так:

    Пока для целей тестирования не имеет значения, какой URL вы введете в этой директиве, но поскольку у вашего сервера нет зарегистрированного доменного имени, то лучше ввести localhost (вы также можете ввести ip-адрес вашего ПК или так называемый loopback-адрес 127.0.0.1). После этого можно запускать сервер.

  5. Если вы хотите, чтобы все выглядело так, будто у вашего сервера есть настоящее зарегистрированное доменное имя (например, dvsav.ru), то откройте в текстовом редакторе файл C:WindowsSystem32driversetchosts (текстовый редактор надо запускать от имени администратора) и добавьте в него строку

    Теперь вы сможете вводить в адресной строке браузера dvsav.ru.

Запуск

  1. Есть два способа запустить Apache HTTP Server:

    • Запустить процесс httpd.exe (из командной строки или из проводника Windows). Этот процесс и есть сервер. Остановить его можно только одним способом: щелкнув на кнопке с крестиком в правом верхнем углу окна командной строки.
    • Запустить httpd.exe как службу Windows (службы Windows — это программы, которые не имеют никакого пользовательского интерфейса, могут запускаться автоматически при старте операционной системы и могут запускаться от имени операционной системы). Но для того, чтобы запустить httpd как службу, нужно ее определенным образом «установить» в ОС Windows. Это можно сделать из командной строки (командную строку cmd.exe надо запускать от имени администратора):

      Обратите внимание, что после установки служба сконфигурирована на автоматический запуск при старте Windows. Чтобы изменить это поведение, надо зайти в классическое приложение Панель управленияСистема и безопасностьАдминистрированиеСлужбы . Выбираем службу, которая имеет в своем названии слово Apache, и в контекстном меню выбираем СвойстваТип запускаВручную. В этом же контекстном меню можно запустить или остановить службу.
      Также можно запустить службу, введя в командной строке (командную строку cmd.exe надо запускать от имени администратора):

      а остановить можно так:

  2. Запускаем сервер одним из указанных выше способов. Теперь запускаем веб-браузер и в адресную строку вводим http://localhost/ (или http://127.0.0.1:80/ или можете ввести в адресную строку ip-адрес своего компьютера (его можно узнать при помощи команды командной строки ipconfig)). Должна появиться страница с текстом It Works!. Будьте внимательны при тестировании работы сайта! Веб-браузеры кэшируют веб-страницы, поэтому, если вы например изменили конфигурацию сервера или контент сайта, а затем нажали кнопку «обновить» в браузере, то он может выдать вам старую страницу, так как он ее закэшировал. Нажимайте кнопку «обновить» несколько раз.
  3. Решение проблем
    При запуске httpd.exe из командной строки в командную строку выводится абракадабра.
    Сообщения, которые выводит в консоль httpd.exe, имеют кодировку 1251, поэтому для того, чтобы они отображались нормально, а не в виде абракадабры, перед тем, как запустить httpd.exe смените кодовую страницу, выполнив команду chcp 1251
    Сервер не запускается либо при попытке открыть страницу http://localhost/ веб-браузер выдает ошибку 404 (страница не найдена).
    Сервер Apache по-умолчанию должен прослушивать порт 80. Проблема может возникнуть из-за того, что другая программа уже прослушивает этот порт (например у меня это был skype).Чтобы выяснить, кто прослушивает порт 80, можно воспользоваться стандартной утилитой netstat.exe. Введите в командной строке

    netstat -a -b > C:netstat_out.txt

    На диске C: появится файл netstat_out.txt, открыв который, вы увидите какой процесс или служба какой ip-адрес и порт прослушивает. После этого программу или службу, прослушивающую порт 80, надо просто остановить.

Настройка

Теперь, если все нормально работает, рассмотрим некоторые настройки сервера, специфичные для случая, когда вы устанавливаете его на свой домашний ПК с целью тестирования своего сайта. В целях безопасности я хотел бы настроить сервер так, чтобы он реагировал на HTTP-запросы только от моего ПК и ни от какого другого хоста в сети. Настройка сервера Apache производится путем редактирования файла C:Apache24confhttpd.conf. Формат файла напоминает XML. Настройки задаются при помощи так называемых директив. Чтобы настройки вступили в силу, после изменения файла httpd.conf нужно перезапустить сервер.

  1. Директива Listen заставляет Apache прослушивать определенный IP-адрес и порт и не прослушивать другие IP-адреса и порты, имеющиеся у компьютера. Я хочу, чтобы сервер прослушивал только loopback-адрес 127.0.0.1, поэтому пишу в httpd.conf директиву

    С тем же успехом можно написать

    Теперь к серверу можно будет обратиться только с локального ПК (т. е. с того ПК, на котором установлен этот сервер).

  2. Находим в файле httpd.conf директиву <Directory "c:/Apache24/htdocs"> и изменяем ее так:

    <Directory «c:/Apache24/htdocs»>
        AllowOverride FileInfo
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
    </Directory>

    Настройки внутри директивы Directory распространяются только на указанную директорию и ее поддиректории. По-умолчанию сервер считает, что файлы нашего сайта будут находиться в директории c:/Apache24/htdocs, поэтому ее мы и настраиваем.
    Первоначально я написал директиву AllowOverride none, которая запрещает так называемую per-directory configuration для всего сайта целиком (это улучшает производительность). Per-directory configuration позволяет любой директории сайта иметь собственный конфигурационный файл (по-умолчанию все такие файлы имеют имя .htaccess), который может переопределять (override) для своей директории настройки, указанные в файле httpd.conf. Как выяснилось позднее, чтобы нормально работал WordPress, все-таки надо было разрешить per-directory configuration, написав AllowOverride FileInfo.
    Директива Order Deny,Allow управляет последовательностью выполнения директив Allow и Deny (см. далее). При наличии противоречия между двумя директивами Allow и Deny действие возымеет директива, выполнившаяся последней.
    Директива Deny from all запрещает доступ к сайту с любого хоста. Хост, которому запрещен доступ к сайту получит сообщение Forbidden. You don't have permission to access / on this server.
    Директива Allow from 127.0.0.1 — разрешает доступ к сайту с локального компьютера.

Несколько сайтов на одном сервере

И последнее, о чем хотел сказать, хотя это не имеет особого отношения к рассматриваемой нами сейчас задаче тестирования блога. Предположим, вы хотите содержать несколько сайтов на одном сервере. IP-адрес у них скорее всего будет одинаковый (если у вас нет нескольких сетевых карт в компьютере), а доменные имена разные. Также у них будут разные корневые директории. Apache Server может автоматически распознавать, к какому сайту обращен тот или иной HTTP-запрос (если в запросе указано доменное имя сайта). Но для этого Apache надо определенным образом настроить. Допустим вы хотите иметь на одном сервере два сайта: www.my-first-site.com и www.my-second-site.com. В самый конец файла httpd.conf добавьте следующий текст:

<VirtualHost 127.0.0.1:80>
    ServerAdmin admin@example.com
    DocumentRoot C:/www/my-first-site
    ServerName www.my-first-site.com
    ErrorLog logs/error_my-first-site.log
    CustomLog logs/access_my-first-site.log common
</VirtualHost>

<VirtualHost 127.0.0.1:80>
    ServerAdmin admin@example.com
    DocumentRoot C:/www/my-second-site
    ServerName www.my-second-site.com
    ErrorLog logs/error_my-second-site.log
    CustomLog logs/access_my-second-site.log common
</VirtualHost>

Предполагается, что на диске C: существует папка www, в которой есть еще две папки: my-first-site и my-second-site. admin@example.com замените на адрес своей почты. Директивы ErrorLog и CustomLog задают файлы, куда будут писаться логи (файлы будут созданы сервером автоматически). Пути к файлам задаются относительно ServerRoot. common — это формат по-умолчанию для записей, которые добавляются в лог. common — это краткое обозначение формата %h %l %u %t »%r» %>s %b.

Ну вот и все. Далее рассмотрим как включить в Apache HTTP Server поддержку PHP — скриптового языка для разработки веб-приложений.

Литература

  1. Julie C. Meloni — Sams Teach Yourself PHP, MySQL and Apache All in One, 5th Edition — 2012
  2. Mohammed J. Kabir — Apache Server 2 Bible — 2002
  3. Apache HTTP Server Version 2.4 Documentation

За последние 24 часа нас посетили 9427 программистов и 1193 робота. Сейчас ищут 190 программистов …


  1. блудный сын

    блудный сын
    Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0

    Как установить и запустить два Апача на одоном компе под винду? Пробовал это сделать — не получилось: в одних случаях Апач отказывался устанавливаться выдавая ошибку, что уже установлен, а в других случаях устанавливался, но только в ту же директорию где и старый, как бы обновляя его.


  2. +Sten+

    +Sten+
    Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0


  3. nimistar

    nimistar
    Активный пользователь

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0


  4. nimistar

    nimistar
    Активный пользователь

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0

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


  5. блудный сын

    блудный сын
    Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0

    Ну а этот код для чего ты мне тогда писал?


  6. nimistar

    nimistar
    Активный пользователь

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0

    а потом написал:

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

    да и про второй апач я говорил тока то что говрю и сейчас … ФИГНЯ!!!


  7. блудный сын

    блудный сын
    Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0

    А потом Сергей89 пришел и сказал, что Апач сам себя перезапустить не может. Следовательно я сразу усмотрел выход в установке второго Апача который бы перезапускал первый. Но не тут то было… Считаю эту тему, о установке второго Апача закрытой. Второй Апач я устанавливать благодаря вам научился.


  8. Sergey89

    Sergey89
    Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0


  9. блудный сын

    блудный сын
    Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0


  10. Sergey89

    Sergey89
    Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0

    А какой в конце знак препинания?


  11. блудный сын

    блудный сын
    Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0

    Вопросительный. А что? Разве то был не риторический вопрос?


  12. блудный сын

    блудный сын
    Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0


  13. Anonymous


  14. Sergey89

    Sergey89
    Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0


  15. блудный сын

    блудный сын
    Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0


  16. DarkElf

    DarkElf
    Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0

    блудный сын

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


  17. блудный сын

    блудный сын
    Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0

    Это для меня тяжело. Практически не реально. Фаервол не пропустит входящий коннект. А отключать фаервол нельзя, только он меня и спасает.


  18. DarkElf

    DarkElf
    Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0

    звиздец. я тебе великую наверное тайну открою — файерволы поддаются дрессировке))


  19. angelo4ek

    angelo4ek
    Активный пользователь

    С нами с:
    27 авг 2006
    Сообщения:
    85
    Симпатии:
    0

    Да просто расскажи как настроить порты))

    Мальчиг, у тебя какой фаерволл??


  20. DarkElf

    DarkElf
    Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0

    angelo4ek

    ага. давай, настраивай ему удаленно неизвестный файервол)

Понравилась статья? Поделить с друзьями:
  • Действие при подключении устройства windows 10
  • Даунгрейд windows server 2019 до 2012
  • Действие при закрытии крышки ноутбука windows 10 cmd
  • Даунгрейд windows 7 ultimate до professional
  • Действие почти полной разрядки батареи windows 10