услуги и цены оплата контакты о проекте FAQ

Установка и настройка apache с поддержкой php и geo_ip на FreeBSD или Linux

Соглашения в данной статье : строки начинающиеся с $ обозначают команды которые надо выполнить из шелл, курсивом выделены конфигурационные директивы httpd.conf

1 скачиваем необходимые дистрибутивы (ставить будем все из исходников)

Нам потребуются пакеты:
apache_1.3.31.tar.gz
php-4.3.9.tar.gz
GeoIP-1.3.7.tar.gz
mod_geoip_1.2.6.tar.gz

(на момент написания статьи это были последние стабильные версии)
для того чтоб скачать открываем

http://httpd.apache.org/download.cgi
http://www.php.net/downloads.php
http://www.maxmind.com/download/geoip/api/c/
http://www.maxmind.com/download/geoip/api/mod_geoip/

находим нужный архив в списке и качаем, рекомендую ставить самые свежие _стабильные_
версии
архивы кладем например в ~/install/
$ cd
$ mkdir install
$ cd install

...скачиваем.. (wget lynx ftp fetch - кому чем удобно и что есть в наличии)

2 распаковываем все в /usr/local/src/

(можно и в другое место но мне нравится туда)
$ cd /usr/local/src/ установка GeoIP-1.3.7
$ tar zxf ~/install/GeoIP-1.3.7.tar.gz
$ cd GeoIP-1.3.7
$ ./configure && make && make check && make install

$ cd apache_1.3.31/


mod_geoip_1.2.6 - статически компиляем в апачу


$ cp ../mod_geoip_1.2.6/mod_geoip.c src/modules/extra/
$ ./configure \
--prefix=/usr/local/apache/ \
--activate-module=src/modules/extra/mod_geoip.c \
--enable-module=so \
--enable-module=rewrite \
--enable-module=vhost_alias

Пояснения по опциям configure
--prefix=/usr/local/apache/ - апачу ставим в /usr/local/apache/
если у вас там уже стояла apache удалите ее оттуда
(лучше переместить чтоб потом взять нужное из старого конфа при надобности
или вернуть на место в случае неудачи инсталяции
$mv /usr/local/apache/ /usr/local/apache.back )

--activate-module=src/modules/extra/mod_geoip.c - статически вкомпиливаем
модуль mod_geoip в apache.

php ставим динамически, чтобы потом при обновлени или добавлении новых фичь
в php не нужно было пересобирать apache.
--enable-module=so - поддержка динамических модулей

--enable-module=rewrite
--enable-module=vhost_alias
в рамках данной статьи просто еще 2 полезных модуля
- они просто как пример можно и без них, можно еще какие нибудь
$ ./configure --help - даст полный список стандартных модулей

(если планируется БОЛЬШОЙ трафик на сервере, то может понадобится
увеличить в исходниках src/include/httpd.h константу HARD_SERVER_LIMIT
она отвечает за максимальное кол-во одновременно подключенных клиентов,
директива MaxClients в конфе apache не может превысить это значение,
по дефолту 256 для *nix систем
define HARD_SERVER_LIMIT 256 )

$ make
$ make install

если повезло то сборка пройдет нормально
если же нет то make выдаст какую-нибудь ошибку
например на FreeBSD 5.2-RELEASE при всех вышеописаных действиях make
вываливается с ошибкой, а на чуть другой версии ОС и
пакетов может собраться прекрасно.

Самое главное не терятся и понять как решать проблемму ;)
===== пример ========
по завершении работы make видим:
.....
*** Error code 1

Stop in /usr/local/src/apache_1.3.31/src/modules/extra.
*** Error code 1

Stop in /usr/local/src/apache_1.3.31/src/modules.
*** Error code 1

Stop in /usr/local/src/apache_1.3.31/src.
*** Error code 1

Stop in /usr/local/src/apache_1.3.31.
*** Error code 1

Stop in /usr/local/src/apache_1.3.31.

листаем вверх и читаем что там пишется - для не програмиста - просто куча аброкадабры, но там есть ответ на то где ошибка очень часто make просто не находит какой то нужный файл,
потому что он находится не там где ожидалось.
Первым делом ищите строчку содержащую "No such file or directory"

например:
mod_geoip.c:95:19: GeoIP.h: No such file or directory
mod_geoip.c:96:23: GeoIPCity.h: No such file or directory

ищем
$ find / -name GeoIP.h
$ /usr/local/include/GeoIP.h
$ /usr/local/src/GeoIP-1.3.7/libGeoIP/GeoIP.h

.h -это библиотечный файл, make их ищет обычно в /usr/local/include/ или /usr/include/. Короче говоря инсталятор GeoIP положил заголовочные файлы в /usr/local/include/ а make при сборке apache искала их в /usr/include/ решением будет сделать символические ссылки

$ ln -s /usr/local/include/GeoIP.h /usr/include/GeoIP.h
$ ln -s /usr/local/include/GeoIPCity.h /usr/include/GeoIPCity.h


=========== php ==============
$ ./configure \
--with-mysql \
--with-apxs=/usr/local/apache/bin/apxs
$ make && make install

копируем файл настроек php - php.ini
$ cp php.ini-dist /usr/local/lib/php.ini
(если у вас уже раньше стояло php и в /usr/local/lib/php.ini есть какие то ваши настройки
то можно оставить старый)

для того чтобы файлы с расширением .php воспринимались сервером
как php-скрипты необходимо дописать в конфиг apache (/usr/local/apache/conf/httpd.conf у меня) строку

AddType application/x-httpd-php .php

также надо добавить для работы с geo_ip
<IfModule mod_geoip.c>
GeoIPEnable On
</IfModule>

можно в конец конфига можно в начало, не важно, но не посредине какого нибудь блока ;)

Вот все и установленно !

осталось донастроить apache (по вариантам настройки апачи надо отдельную статью писать), прописать виртуалхотсы, положить контент .

но уже можно пользоваться, запускаем apache
$ /usr/local/apache/bin/apachectl start

для теста можно создать простейший скрипт прямо из шелл
$ cd /usr/local/apache/htdocs
$ echo "<? phpinfo(); ?>" >> info.php

заходим браузером на http://ip_сервера/info.php
должна отображатся страничка с информацией о сервере.


Пример использования geo_ip из php
#==============test.php====
<html>
<body>
<?php
$ip = getenv("REMOTE_ADDR"); // get the ip number of the user
$cc = getenv("GEOIP_COUNTRY_CODE");
$country = getenv("GEOIP_COUNTRY_NAME");
?>
ip addres: <? print($ip);?><br>
COUNTRY_CODE: <? print($cc);?><br>
Country: <? print($country);?><br>
</body>
</html>
#=========================

вопросы и комментарии пишите мне на на mitch@aka-root.com


Rambler's Top100
designed byDanceFox