Serwer WWW
[apache+mm+php+mysql+ssl]
W tym artykule postaram sie opisac instalacje oraz konfiguracje najczesciej
uzywangeo serwera www - Apache w polaczeniu z PHP (jezykiem skryptowym do
tworzenia stron www), bazz danych - MySQL, oraz obsluga bezpiecznych polaczen -
SSL (mod_ssl).
o Przygotowania
=============
Przed rozpoczeciem nalezy zaopatrzyc sie w najnowsze zrodla Apache`a, biblioteki
mm, PHP, MySQL, openssl (jezeli jeszcze nie masz, a jesli masz nieaktualna to warto
przy okazji uaktualnic do najnowszej wersji) oraz mod_ssl, podczas pisania tego
artykulu najnowszymi zrodlami sa:
apache 1.3.28 http://httpd.apache.org/download.cgi
php 4.3.2 http://www.php.net/downloads.php
mysql 4.0.14 http://www.mysql.com/downloads/mysql-4.0.html
mm 1.3.0 http://freshmeat.net/releases/115481/
mod_ssl 2.8.15 http://www.modssl.org/source/
openssl 0.9.7b http://www.openssl.org/source/
Na poczatek umieszczamy wszystkie zrodla w katalogu /usr/src i tam rozpakowywujemy:
# tar -zxvf apache_1.3.28.tar.gz
# tar xvfj php-4.3.2.tar.bz2
# tar -zxvf openssl-0.9.7b.tar.gz
# tar -zxvf mysql-4.0.14.tar.gz
# tar -zxvf mm-1.3.0.tar.gz
# tar -zxvf mod_ssl-2.8.14-1.3.27.tar.gz
o openssl & mm
============
Na pierwszy ogien pojdzie kompilacja openssl oraz biblioteki 'mm'
# cd openssl-0.9.7b
# ./config
# make ; make install
# cd ../mm-1.3.0
# ./configure --prefix=/usr/local/mm ; make
# make test
# make install
Edytujemy plik ze sciezkami do bibliotek - /etc/ld.so.conf, dodajemy sciezke do
biblioteki 'mm', mozna tak:
echo "/usr/local/mm/lib" >>/etc/ld.so.conf ; ldconfig
o Apache
======
Nalezy teraz wstepnie uruchomic skrypt konfiguracyjny Apache`a z prefixem na sciezke,
najlepiej /usr/local/apache, lecz moze to byc dowolny inny katalog. Jednak zanim do
tego przystapimy, chcialbym zwrocic uwage na możliwosc zmiany banner`a czyli wersji
serwera, ktora jest wyswietlana przez Apache`a jesli w pliku konfiguracyjnym (ktory
teraz jeszcze nie istnieje) dyrektywa "ServerSignature" jest ustawiona na "on"
(ustawienie domyslne). Banner Apache`a mozna bez problemu "wyciagnac" nawet gdy w/w
dyrektywa jest nieaktywna (off).
# cd apache_1.3.28/src/include
Edytujemy plik "httpd.h", nalezy zmienic nastepujace linijki:
# cat httpd.h |grep "SERVER_BASE"
#define SERVER_BASEVENDOR "Apache Group"
#define SERVER_BASEPRODUCT "Apache"
#define SERVER_BASEREVISION "1.3.28"
Przykladowo po zmianie moga one wygladac tak:
#define SERVER_BASEVENDOR "moon station"
#define SERVER_BASEPRODUCT "CBN"
#define SERVER_BASEREVISION "1.3.3"
Zapisujemy zmiany, wracamy do katalogu głownego Apache`a i uruchamiamy skrypt
konfiguracyjny:
# ./configure --prefix=/usr/local/apache
Wchodzimy teraz w katalog z mod_ssl i podobnie jak wczesniej uruchamiamy skrypt
konfiguracyjny z prefixem na zrodla Apache`a:
# cd mod_ssl-2.8.15-1.3.28
# ./configure --with-apache=/usr/src/apache_1.3.28
Configuring mod_ssl/2.8.15 for Apache/1.3.28
./configure:Error: The mod_ssl/2.8.15 can be used for Apache/1.3.28 only.
./configure:Error: Your Apache source tree under /usr/src/apache_1.3.28 is version
1.3.3.
./configure:Hint: Please use an extracted apache_1.3.28.tar.gz tarball
./configure:Hint: with the --with-apache option, only.
i zatrzymujemy się. Skrypt konfiguracyjny sprawdza jaka wersja Apache`a jest w
podanym katalogu i wyrzuca blad jesli jest inna niż 1.3.28. Jednak my wiemy, że mamy
wlasciwa wersje, "poprawiamy" wiec skrypt:
# cat -n configure |grep "can be used" -n5
295- 295 grep "#define SERVER_BASEREVISION" |\
296- 296 sed -e 's/^[^"]*"//' -e 's/[" ].*$//'`
297- 297 fi
298- 298 if [ .$force != .yes ]; then
299- 299 if [ ".$V_APACHE" != ".$APV" ]; then
300: 300 echo "$0:${T_MD}Error${T_ME}: The mod_ssl/$V_MODSSL can be (..)
301- 301 echo "$0:${T_MD}Error${T_ME}: Your Apache source tree under (..)
302- 302 echo "$0:${T_MD}Hint${T_ME}: Please use an extracted (..)
303- 303 echo "$0:${T_MD}Hint${T_ME}: with the --with-apache option,(..)
304- 304 exit 1
305- 305 fi
zmiana ogranicza sie do usuniecia linijki 304 - zakonczenia skryptu w wypadku
niespelnienia warunku.
Tym sposobem zostanie wyswietlony blad ale skrypt bedzie kontynuowac dzialanie.
Ponownie uruchamiamy skrypt.
o MySQL
=====
Pora na instalację bazy danych:
# groupadd mysql ; useradd -d /var/lib/mysql -s /nologin -c mysql -g mysql mysql
# passwd -l mysql
# cd mysql-4.0.14
# ./configure --with-openssl --prefix=/usr/local/mysql
# make
# make install
# /usr/local/mysql/bin/mysql_install_db
mozna teraz uruchomic baze:
# chown -R mysql.mysql /usr/local/mysql/var
# /usr/local/mysql/bin/mysqld_safe &
# /usr/local/mysql/bin/mysqladmin ping
jesli po wpisaniu drugiej linijki otrzymamy komunikat "mysqld is alive", mozemy
ustawic haslo dla administratora mysql oraz dodac inicjacje bazy do skryptow
startowych:
# /usr/local/mysql/bin/mysqladmin -u root password twoje_haslo
# echo "/usr/local/mysql/bin/mysqld_safe &" >>/etc/rc.d/rc.local
o PHP
===
nastepnie PHP:
# cd php-4.3.2
# ./configure --with-apache=/usr/src/apache_1.3.28 --with-mysql=/usr/local/mysql
# make
# make install
o Apache
======
Przenosimy sie znowu do katalogu Apache`a i finalnie konfigurujemy oraz kompilujemy
?ródła:
# cd apache_1.3.28
# SSL_BASE=/usr/src/openssl-0.9.7b
# EAPI_MM=/usr/local/mm
# cp /usr/src/php-4.3.2/libs/libphp4.a /usr/src/apache_1.3.28/src/modules/php4/
# ./configure --enable-module=ssl --prefix=/usr/local/apache \
--enable-module=rewrite --enable-shared=rewrite \
--activate-module=src/modules/php4/libphp4.a
# make
Kopiujemy plik konfiguracyjny PHP do katalogu Apache`a:
# cp /usr/src/php-4.3.2/php.ini-dist /usr/local/lib/php.ini
Doszlismy do momentu, w ktorym najlepiej jest przygotowac certyfikaty dla
naszej witryny - przy czym mozna to zrobic na kilka roznych sposobow - korzystajac z
gotowego skryptu do tworzenia takowych, badz 'recznie' openssl`em. W pierwszym
przypadku mamy do wyboru:
make certificate TYPE=dummy (dummy self-signed Snake Oil cert)
make certificate TYPE=test (test cert signed by Snake Oil CA)
make certificate TYPE=custom (custom cert signed by own CA)
make certificate TYPE=existing (existing cert)
Badz 'make certificate' bez dodatkowych parametrow. Jezeli chcemy byc sami dla siebie
instytucja wydajaca certyfikaty, nalezy wybrac "make certificate TYPE=custom" badz
wygenerowac recznie, w innym przypadku wystarczy samo "make certificate".
Jesli chcemy wygenerowac certyfikaty nie uzywajac skryptu dolaczanego do Apache`a
wpisujemy kolejno:
# /usr/src/openssl-0.9.7b/apps/CA.sh -newca
# /usr/src/openssl-0.9.7a/apps/CA.sh -newreq
# /usr/src/openssl-0.9.7a/apps/CA.sh -sign
Zostaniemy zapytani o szczegoly dot. certyfikatow i w ostatnim kroku podpisanie
certyfikatow.
Osobiscie polecam pierwsza metode:
# make certificate TYPE=custom
podobnie jak w pierwszym przypadku, wybieramy rodzaj szyfrowania, podajemy dane
odnosnie certyfikatow i kodujemy klucze, do zdekodowania ich potrzebne bedzie haslo,
ktore bedzie trzeba podac podczas tworzenia certyfikatow.
Nowo utworzone certyfikaty znajduja sie odpowiednio w:
- conf/ssl.key/ca.key
- conf/ssl.crt/ca.crt
- conf/ssl.key/server.key
- conf/ssl.crt/server.crt
- conf/ssl.csr/server.csr
Nadszedl czas na instalacje:
# make install
Jesli wszystko poszlo jak nalezy, mozna uruchomic serwer.
Przed uruchomieniem trzeba bedzie podac haslo, ktore wybralismy wczesniej:
# /usr/local/apache/bin/apachectl startssl
Enter pass phrase:
Ok: Pass Phrase Dialog successful.
../bin/apachectl startssl: httpd started
Mozna jeszcze sprawdzic czy napewno wszystko jest w porzadku telnetujac sie na oba
porty:
# telnet 0 80
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
. <- wpisać cokolwiek
(...)
CBN/1.3.3 Server at 62.233.240.203 Port 80(...)
# telnet 0 443
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
Serwer wystartowal. Zajmiemy sie teraz czescia konfiguracyjna.
Plik konfiguracyjny Apache`a znajduje sie domyslnie w katalogu /usr/local/apache/conf -
httpd.conf - Nie bede opisywac wszystkich dyrektyw dla Apache`a gdyz odpowiednie
komentarze sa (w języku angielskim) w samym pliku, tak wiec ogranicze sie tylko do
najistotniejszych wg mnie sekcji.
o httpd.conf
==========
Najpierw zajmijmy sie samym Apache`m:
Aby PHP wspoldzialalo z Apache`m musimy pod linil "AddModule mod_php4.c" dodac
nastepujace linie:
AddType application/x-httpd-php .php4 .phtml .php .php3
AddType application/x-httpd-php-source .phps
AddType application/x-httpd-php3 .php3
AddType application/x-httpd-php3-source .phps
Dobrze jesli dopiszemy indexy w formacie *php do szukanych domyslnie dokumentow przy
odwolaniu do zasobow:
DirectoryIndex index.html index.php index.php3
Ponizsze dwie linie definiuja uzytkownika, z prawami ktorego Apache rozpocznie swoje
działanie:
User nobody
Group nobody
domyslne ustawienia sa bezpieczne jednak u mnie Apache pracuje jako
uzytkownik 'www', tak wiec jesli chcemy dodac grupe i uzytkownika specjalnie dla
Apache`a, dodajemy go nastepujaco:
# groupadd www
# useradd -s /nologin -c www -g www www ; passwd -l www
Mozemy zdefiniowac wlasne informacje, wyswietlane w zalezno?ci od kodu bledu, ponizej
umieszczam takze liste oznaczen numerycznych zwracanych przez serwer:
HTTP_CONTINUE 100 - zadanie kontynuacji
HTTP_SWITCHING_PROTOCOLS 101 - zmiana protokolu
HTTP_OK 200 - operacja wykonana pomyslnie
HTTP_CREATED 201 - zadany zasob utworzono
HTTP_ACCEPTED 202 - zadanie przyjete
HTTP_NON_AUTHORITATIVE 203 - odpowiedz pochodzi z innego serwera
HTTP_NO_CONTENT 204 - brak nowej informacji do przekazania
HTTP_RESET_CONTENT 205 - zadanie usuniecia bierzacej zawartosci
HTTP_PARTIAL_CONTENT 206 - przekazano odpowiedz typu czesciowego
HTTP_MULTIPLE_CHOICES 300 - zadaniu odpowiada >1 dokument
HTTP_MOVED_PERMANENTLY 301 - dokument przeniesiono na stale
HTTP_MOVED_TEMPORARILY 302 - dokument przeniesiono tymczasowo
HTTP_SEE_OTHER 303 - wskazanie aktualnego polozenia dokumentu
HTTP_NOT_MODIFIED 304 - dokument nie byl modyfikowany
HTTP_USE_PROXY 305 - zadanie uzycia serwera posredniczacego
HTTP_TEMPORARY_REDIRECT 307 - zadania czasowo przeadresowane
HTTP_BAD_REQUEST 400 - bledne zadanie
HTTP_UNAUTHORIZED 401 - bledna autoryzacja
HTTP_PAYMENT_REQUIRED 402 - dostep platny
HTTP_FORBIDDEN 403 - brak dostepu do zasobu
HTTP_NOT_FOUND 404 - strona nie istnieje
HTTP_METHOD_NOT_ALLOWED 405 - metoda niedozwolona
HTTP_NOT_ACCEPTABLE 406 - klient nie akceptuje formatu dokumentu
HTTP_PROXY_AUTHENTICATION_REQUIRED 407 - wymagana autoryzacja na s. posredniczacych
HTTP_REQUEST_TIME_OUT 408 - limit czasu przekroczony
HTTP_CONFLICT 409 - konflikt zadania
HTTP_GONE 410 - adres nie istnieje
HTTP_LENGTH_REQUIRED 411 - wymagane okreslenie rozmiaru zadanego zasobu
HTTP_PRECONDITION_FAILED 412 - niepowodzenie testu warunkowego
HTTP_REQUEST_ENTITY_TOO_LARGE 413 - zadany dokument jest zbyt duzy
HTTP_REQUEST_URI_TOO_LARGE 414 - zadany identyfikator URI jest zbyt dlugi
HTTP_UNSUPPORTED_MEDIA_TYPE 415 - bledny format tresci zadania
HTTP_EXPECTATION_FAILED 417 - niemozliwe spełnienie wymogow naglowka
HTTP_INTERNAL_SERVER_ERROR 500 - wewnetrzny blad serwera
HTTP_NOT_IMPLEMENTED 501 - funkcja niezaimplementowana
HTTP_BAD_GATEWAY 502 - blad w komunikacji z brama
HTTP_SERVICE_UNAVAILABLE 503 - uslugi serwera sa niedostepne
HTTP_GATEWAY_TIME_OUT 504 - blad przeterminowania bramy
HTTP_VERSION_NOT_SUPPORTED 505 - nieobslugiwana wersja protokolu HTTP
ErrorDocument 500 "internal server error.
ErrorDocument 404 /404.html
przy czym lokalizacja 404.html w tym przypadku wskazuje na glowny katalog w drzewie
Apache`a. Jesli wiec zdecydowalismy sie umiescic nadkatalog np. w /home/www, w pliku
konfiguracyjnym bedzie to wygladac tak:
DocumentRoot "/home/www"
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
czyli lokalizacja np. '/home/www/404.html' dla apacza będzie '/404.html'.
Jak zrobic wirtualnego web hosta z wykorzystaniem serwera DNS:
przypuscmy sytuacje, w ktorej mamy wydelegowana domene/subdomene (dla przykladu
dr00t.org (zakladam, ze masz juz poprawnie skonfigurowana strefe dla domeny)) na
wlasny serwer DNS i chcemy utworzyc web vhosta o nazwie home.dr00t.org, ktory bedzie
wskazywal na 62.62.62.62. Najpier dodajemy rekord IN A w strefie domeny:
home IN A 62.62.62.62
zwiekszamy numer seryjny strefy +1, zapisujemy i restartujemy serwer DNS.
Przechodzimy do konfiguracji w httpd.conf:
NameVirtualHost *
DocumentRoot /home/www
ServerName dr00t.org
NameVirtualHost www.dr00t.org
DocumentRoot /home/www
ServerName www.dr00t.org
Jak widac - pierwsze dwa wpisy nie sa wlasciwymi vhostami, odnosza sie do adresu
bazowego, mozna teraz dodac naszego vhosta:
NameVirtualHost home.dr00t.org
ServerName home.dr00t.org
W przypadku gdy web vhost nie odnosi sie do zdalnego hosta a definiuje tylko
alternatywny katalog nadrzedny, nalezy dodac dyrektywe "DocumentRoot". Mozna takze
dodac osobna obsluge bledow, indywidualne logi itp.
Prosta autoryzacja dla wybranych zasobow:
zalozmy, ze chcemy ograniczyc dostep do adresu www.dr00t.org/poufne/
autentykacja typu "Basic" odbywa się na poziomie user/pass i jest najczesciej
stosowana, edytujemy plik httpd.conf i pod dyrektywa "AccessFileName" dodajemy:
AuthType Basic
AuthName "strefa ograniczona: poufne"
AuthUserFile /home/www/poufne/.hasla
require valid-user
zapisujemy zmiany i restartujemy Apache`a, nalezy utworzyc plik z haslami:
# htpasswd -c /home/www/poufne.hasla user
gdzie parametr -c używamy podczas tworzenia pliku z haslami, przy dodawaniu kolejnych
uzytkownikow pomijamy go, gdyz w przeciwnym wypadku dotychczasowa zawartosc
zostanie usunieta.
o php.ini
=======
Konfiguracje PHP ogranicze do wzmianki o jednej dyrektywie poniewaz dla typowych
instalacji PHP jest gotowe do dzialania odrazu po zainstalowaniu bez specjalnych
poprawek.
Plik konfiguracyjny dla PHP skopiowalismy wczesniej do katalogu
/usr/local/lib/php.ini
Jesli niektore skrypty PHP nie dzialaja chociaz sa poprawne, mozemy uaktywnic
dyrektywe "register_globals":
register_globals = On
W celach diagnostycznych mozna utworzyc strone (np info.php), ktora zawiera:
phpinfo();
?>
po wejsciu na taka strone zobaczymy wszystkie detale dotyczace serwera www jak i samego
PHP.
o Poslowie
========
Ten artykul z pewnoscia nie wyczerpuje tematu jakim jest serwer Apache wraz z dodatkami,
mysle jednak, ze ukazuje po czesci olbrzymie mozliwosci Apache`a, - najczesciej
uzywanego serwera WWW na awiecie. Goraco zachecam do poczytania ponizszych
informacji, do ktorych sa linki, jako uzupelnienie.
o Dodatkowe informacje
====================
Odnosniki do informacji, ktorych tutaj nie zawarlem lub zostaly opisane czesciowo,
znajduja sie ponizej:
Apache
------
http://httpd.apache.org/docs/mod/directives.html
- Skladnia i opis wszystkich dyrektyw, wystepujacych w Apache`u,
http://httpd.apache.org/docs/mod/
- Opis wszystkich modulow, dolaczonych standardowo do Apache`a,
http://httpd.apache.org/docs/misc/security_tips.html
- Nieco na temat bezpieczenstwa,
http://httpd.apache.org/docs/misc/FAQ.html
- Obszerne FAQ Apache`a
PHP
---
http://www.php.net/manual/pl/
- Obszerny podrecznik PHP,
http://pl2.php.net/FAQ.php
- PHP FAQ
MySQL
-----
http://www.mysql.com/documentation/index.html
- Potezny zbior informacji o MySQL
mod_ssl
-------
http://www.modssl.org/docs/
- Dokumentacja do mod_ssl
Z dedykacja dla Arweny.
edytor: pico, 04.08.2003
autor: asmo
http://www.moon-station.us/pgp.txt
Wyszukiwarka
Podobne podstrony:
apache ssl php fp 2 a6wmm6o7jch7nwo37ub2lqodr5ktjopce4tutyy a6wmm6o7jch7nwo37ub2lqodr5ktjopce4tutyy
apache ssl php fp 3 setl3meh3r4so27tbhz7zy5s7mjgoxrr5hjiaay setl3meh3r4so27tbhz7zy5s7mjgoxrr5hjiaay
Apache SSL PHP fp
Apache SSL PHP fp BWXW6EXHMYHS66TNQ5BAYEODMQSKYBA5JQA5CZI
apache ssl php fp 1 m3p53ugv7shuybs6xw6to4hcu5wuxx64jiivpdi m3p53ugv7shuybs6xw6to4hcu5wuxx64jiivpdi
Apache i skrypty PHP
Instalacja i konfiguracja Apache SSL
Konfiguracja serwera Apache, SSL w systemie GNU Linux
Linux Apache MySQL i PHP Zaawansowane programowanie lapzap
apache php ssl
Linux Web Solution php mySql Apache
Building Apache, MySQL, and PHP on Mac OS X
instalacja i konfiguracja apache 2 2 z php 5 x pod windows xp eioba
PHP MySQL i Apache dla kazdego Wydanie II pmsadk
więcej podobnych podstron