LINUX.ORG.RU

Запуск нескольких процессов Apache httpd

 , ,


0

2

Добрый день.

Пытаюсь научиться запускать Apache с разными конфигами, чтобы можно было использовать разные версии PHP и т.п.

В качестве основы использовал данный мануал http://wiki.apache.org/httpd/RunningMultipleApacheInstances.

Вроде бы даже почти все получилось, т.е. я запускаю 3 инстанса, и все они выводятся командой ps aux | grep httpd

sudo /usr/local/apache2_2/bin/apachectl -f /usr/local/apache2_2/_/sites/httpd-proxy.conf -k start
sudo /usr/local/apache2_2/bin/apachectl -f /usr/local/apache2_2/_/sites/httpd-php53.conf -k start
sudo /usr/local/apache2_2/bin/apachectl -f /usr/local/apache2_2/_/sites/httpd-php54.conf -k start

Т.е., на данном этапе ошибок вроде быть не должно, по крайней мере консоль ничего не выводила про ошибки. Проблема скорее всего в конфигурировании виртуальных хостов. В этом вопросе я не очень опытен.

Привожу свои тестовые конфиги:

<VirtualHost *:80>
    DocumentRoot /home/asdfzxcv/_/sites/test01/web
    ServerName test01.l


#    ProxyPass / http://localhost:83/
#    ProxyPassReverse / http://localhost:83/
    ProxyPass / http://test01.l:83/
    ProxyPassReverse / http://test01.l:83/

    RewriteOptions Inherit


    <LocationMatch ^/private>
        Order Allow,Deny
        Deny from all
    </LocationMatch>

    <Location /server-status>
        SetHandler server-status
    </Location>
</VirtualHost>

и

<VirtualHost *:80>
    DocumentRoot /home/asdfzxcv/_/sites/test02/web
    ServerName test02.l


    ProxyPass / http://localhost:84/
    ProxyPassReverse / http://localhost:84/


    RewriteOptions Inherit


    ErrorLog /home/asdfzxcv/_/sites/test02/error_log
    TransferLog /home/asdfzxcv/_/sites/test02/access_log
</VirtualHost>

В первом примере видно, что я пытался использовать вместо localhost:83, test01.l, что тоже ничего не изменило:

#    ProxyPass / http://localhost:83/
#    ProxyPassReverse / http://localhost:83/
    ProxyPass / http://test01.l:83/
    ProxyPassReverse / http://test01.l:83/

Т.е., я ожидаю, что по адресу test01.l или test02.l я буду получать отдачу контента из папки /home/asdfzxcv/_/sites/test01/web. А в браузер получаю контент из /usr/htdocs. Хотя, до попытки использовать reverse proxy, с одним запущенным инстансом, эти примеры сайтов использовали нужные, соответствующие им папки.

Также, есть конфиг, предшествующий конфигам виртуальных хостов, находящийся в конце httpd-proxy.conf

RewriteEngine On
RewriteRule (.*\.php)s$ $1 [H=application/x-httpd-php-source]
<FilesMatch "\.ph(p[2-6]?|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
</FilesMatch>


ServerName 127.0.0.1
NameVirtualHost *:80
<Directory "/home/asdfzxcv/_/sites">
    Order allow,deny
    allow from all
    AllowOverride All

    Options +Indexes +FollowSymLinks
</Directory>
<VirtualHost *:80>
  ServerName default
  DocumentRoot /usr/local/apache2_2/htdocs
</VirtualHost>

# ЗДЕСЬ Я КАК РАЗ ПОДКЛЮЧАЮ ВИРТ. ХОСТЫ
Include _/sites/test01.conf
Include _/sites/test02.conf

Еще раз, кратко о проблеме:

  • запускаю несколько инстансов Apache
  • пытаюсь перейти по адресу test01.l
  • получаю контент из /usr/htdocs вместо /home/asdfzxcv/_/sites/test01/web, хотя до попытки использовать reverse proxy, эти тестовые сайты работали исправно.


Последнее исправление: bannndi (всего исправлений: 8)

Никогда не работал с апачевским прокси. Но можно предположить, что прокси, ну, проксирует же. :) То есть Host теряется и запрос через прокси уходит на default.

Попробуйте включить ProxyPreserveHost.

lexazloy
()

Тут не нужны инстансы апача и проксирование, а нужен один апач и пара виртуалхостов с разными версиями php-cgi, заведенными через mod_fcgid.

thesis ★★★★★
()
Ответ на: комментарий от thesis

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

bannndi
() автор топика
Ответ на: комментарий от lexazloy

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

bannndi
() автор топика
Ответ на: комментарий от bannndi

Да лучше сделай сразу как положено. Вообще здесь проксирование не нужно, а в твоей конфигурации еще и не работает. Нафига вообще в конфиг проксирующего инстанса включать еще и конфиги двух других инстансов? Откуда у тебя здесть возьмутся разные версии пхп? И, кстати, директива NameVirtualHost в новых апачах упразднена, об этом при запуске даже warning должен быть.

thesis ★★★★★
()
Ответ на: комментарий от bannndi

Хм, кажется, я понял.

Смотрите: у вас есть конфиг на отдельный порт. А так же конфиг на 80-й порт, как точка входа.

Надо держать конфиги раздельно - без подключений одних в другой. А в конфиг 80-го порта поместить все записи о прокси.

Тогда браузер идёт на http://адрес (порт 80) и упирается в прокси.
Дальше прокси решает исходя из Host куда отправить запрос.

P.S. Всё же nginx для прокси лучше. Отдельная абстракция проще воспринимается. :)

lexazloy
()
Ответ на: комментарий от thesis

< Да лучше сделай сразу как положено.

Проблема в том, что я не знаю как положено. Nginx это конечно здорово, но для моих текущих задач, и с моими текущими познаниями, я бы хотел пока остановиться на Apache. Если если пара ссылок, чтобы ознакомиться с тем «как положено», было бы очень здорово. А мои задачи - это локальная веб-разработка. Одна инсталляция веб-сервера, и разные версии PHP. Я в курсе проблем Apache, но хотел бы для начала настроить хотя бы так. Дальше видно будет.

< Вообще здесь проксирование не нужно, а в твоей конфигурации еще и не работает. Нафига вообще в конфиг проксирующего инстанса включать еще и конфиги двух других инстансов?

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

< Откуда у тебя здесть возьмутся разные версии пхп? И, кстати, директива NameVirtualHost в новых апачах упразднена, об этом при запуске даже warning должен быть.

У меня версия Apache 2.2.29.

bannndi
() автор топика
Ответ на: комментарий от lexazloy

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

< Надо держать конфиги раздельно - без подключений одних в другой.

Конфиги не включены один в другой. Выше в комментарии об этом уже писал. Они отдельные. Я бы вообще не смог скорее всего запустить Apache, если бы была такая грубая ошибка с моей стороны. А запускается все вообще без ошибок, в теме писал.

< А в конфиг 80-го порта поместить все записи о прокси.

Здесь, если можно, поподробней, я первый раз настраиваю.

< P.S. Всё же nginx для прокси лучше. Отдельная абстракция проще воспринимается. :)

Мне больше не сам прокси нужен, а нужна реализация моей задачи, а именно - одна инсталляция веб-сервера, с несколькими версиями PHP. Этот рецепт показался мне несложным, и я хотел бы его довести до завершения. А дальше будет видно. :)

bannndi
() автор топика
Ответ на: комментарий от bannndi

В конфиг проксирующего инстанса включаются только конфиги виртуальных хостов

Виноват, перепутал.
Смотри. Я так понял, две версии пхп, наученные жить в разных каталогах, юзать разные конфиги и т.д. у тебя уже есть. Теперь тебе нужен апач с загруженным mod_fcgid, и два виртуалхоста в конфигах, допустим один для пхп 5.3, другой для 5.5.
В общем случае типовой конфиг имеет вид наподобие такого:

<VirtualHost *:80>
  ServerName test1.local
  DocumentRoot "/var/www/html/test1.local"
  FcgidWrapper "/opt/php53/bin/php-cgi"
  <Directory "/var/www/html/test1.local">
    Options +ExecCGI
  </Directory>
</Virtualhost>

И соответственно в глобальный конфиг куда удобнее впиши AddHandler fcgid-script .php и загрузку модуля mod_fcgid(если пакетный менеджер уже не вписал). Ну и NameVirtualHost, раз уж апач старый.

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

thesis ★★★★★
()
Ответ на: комментарий от thesis

Спасибо за инструкцию! Но я так понимаю, что конфиг апача будет всегда один и тот же, что не добавляет гибкости, в случае необходимости.

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

bannndi
() автор топика
Ответ на: комментарий от bannndi

не добавляет гибкости

Ну... Я не совсем понимаю, что ты имеешь в виду под словом «гибкость». Конфиг-файл точно так же по вкусу дробится на любое число кусков, которые инклюдятся в глобальный.

а где их брать - тоже непонятно

В пакетах своего дистрибутива.

thesis ★★★★★
()
Ответ на: комментарий от bannndi

Конфиги:

httpd-php53.conf

ServerRoot "/usr/local/apache2_2"
ServerName 127.0.0.1
ServerAdmin you@example.com
Listen 1053
PidFile /usr/local/apache2_2/logs/httpd-php53.pid


LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbd_module modules/mod_authn_dbd.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule dbd_module modules/mod_dbd.so
LoadModule dumpio_module modules/mod_dumpio.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule include_module modules/mod_include.so
LoadModule filter_module modules/mod_filter.so
LoadModule substitute_module modules/mod_substitute.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule log_forensic_module modules/mod_log_forensic.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
LoadModule ident_module modules/mod_ident.so
LoadModule usertrack_module modules/mod_usertrack.so
LoadModule unique_id_module modules/mod_unique_id.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule mime_module modules/mod_mime.so
LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule asis_module modules/mod_asis.so
LoadModule info_module modules/mod_info.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule imagemap_module modules/mod_imagemap.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule php5_module        modules/libphp5_3.so

<IfModule !mpm_netware_module>
<IfModule !mpm_winnt_module>

User daemon
Group daemon

</IfModule>
</IfModule>


<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

<Directory "/usr/local/apache2_2/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all

</Directory>


<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

<FilesMatch "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>


ErrorLog "logs/error_log"
LogLevel warn



<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    CustomLog "logs/access_log" common

</IfModule>

<IfModule alias_module>
    ScriptAlias /cgi-bin/ "/usr/local/apache2_2/cgi-bin/"
</IfModule>

<IfModule cgid_module>
</IfModule>

<Directory "/usr/local/apache2_2/cgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>

DefaultType text/plain

<IfModule mime_module>
    TypesConfig conf/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
</IfModule>



<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>



## SITES ##
Include _/httpd-php53-sites.conf

_/httpd-php53-sites.conf

RewriteEngine On
RewriteRule (.*\.php)s$ $1 [H=application/x-httpd-php-source]
<FilesMatch "\.ph(p[2-6]?|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
</FilesMatch>


<Directory "/home/asdfzxcv/_/sites">
    Order allow,deny
    allow from all
    AllowOverride All
    Options +Indexes +FollowSymLinks
</Directory>


NameVirtualHost *:1053
<VirtualHost *:1053>
  ServerName default
  DocumentRoot /usr/local/apache2_2/htdocs
</VirtualHost>


Include _/site-test01.conf

_/site-test01.conf


<VirtualHost *:1053>
    DocumentRoot /home/asdfzxcv/_/sites/test01/web
    ServerName test01.l
    RewriteOptions Inherit
</VirtualHost>

Браузер: http://test01.l:1053/ для PHP53, и http://test02.l:1054/ для PHP54

bannndi
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.