Tym razem opiszemy jak na jednym systemie mieć równolegle 2 różne wersje php
. Użyjemy do tego starej i niewspieranej już dystrybucji SUSE 9.3. W repozytorium znajduje się php
w wersji 5.0.3 (+ apache 2.0.53
). Jeżeli ktoś potrzebuje nowszej wersji tych pakietów, trzeba je ręcznie skompilować. My użyjemy php 5.2.17
wraz z httpd 2.0.64
. Co ważne nie rezygnujemy z oficjalnych wersji, więc w systemie będą działać 2 demony apache
.
Taka konfiguracja umożliwi zdefiniowanie indywidualnej wersji php
dla każdego vhost'a
. Oczywiście ręcznie skompilowane php
/apache
może się przydać w odwrotnej sytuacji. Jeżeli nasz system obsługuje oficjalnie tylko najnowsze php 5.3.x
, a niektóre z naszych stron nie są z tą wersją kompatybilne, wtedy możemy doinstalować równolegle starszą wersję.
Kompilacja i konfiguracja httpd 2.0.64
Najnowszą dostępną wersję z serii 2.0.x ściągamy z oficjalnej strony i zapisujemy ją w katalogu /usr/src
. Dodatkowo użyjemy lekko zmodyfikowanej łatki ze strony LFS (Linux From Scratch), która zdefiniuje położenie katalogów/plików instalacyjnych (layout FHS).
[root@itcore src]# wget http://artfiles.org/apache.org//httpd/httpd-2.0.64.tar.gz [root@itcore src]# wget http://tech.itcore.com.pl/wp-content/uploads/2011/04/httpd-2.0.64-config-1.patch [root@itcore src]# tar xf httpd-2.0.64.tar.gz [root@itcore httpd-2.0.64]# patch -Np1 -i ../httpd-2.0.64-config-1.patch patching file config.layout patching file srclib/apr/config.layout patching file srclib/apr-util/config.layout
Kompilujemy httpd
do katalogu /opt/httpd2/
:
[root@itcore httpd-2.0.64]# ./configure --prefix=/opt/httpd2 --sysconfdir=/opt/httpd2/etc --enable-mods-shared=all --enable-layout=FHS [root@itcore httpd-2.0.64]# make && make install
Wszystkie pliki znajdują się teraz w katalogu /opt/httpd2/
.
[root@itcore httpd-2.0.64]# ls -1 /opt/httpd2/ bin etc include lib sbin share var
Ponieważ oryginalny apache
nasłuchuje już na porcie 80, nowy będzie działać na porcie 81. Dodatkowo ustawimy testowego php
.
[root@itcore ~]# cat /opt/httpd2/etc/httpd.conf ... Listen 81 # include vhost Include /opt/httpd2/etc/vhosts.d/*.conf [root@itcore ~]# cat /opt/httpd2/etc/vhosts.d/testdomain.itcore.com.pl.conf <VirtualHost x.x.x.x:81> ServerName testdomain.itcore.com.pl DocumentRoot /var/www/testdomain.itcore.com.pl ErrorLog /var/log/hosts/testdomain.itcore.com.pl-error_log CustomLog /var/log/hosts/testdomain.itcore.com.pl-access_log combined <Directory "/var/www/testdomain.itcore.com.pl"> AllowOverride None Order allow,deny Allow from all </Directory> </VirtualHost>
Restartujemy apache'a
:
[root@itcore ~]# /opt/httpd2/sbin/apachectl -k stop [root@itcore ~]# /opt/httpd2/sbin/apachectl -k start
Jeżeli wszystko działa to testową stronę możemy zobaczyć w przeglądarce wpisując: testdomain.itcore.com.pl:81 (:81 oznacza użycie portu 81). Teraz czas na kompilację php
.
Przygotowanie php 5.2.17
Kompilacja php
jest zdecydowanie bardziej problematyczna i czasochłonna. Należy doinstalować mnóstwo bibliotek wraz z plikami nagłówkowymi (*-dev
albo *-devel
). Wszystko zależy od tego jakie opcje wybraliśmy w skrypcie configure
. Dla ułatwienia sprawy, możemy podejrzeć z jakimi opcjami zostało skompilowane php
w dystrybucji:
[root@itcore ~]# php5 -v PHP 5.0.3 (cli) (built: May 8 2007 19:43:29) [root@itcore ~]# php5 -i | grep configure Configure Command => '../configure' '--prefix=/usr' '--datadir=/usr/share/php5' '--mandir=/usr/share/man' '--bindir=/usr/bin' ...
Podobnie jak poprzednio ściągamy źródła z oficjalnej strony php i rozpakowujemy je w katalogu /usr/src
. Następnie kompilujemy z obsługą wszystkich modułów, które będą nam potrzebne. Całość instalujemy w katalogu /opt/php52
:
[root@itcore src]# tar xf php-5.2.17.tar.gz [root@itcore src]# cd php-5.2.17 [root@itcore php-5.2.17]# ./configure '--prefix=/opt/php52' '--bindir=/opt/php52/bin' '--libdir=/opt/php52/lib64' '--includedir=/opt/php52/include' \ '--with-libdir=lib64' '--with-_lib=lib64' '--sysconfdir=/opt/php52/etc/php5/cli' '--with-config-file-path=/opt/php52/etc/php5/cli' \ '--with-config-file-scan-dir=/opt/php52/etc/php5/conf.d' '--with-exec-dir=/opt/php52/lib64/php5/bin' '--with-apxs2=/opt/httpd2/sbin/apxs' \ '--enable-magic-quotes' '--enable-libxml' '--enable-session' '--with-pcre-regex' '--enable-xml' '--enable-simplexml' '--enable-spl' \ '--enable-safe-mode' '--enable-sigchild' '--disable-debug' '--enable-memory-limit' '--enable-inline-optimization' '--disable-rpath' '--enable-cli' \ '--with-pear=/opt/php52/share/php5/PEAR' '--enable-bcmath=shared' '--enable-calendar=shared' '--enable-ctype=shared' '--enable-dio=shared' \ '--enable-dom' '--enable-exif=shared' '--enable-filepro=shared' '--enable-ftp=shared' '--enable-gd-native-ttf=shared' '--enable-gd-jis-conv=shared' \ '--enable-mbstring=shared' '--enable-mbregex' '--enable-pcntl=shared' '--enable-posix=shared' '--enable-shmop=shared' '--enable-ucd-snmp-hack=shared' \ '--enable-soap=shared' '--enable-sockets=shared' '--enable-sysvmsg=shared' '--enable-sysvsem=shared' '--enable-sysvshm=shared' '--enable-tokenizer=shared' \ '--with-zlib=shared' '--with-bz2=shared' '--with-curl=shared' '--with-db4=shared' '--with-inifile=shared' '--with-flatfile=shared' \ '--with-fam=shared' '--with-gd=shared' '--enable-gd-native-ttf' '--with-freetype-dir=yes' '--with-ttf' '--with-png-dir=/usr' '--with-jpeg-dir=/usr' \ '--with-zlib-dir=/usr' '--with-gettext=shared' '--with-iconv=shared' '--with-ldap=shared' '--with-mcrypt=shared' '--with-mhash=shared' \ '--with-mysql=shared,/usr' '--with-mysql-sock=/var/lib/mysql/mysql.sock' '--with-ncurses=shared' '--with-openssl=shared' '--with-readline=shared' \ '--with-mm=shared' '--with-xmlrpc=shared' '--with-xsl=shared' '--disable-cgi' [root@itcore php-5.2.17]# make && make install [root@itcore php-5.2.17]# ls -1 /opt/php52/ bin etc include lib64 man share
Sprawdzamy czy nowe php
działa:
[root@itcore php-5.2.17]# /opt/httpd2/sbin # /opt/php52/bin/php -v PHP 5.2.17 (cli) (built: Apr 7 2011 10:15:39) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies [root@itcore php-5.2.17]# /opt/httpd2/sbin # /opt/php52/bin/php -i ... ...
Teraz musimy dodać świeżo skompilowany moduł php
do pliku /opt/httpd2/etc/httpd.conf
:
[root@itcore ~]# cat /opt/httpd2/etc/httpd.conf .... LoadModule php5_module lib/apache/libphp5.so ... DirectoryIndex index.php index.html AddType application/x-httpd-php .php [root@itcore ~]# /opt/httpd2/sbin/apachectl -k stop [root@itcore ~]# /opt/httpd2/sbin/apachectl -k start
Jeżeli wszystko poszło bez problemów, testujemy konfigurację, tworząc prostą stronę w php
(warto zacząć od phpinfo()
) i wpisujemy ponownie adres testomain.itcore.com.pl:81.
Opcja ProxyPass
Dwie różne wersje php
i httpd
działają równolegle, jednak nie możemy wymagać od użytkowników, żeby wpisywali w przeglądarce :81 dla niektórych stron. Problem ten rozwiążemy używając w głównej instancji httpd
(tej działającej na domyślnym porcie 80) modułu mod_proxy
. Musimy stworzyć też vhost'a
dla naszej testowej domeny testdomain.itcore.com.pl. Będzie on nasłuchiwał domyślnie na porcie 80, ale używając dyrektywy ProxyPass
wszystkie zapytania zostaną automatycznie przekierowane na port 81 (czyli do testdomain.itcore.com.pl:81). Co najważniejsze użytkownik nie zauważy żadnych zmian.
[root@itcore ~]# cat /etc/apache2/vhosts.d/testdomain.itcore.com.pl.conf <VirtualHost x.x.x.x:80> ServerName testdomain.itcore.com.pl DocumentRoot /var/www/testdomain.itcore.com.pl ProxyPreserveHost On ProxyPass / http://testdomain.itcore.com.pl:81/ ProxyPassReverse / http://testdomain.itcore.com.pl:81/ ErrorLog /var/log/hosts/testdomain.itcore.com.pl-error_log CustomLog /var/log/hosts/testdomain.itcore.com.pl-access_log combined </VirtualHost>
0 Komentarze.