Apache2

Z openSUSE wiki

Plik:160px-ASF-logo.svg.png

Spis treści

Uwagi

  1. W tym FaQ będziemy używać adresu localhost zamiast 127.0.0.1
  2. W FaQ posługujemy się loginem: kris oraz nazwą hosta: sphinx lub sphinx.egipt.pl
  3. Zamiast plików *.php możemy używać również plików *.html lub *.htm

Instalacja Apache2 na openSUSE 11.3 Plik:kameleonek.png

Aby zainstalować najnowszą stabilną wersję Apache2 na openSUSE 11.3 należy dodać nowe źródła instalacji do Yast:

# zypper addrepo http://download.opensuse.org/repositories/Apache/openSUSE_11.3/ Apache

oraz:

# zypper addrepo http://download.opensuse.org/repositories/Apache:/Modules/Apache_openSUSE_11.3/ Apache_Modules

Najprostsza instalacja serwera Apache, to zainstalowanie go ze wzorców w Yast2.

Po instalacji, aby sprawdzić wersję pakietów posługujemy się poleceniem:

kris@sphinx:~> rpm -qa | grep apache

Jeśli chcemy sprawdzić, gdzie znajdują się poszczególne pliki, wydajemy komendę:

kris@sphinx:~> rpm -ql apache2-2.2.15-18.1 | less
/etc/apache2
/etc/apache2/conf.d
/etc/apache2/httpd.conf
/etc/init.d/apache2
[...]

Główny plik uruchamiający usługę Apache, znajduje się w:

sphinx:~ # ls -ltr /etc/init.d/ | grep apache
-rwxr--r-- 1 root root 10635 07-13 08:13 apache2



Uruchomienie, zatrzymanie i restart usługi

Uruchomienie:

sphinx:~ #  /etc/init.d/apache2 start
Starting httpd2 (prefork)                                                   done

Zatrzymanie:

sphinx:~ #  /etc/init.d/apache2 stop
Shutting down httpd2 (waiting for all children to terminate)                done

Restart:

sphinx:~ #  /etc/init.d/apache2 restart
Syntax OK
Shutting down httpd2 (waiting for all children to terminate)                done
Starting httpd2 (prefork)                                                   done



Połączenie sie z usługą apache

Aby wyświetlić wszystkie aktywne połączenia internetowe (ang. Active Internet connections servers and established)

kris@sphinx:~> netstat -ant

lub tylko na porcie 80:

 kris@sphinx:~>  netstat -ant | grep "80"
tcp        0      0 :::80                   :::*                    LISTEN

Sprawdźmy w najprostszy sposób czy jesteśmy w stanie połączyć się z portem 80:

kris@sphinx:~> telnet localhost 80
Trying ::1... 
Connected to localhost.
Escape character is '^]'.

Wszystko jest OK

Dodatki

Examples

Jeśli nie mamy zainstalowanego pakietu apache2-example-pages to po wpisaniu w pasku adresu w przeglądarce http://localhost/ powinna ukazać nam się:

Zabroniony dostęp!
Nie masz prawa dostępu do żądanego katalogu. W katalogu nie ma indeksu lub katalog jest zabezpieczony przed odczytem.
Jeśli myślisz, że jest to błąd tego serwera, skontaktuj się z administratorem.
Error 403
localhost
Mon Feb 8 22:58:37 2010
Apache/2.2.13 (Linux/SUSE) 

Jeśli doinstalujemy pakiet apache2-example-pages, powinna ukazać nam się informacja:

It works!

W pakiecie tym, tzn. apache2-example-pages znajdują się następujące pliki:

sphinx:/var/log/apache2 # rpm -ql apache2-example-pages
/srv/www/htdocs/favicon.ico
/srv/www/htdocs/index.html
/srv/www/htdocs/robots.txt

I to właśnie w pliku index.html, który domyślnie się załaduje znajduje się informacja "It works!"

Manual

W przeglądarce pod adresem http://localhost/manual powinna znajdować się dokumentacja Apache Server. Jeśli wyświetla nam się pozycja "Zabroniony dostęp!" oznacza to, że musimy doinstalować pakiet apache2-doc

sphinx:/var/log/apache2 # rpm -ql apache2-doc
/etc/apache2                                 
/etc/apache2/conf.d                          
/etc/apache2/conf.d/apache2-manual.conf      
/usr/share/apache2/manual 
[...]

Jeśli chcemy zablokować manual dla wszystkich userów, to musimy edytować plik apache2-manual.conf znajdujący się w:

sphinx:/etc/apache2/conf.d # emacs apache2-manual.conf

i zmienić pozycję:

Allow from all

na pozycję:

Deny from all

Aby ustawienia zadziałały musimy zrebootować serwer:

sphinx:~ # /etc/init.d/apache2 restart

Teraz po wpisaniu w przeglądarkę adresu http://localhost/manual/ powinna ukazać nam się informacja:

Zabroniony dostęp!


Logi

Sprawdźmy gdzie znajdują się logi apacha:

sphinx:~ # cd /var/log/apache2
sphinx:/var/log/apache2 # ls -la
total 24
drwxr-x---  2 root root 4096 Feb  3 11:02 .
drwxr-xr-x 25 root root 4096 Feb  8 20:37 ..
-rw-r--r--  1 root root  522 Feb  8 22:34 access_log
-rw-r--r--  1 root root 5287 Feb  8 22:34 error_log
-rw-r--r--  1 root root   10 Feb  8 22:27 rcapache2.out

Sprawdźmy w najprostszy sposób działanie. W przeglądarce w pasku adresu wpisujemy localhost. Wyświetla nam się pozycja "It works!" czyli wszystko OK. Natomiast w momencie gdy w pasku adresu wpisujemy adres nieistniejącego adresu, np. http://localhost/index.php automatycznie w logach pojawia nam się zapis typu:

sphinx:/var/log/apache2 # tail -f access_log
::1 - - [08/Feb/2010:22:39:59 +0000] "GET /index.php HTTP/1.1" 404 1050 "-" "Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.2.0) Gecko/20100115 SUSE/3.6.0-1.2 Firefox/3.6"

oraz:

sphinx:/var/log/apache2 # tail -f error_log
[Mon Feb 08 22:39:59 2010] [error] [client ::1] script '/srv/www/htdocs/index.php' not found or unable to stat



Pliki konfiguracyjne

Sprawdźmy sysconfig w konsoli:

sphinx:/var/log/apache2 # cd /etc/sysconfig
sphinx:/etc/sysconfig # ll apache2
-rw-r--r-- 1 root root 10312 Feb  8 22:27 apache2

Sprawdźmy plik konfiguracyjny apache2:

sphinx:/etc/sysconfig # less apache2

W pliku tym znajdują się takie pozycje, jak:

 DOC_SERVER="no"
 APACHE_CONF_INCLUDE_FILES=""
 APACHE_CONF_INCLUDE_DIRS=""
 APACHE_MODULES="authz_host actions alias auth_basic authz_groupfile authn_file authz_user autoindex cgi dir env expires include log_config mime negotiation setenvif status userdir dav echo info rewrite ssl php5 perl python apparmor dav_svn authz_svn authz_default"
 APACHE_SERVER_FLAGS="SSL"
 APACHE_HTTPD_CONF=""
 APACHE_MPM=""
 APACHE_SERVERADMIN=""
 APACHE_SERVERNAME=""
 APACHE_START_TIMEOUT="2"
 APACHE_SERVERSIGNATURE="on"
 APACHE_LOGLEVEL="warn"
 APACHE_ACCESS_LOG="/var/log/apache2/access_log combined"
 APACHE_USE_CANONICAL_NAME="off"
 APACHE_SERVERTOKENS="OS"
 APACHE_EXTENDED_STATUS="off"

Ta sama konfiguracja znajduje się w Yast oraz Yast2 w "Edytor /etc/sysconfig" w Network->WWW->Apache2. Dla przykładu zmieńmy opcję APACHE_SERVERTOKENS="OS" na "FULL". Poprzednie informacje, czyli:

Zabroniony dostęp!
Nie masz prawa dostępu do żądanego katalogu. W katalogu nie ma indeksu lub katalog jest zabezpieczony przed odczytem.
Jeśli myślisz, że jest to błąd tego serwera, skontaktuj się z administratorem.
Error 403
localhost
Mon Feb 8 22:58:37 2010
Apache/2.2.13 (Linux/SUSE) 

zostały zmienione, na:

Nie znaleziono obiektu!
Nie znaleziono żądanego URLa na tym serwerze. Jeśli wpisałeś URLa ręcznie, sprawdź, czy nie się nie pomyliłeś.
Jeśli myślisz, że jest to błąd tego serwera, skontaktuj się z administratorem.
Error 404
localhost
Tue Feb 9 00:49:45 2010
Apache/2.2.13 (Linux/SUSE) DAV/2 mod_ssl/2.2.13 OpenSSL/0.9.8k PHP/5.3.0 mod_python/3.3.1 Python/2.6.2 SVN/1.6.6 mod_mono/2.4.2 mod_perl/2.0.4 Perl/v5.10.0 

Tak więc posiadamy pełne informacje dotyczące serwera. Należy jednak pamiętać, iż takie ustawienie nie jest bezpieczne. Najbezpieczniejszą opcją jest, np. Major lub ProductOnly, ponieważ pokazuje minimalne informacje dotyczące serwera.



Innym plikiem konfiguracyjnym jest:

sphinx:/etc/sysconfig # cd /etc/apache2

bardzo ważny plik httpd.conf

sphinx:/etc/apache2 # ls -la | grep httpd.conf
-rw-r--r--   1 root root  8323 Oct 27 16:51 httpd.conf

Poniżej przedstawiony jest schemat chronologiczny, jakie pliki konfiguracyjne zostały dołączone w pliku httpd.conf za pomocą instrukcji "include".

httpd.conf
 | 
 |-- uid.conf                            ... Użytkownik wwwrun oraz grupa www
 |-- server-tuning.conf
 |-- sysconfig.d/loadmodule.conf         ... Załadowane moduły
 |-- listen.conf                         ... Adresy IP oraz nasłuchujący port 80
 |-- mod_log_config.conf
 |-- sysconfig.d/global.conf
 |-- mod_status.conf
 |-- mod_info.conf
 |-- mod_usertrack.conf
 |-- mod_autoindex-defaults.conf
 |-- mod_mime-defaults.conf 
 |-- errors.conf
 |-- ssl-global.conf
 |-- default-server.conf
 |    |--mod_userdir.conf 
 |    `--conf.d/apache2-manual?conf
 |-- sysconfig.d/include.conf
 `-- vhosts.d/ 
      `-- *.conf 

Np.W pliku httpd.conf za pomocą instrukcji

Include /etc/apache2/listen.conf

został dołączony plik listen.conf odpowiedzialny za adresy IP oraz nasłuchujące porty:

sphinx:/etc/apache2 # less listen.conf
Listen 80

Wszystko zostało ładnie opisane w tych plikach, który plik oraz która pozycja jest za co odpowiedzialna. Potrzeba nam jedynie chwili czasu oraz znajomości j. angielskiego, aby znaleźć to co nas najbardziej interesuje (w zależności od potrzeb). Dla osób, które nie orientują się w tym polecam przejrzenie wszystkich plików konfiguracyjnych.

Localhost oraz Hostname

Uwaga! Zamiast localhost w adresie przeglądarki możemy posłużyć się nazwą hosta:

sphinx:/etc/apache2/sysconfig.d # cat /etc/HOSTNAME
sphinx.egipt.pl

Skoro wiemy już, że nazwa hosta to sphinx.egipt.pl (nie mylić z domeną), więc wpiszmy w przeglądarkę ten adres http://sphinx.egipt.pl/ Jak widzimy stona wyświetla nam się poprawnie, czyli "It works".



Sekcja DirectoryIndex i domyślna strona

Z katalogu /srv/www/htdocs wykasujmy wszystkie plik index.html, index.htm oraz index.php Założymy nowy plik strona.php o prostej treści:

<html>
<title>Moja strona</title>
<body>
To jest plik:
strona.php
</body>
</html>

Aby w pasku adresu nie wpisywać pełnej nazwy,tj. http://sphinx.egipt.pl/strona.php lub http://localhost/strona.php to wstawiamy do pliku:

sphinx:/etc/apache2 # emacs httpd.conf

w sekcji DirectoryIndex nową pozycję strona.php:

DirectoryIndex index.html index.html.var index.php strona.php

Restartujemy serwer:

sphinx:/etc/apache2/sysconfig.d # rcapache2 reload
Reload httpd2 (graceful restart)                                         done

W przeglądarce wpisujemy adres http://sphinx.egipt.pl/ lub http://localhost/ Świetnie! Wyświetliła się nam informacja:

To jest plik: strona.php 


Uwaga! Jeśli na serwerze mamy więcej stron, to musimy posegregować to sobie w katalogach. Załóżmy, że mamy dwie strony, więc potrzebne są nam dwa odrębne katalogi:

sphinx:/srv/www/htdocs # mkdir strona1
sphinx:/srv/www/htdocs # mkdir strona2

Zakładamy w tych folderach inne pliki o jedej z nazw: index.html, index.html.var, index.php lub strona.php zawartych w sekcji DirectoryIndex. Teraz wyświetlenie takiej strony będzie wyglądało odpowiednio:

http://sphinx.egipt.pl/strona1/ lub http://localhost/strona1/
http://sphinx.egipt.pl/strona2/ lub http://localhost/strona2/


Uwaga! Jak widzimy poniżej pierwszą pozycją jest index.html a ostatnią strona.php

DirectoryIndex index.html index.html.var index.php strona.php

i tak właśnie w takiej kolejności serwer będzie wyszukiwał plików, np. jeśli umieścimy w katalogu strona1 dwa pliki index.php oraz strona.php to przy powyższym ustawieniu w DirectoryIndex pierwszy uruchomi się index.php



Mod Alias

Co to jest alias? W skrócie jest to pewna funkcja systemowa umożliwiająca skrócenie i uproszczenie nazewnictwa.


1. Na naszym serwerze utworzymy nowy alias "nowastrona1", który będzie nowym aliasem strony "strona1" znajdującym się w /srv/www/htdocs/strona1

Otwieramy plik httpd.conf

sphinx:/etc/apache2 # emacs httpd.conf

i dopisujemy na samym końcu nasz nowy alias:

# Testowy Mod Alias
# Alias fakename realname
Alias /nowastrona1 /srv/www/htdocs/strona1

Rebootujemy serwer:

sphinx:~ # rcapache2 reload
Reload httpd2 (graceful restart)                         done


Od tej pory dostępne strony, to będą:

http://localhost/strona1/
http://sphinx.egipt.pl/strona1/
http://localhost/nowastrona1/
http://sphinx.egipt.pl/nowastrona1/

Uwaga! Przypomnijmy, że nie musimy wpisywać na samym końcu plików index.php oraz strona.php ponieważ zostały one dopisane do DirectoryIndex.


2. Na naszym serwerze utworzymy nowy alias "ns", który będzie nowym aliasem strony "strona1" znajdującym się w /usr/local/testapaczi

Otwieramy plik httpd.conf

sphinx:/etc/apache2 # emacs httpd.conf

i dopisujemy na samym końcu nasz nowy alias z nowymi dyrektywami uprawnień Directory:

#Bez dyrektywy Directory strona nie będzie dostępna
Alias /ns /usr/local/testapaczi
<Directory /usr/local/testapaczi>
 AllowOverride None
 Order allow,deny
 Allow from all
</Directory>

Wykonujemy działania kopiowania:

sphinx:~ # cd /usr/local
sphinx:/usr/local # mkdir testapaczi
sphinx:/usr/local # cd testapaczi/
sphinx:/usr/local/testapaczi # cp /srv/www/htdocs/strona1/index.php .

Oraz restartujemy usługę:

sphinx:~ # rcapache2 reload
Reload httpd2 (graceful restart)                         done

Od tej pory dostępnymi stronami będą:

http://localhost/strona1/
http://sphinx.egipt.pl/strona1/
http://localhost/nowastrona1/
http://sphinx.egipt.pl/nowastrona1/            
http://localhost/ns                      //ta strona jest de facto w /usr/local/testapaczi
http://sphinx.egipt.pl/ns                //ta strona jest de facto w
/usr/local/testapaczi



Moduł userdir

Opcja ta służy do tego, aby normalny user mógł tworzyć swoją stronę internetową w swoim folderze domowym, bez wykorzystywania konta root.

Aby włączyć moduł userdir wchodzimy do Yast -> Usługi sieciowe -> Serwer HTTP -> Moduły serwera i wyszukujemy moduł userdir a następnie uruchamiamy go.

Oraz restartujemy usługę:

sphinx:~ # rcapache2 reload
Reload httpd2 (graceful restart)                         done

Wykonujemy następujące operacje (już nie z konta root!):

kris@sphinx:/usr/local> cd /home/kris/public_html/
kris@sphinx:~/public_html> emacs index.php

W pliku index.php umieszczamy jakiś prosty tekst, np.

<html>
 <title>Moja strona w katalogu domowym</title>
 <body>
   To jest plik: /home/kris/public_html/index.php
 </body>
</html>

W przeglądarce wpisujemy http://localhost/~kris/

Wyświetla nam się informacja:

To jest plik: /home/kris/public_html/index.php 

Ustawienia userdir możemy znaleźć w pliku /etc/apache2/mod_userdir.conf Jeśli chcemy wyłączyć userdir to musimy odznaczyć pozycję:

UserDir disabled

lub też tylko dla poszczególnych userów włączyć, np:

UserDir enabled kris user2 user3


Directory Directive (drzewo plików) oraz uprawnienia

Z pliku /etc/apache2/httpd.conf wycinamy wszystkie aliasy do pliku /etc/apache2/default-server.conf oraz dodajemy sekcję

Options Indexes

Wygląda to tak:

# Test Mod Alias
# Alias fakename realname
Alias /nowastrona1 /srv/www/htdocs/strona1
Alias /nowastrona1 /srv/www/htdocs/strona2
Alias /nowastrona3 /srv/www/htdocs/strona3
<Directory /srv/www/htdocs/strona3>
 AllowOverride None
 Options Indexes
 Order allow,deny
 Allow from all
</Directory>

Zakładamy folder pod nową stronę, czyli strona3 w:

sphinx:/srv/www/htdocs # mkdir strona3

Oraz restartujemy usługę:

sphinx:~ # rcapache2 reload
Reload httpd2 (graceful restart)                         done

W przeglądarce wpisujemy nowy adres:

http://localhost/strona3

Jeśli w folderze strona3 posiadamy jakieś pliki inne niż w sekcji DirectoryIndex:

sphinx:/srv/www/htdocs/strona3 # grep DirectoryIndex /etc/apache2/httpd.conf
DirectoryIndex index.html index.html.var index.php strona.php

to wyświetli nam się informacja z drzewem plików.:

Index of /strona3
Icon  Name                    Last modified      Size  Description[DIR]
Parent Directory                             -   
...
Apache Server at localhost Port 80

Jeśli teraz skopiujemy pliki index.php oraz strona.php do:

sphinx:/srv/www/htdocs # cp /srv/www/htdocs/strona1/*.* /srv/www/htdocs/strona3

a plikach strona.php oraz index.php zmieniamy stosownie informacje na:

<html>
<title>Moja strona3</title>
<body>
 To jest plik: strona3/strona.php
</body>
</html>

oraz

<html>
<title>Moja strona3</title>
<body>
 To jest plik: strona3/index.php
</body>
</html>

To nie wyświetli nam się już drzewo plików, tylko:

To jest plik: strona3/index.php

ponieważ w sekcji DirectoryIndex pierwszy znajduje index.php




Przykład 1

W katalogu /srv/www/htdocs/strona3 tworzymy nowy folder testowy, np. test

sphinx:/srv/www/htdocs/strona3 # mkdir test

Teraz jeśli wpiszemy w przeglądarkę adres:

http://localhost/strona3/test

to uruchomi nam się drzewo plików. Jednak takie ustawienie nie jest bezpieczne, ponieważ być może, np. w rzeczywistości możemy mieć tam jakieś ważne pliki, a do których nie chcemy aby mieli dostęp inni userzy, więc odbieramy uprawnienia indexowania dla folderu test pozostawiając dalej te same prawa dla folderu strona3


W tym celu edytujemy plik:

sphinx:/srv/www/htdocs/strona3 #  emacs /etc/apache2/default-server.conf

Dopisujemy w nim:


# Test Mod Alias
# Alias fakename realname
Alias /nowastrona1 /srv/www/htdocs/strona1
Alias /nowastrona1 /srv/www/htdocs/strona2
Alias /nowastrona3 /srv/www/htdocs/strona3
<Directory /srv/www/htdocs/strona3>
 AllowOverride None
 Options Indexes
 Order allow,deny
 Allow from all
</Directory>
<Directory /srv/www/htdocs/strona3/test>
 AllowOverride None
 Options -Indexes
 Order allow,deny
 Allow from all
</Directory>

Oraz restartujemy usługę:

sphinx:~ # rcapache2 reload
Reload httpd2 (graceful restart)                         done


Przykład 2

W katalogu /srv/www/htdocs/strona3 tworzymy nowy folder testowy, np. funkcje

sphinx:/srv/www/htdocs/strona3 # mkdir funkcje

oraz załużmy dwa nowe pliki w folderze funkcje:

sphinx:/srv/www/htdocs/strona3 # emacs plik1.php

o treści:

<html>
<title>plik1.php</title>
<body>
To jest strona3/funkcje/plik1.php
</body>
</html>

oraz

sphinx:/srv/www/htdocs/strona3 # emacs plik2.php

o treści:

<html> <title>plik2.php</title> <body> To jest strona3/funkcje/plik2.php </body> </html>

Teraz jeśli wpiszemy w przeglądarkę adres:

http://localhost/strona3/funkcje

to uruchomi nam się drzewo widocznych plików plik1.php oraz plik2.php. Chcemy jednak, np. aby z jakichś powodów widoczny był plik plik1.php natomiast nie chcemy aby plik2.php był widoczny oraz nie chcemy aby mieli dostęp do niego inni userzy, więc odbieramy uprawnienia dla pliku plik2.php

W tym celu edytujemy plik:

sphinx:/srv/www/htdocs/strona3 #  emacs /etc/apache2/default-server.conf

Dopisujemy w nim:

# Test Mod Alias
# Alias fakename realname
Alias /nowastrona1 /srv/www/htdocs/strona1
Alias /nowastrona1 /srv/www/htdocs/strona2
Alias /nowastrona3 /srv/www/htdocs/strona3
<Directory /srv/www/htdocs/strona3>
 AllowOverride None
 Options Indexes
 Order allow,deny
 Allow from all
</Directory>
<Directory /srv/www/htdocs/strona3/test>
 AllowOverride None
 Options -Indexes
 Order allow,deny
 Allow from all
</Directory>
<Directory /srv/www/htdocs/strona3/funkcje>
 AllowOverride None
 Options Indexes
 Order allow,deny
 Allow from all
  <Files plik2.php>
   AllowOverride None
   Order deny,allow
   Deny from all
  </Files>
</Directory>


Oraz restartujemy usługę:

sphinx:~ # rcapache2 reload
Reload httpd2 (graceful restart)                         done



Przykład 3

W katalogu /srv/www/htdocs/strona3 oraz /srv/www/htdocs/strona3/test oraz /srv/www/htdocs/funkcje tworzymy nowe pliki: sphinx:/srv/www/htdocs/strona3 # emacs niewidoczny.php sphinx:/srv/www/htdocs/strona3 # cd test sphinx:/srv/www/htdocs/strona3/test # emacs niewidoczny.php sphinx:/srv/www/htdocs/strona3/test # cd .. sphinx:/srv/www/htdocs/strona3 # cd funkcje sphinx:/srv/www/htdocs/strona3/funkcje # emacs niewidoczny.php

o treści:

<html>
<title>Jestem niewidoczny</title>
<body>
Jestem niewidoczny
</body>
</html>

Teraz jeśli wpiszemy w przeglądarkę odpowiednie adresy:

http://localhost/strona3/
http://localhost/strona3/test
http://localhost/strona3/funkcje

to jedynie dla adresu funkcje będzie widoczny w drzewie plik niewidoczny.php Pod pierwszymi dwoma adresami plik widoczny będzie jedynie spod adresów:

http://localhost/strona3/niewidoczny.php
http://localhost/strona3/test/niewidoczny.php

My jednak chcemy aby pliki te były zypełnie niewidoczne, więc edytujemy plik:

sphinx:/srv/www/htdocs/strona3 #  emacs /etc/apache2/default-server.conf

więc dopisujemy w nim globalną opcję Files na samym końcu:

# Test Mod Alias
# Alias fakename realname
Alias /nowastrona1 /srv/www/htdocs/strona1
Alias /nowastrona1 /srv/www/htdocs/strona2
Alias /nowastrona3 /srv/www/htdocs/strona3
<Directory /srv/www/htdocs/strona3>
 AllowOverride None
 Options Indexes
 Order allow,deny
 Allow from all
</Directory>
<Directory /srv/www/htdocs/strona3/test>
 AllowOverride None
 Options -Indexes
 Order allow,deny
 Allow from all
</Directory>
<Directory /srv/www/htdocs/strona3/funkcje>
 AllowOverride None
 Options Indexes
 Order allow,deny
 Allow from all
  <Files plik2.php>
   AllowOverride None
   Order deny,allow
   Deny from all
  </Files>
</Directory>
  <Files niewidoczny.php>
   AllowOverride None
   Order deny,allow
   Deny from all
  </Files>


Oraz restartujemy usługę:

sphinx:~ # rcapache2 reload
Reload httpd2 (graceful restart)                         done


Przykład 4

Zakładamy nowy folder oraz tworzymy nową przykładową stronę:

sphinx:/srv/www/htdocs # mkdir strona4
sphinx:/srv/www/htdocs # cd strona4
sphinx:/srv/www/htdocs/strona4 # emacs index.php

o treści:

<html>
<title>Index</html>
<body>
 To jest plik strona4/index.php 
</body>
</html>

oraz edytujemy plik:

sphinx:/srv/www/htdocs/strona4 #  emacs /etc/apache2/default-server.conf

oraz umieszczamy w nim nasz (lub inny w zależności od potrzeb) adres IP:

Alias /nowastrona4 /srv/www/htdocs/strona4
<Directory /srv/www/htdocs/strona4>
 AllowOverride None
 Options None
 Order deny,allow
 Deny from all
 Allow from 192.168
</Directory>

Uwaga! Pozycja "Allow from 192.168" zezwala na dostęp wszystkich komputerów w sieci lokalnej do strony strona4


Oraz restartujemy usługę:

sphinx:~ # rcapache2 reload
Reload httpd2 (graceful restart)                         done


Teraz po wpisaniu w przeglądarkę naszego adresu http://192.168.2.22/nowastrona4/ wyświetli nam się strona o treści:

To jest plik strona4/index.php 

Natomiast dla adresu http://localhost/nowastrona4/ wyświetli się informacja:

Zabroniony dostęp!


HTTP Redirect (czyli przekierowania)

Edytujemy plik:

sphinx:/srv/www/htdocs/strona3 #  emacs /etc/apache2/default-server.conf

i dopisujemy w nim następujące linijki:

#Redirect URL
Redirect           /nowastrona1  http://google.pl/linux
RedirectPermanent  /nowastrona2  http://programowanie-linux.wikidot.com
RedirectTemp       /             http://forum.suse.pl

Oraz restartujemy usługę:

sphinx:~ # rcapache2 reload
Reload httpd2 (graceful restart)                         done

Teraz po wpisaniu w przeglądarce adresu http://localhost nastąpi przekierowanie na http://forum.suse.pl a po wpisaniu w przeglądarkę adresu http://localhost/nowastrona1 nastąpi przekierowanie na http://google.pl/linux

Uwaga! Zamiast domen możemy użyć adresów IP, np. 192.168.1.100



HTACCESS

Na jakiejś swojej przykładowej stronie zakładamy plik:

kris@sphinx:~/public_html> emacs .htaccess

o przykładowej treści:

Options +Indexes

oraz nadajemy odpowiednie prawa:

kris@sphinx:~/public_html> chmod 644 .htaccess

W pliku

sphinx:/etc/apache2 # emacs mod_userdir.conf

edytujemy linijkę:

AllowOverride FileInfo AuthConfig Limit Indexes Options

dopisując na końcu opcję Options

Sprawdzamy działanie strony.


Uwierzytelnienie, htpasswd2, htdigest2

Mamy 2 rodzaje uwierzytelniania:

  1. Basic Authentication
  2. MD5 Digest Authentication


Basic Authentication

Potrzebny nam będzie program htpasswd2:

sphinx:~ # which htpasswd2
/usr/bin/htpasswd2

Jeśli czegoś nie wiemy, to zawsze możemy posłużyć się pomocą:

sphinx:~ # htpasswd2 --help

Między innymi z pomocy możemy dowiedzieć się jak stworzyć nowy plik z hasłem:

sphinx:~ # htpasswd2 -c /etc/apache2/basic_auth kris
New password: okida
Re-type new password: okida
Adding password for user kris
sphinx:~ # cat /etc/apache2/basic_auth
kris:srGUXxAxYFtlg

Teraz zostało nam jedynie stworzenie nowej strony authentication (z aliasem: auth) oraz dopisaniem do pliku default-server.conf paru linijek

sphinx:~ # emacs /etc/apache2/default-server.conf
Alias /auth /srv/www/htdocs/authentication
<Directory /srv/www/htdocs/authentication>
 AllowOverride None
 Options Indexes
 Order allow,deny
 Allow from all
 AuthType Basic
 AuthName "Example"
 AuthUserFile /etc/apache2/basic_auth
 Require valid-user
</Directory>

Restartujemy apache2:

sphinx:~ # rcapache2 reload
Reload httpd2 (graceful restart)                                 done

W przeglądarce wpisujemy http://localhost/auth/ Powinno pojawić nam się okienko do zalogowania, typu:

Podaj nazwę użytkownika oraz hasło
Witryna http://localhost żąda podania nazwy użytkownika oraz hasła. Komunikat witryny "Example"
Użytkownik: kris
Hasło: okida


Notka: To samo możemy zrobić dla grupy. Należy jedynie zamienić 2 linijki:

 AuthUserFile /etc/apache2/basic_auth
 Require valid-user

na:

AuthGroupFile /etc/apache2/basic_group_auth
Require group authenticationgroup

oraz utworzyć nowy plik /etc/apache2/basic_group_auth z nowymi hasłami.


MD5 Digest Authentication

Teraz potrzebny nam będzie inny program:

sphinx:~ # which htdigest2
/usr/bin/htdigest2

Jeśli czegoś nie wiemy, to zawsze możemy posłużyć się pomocą:

sphinx:~ # htdigest2 --help
Usage: htdigest [-c] passwordfile realm username
The -c flag creates a new file.

Tak więc tworzymy nowy plik:

sphinx:~ # htdigest2 -c /etc/apache2/digest_auth ExampleDigest kris
Adding password for kris in realm ExampleDigest.
New password: burza&suse
Re-type new password: burza&suse
sphinx:~ # cat /etc/apache2/digest_auth
kris:ExampleDigest:2d0bd4ae3b30a1ad10c3b42f553adbef


Przykład ten zrobimy na tej samej stronie authentication2 (z aliasem: auth2) oraz z modyfikacją pliku default-server.conf

sphinx:~ # emacs /etc/apache2/default-server.conf
Alias /auth2 /srv/www/htdocs/authentication2
<Directory /srv/www/htdocs/authentication2>
 AllowOverride AuthConfig
 Options Indexes
 Order allow,deny
 Allow from all
 AuthType Digest
 AuthName "ExampleDigest"
 AuthUserFile /etc/apache2/digest_auth                              //lub AuthDigestFile
 Require valid-user
</Directory>

Restartujemy apache2:

sphinx:~ # rcapache2 reload
Reload httpd2 (graceful restart)                                 done

W przeglądarce wpisujemy http://localhost/auth2/ i tam powinno pojawić nam się okienko do zalogowania z userem oraz hasłem

Notka: Gdyby zdarzył się błąd przy reload apache2 to powinniśmy wejść w yast->http->moduły serwera i włączyć auth_digest