apache http server - proste i zaawansowane przypadki użycia

31
Apache HTTP Server proste i zaawansowane przypadki użycia Wojciech Lichota maj 2012

Upload: wojciech-lichota

Post on 08-Jun-2015

1.594 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Apache http server - proste i zaawansowane przypadki użycia

Apache HTTP Serverproste i zaawansowane przypadki użycia

Wojciech Lichotamaj 2012

Page 2: Apache http server - proste i zaawansowane przypadki użycia

Agenda

1. Wstęp2. Konfiguracja

● logowanie● konfiguracja SSL● serwowanie plików z dysku● serwowanie aplikacji (mod_rewrite, mod_wsgi)● konfiguracja cache w przeglądarce● autentykacja (htpasswd, ldap)

3. Optymalizacja ● mpm_prefork● mpm_worker● mpm + wsgi

Page 3: Apache http server - proste i zaawansowane przypadki użycia

Dlaczego?

● najpopularniejszy○ 65% serwerów○ 57% stron www

● dojrzały○ 1.0 - 1995○ 1.3 - 1998○ 2.0 - 2004○ 2.2 - 2005○ 2.4 - 2012

● otwarty i darmowy● duża ilość rozszerzeń

Page 4: Apache http server - proste i zaawansowane przypadki użycia

Konfiguracja

Plik httpd.conf i pliki jawnie dołączane przez parametr IncludeNadpisywanie przez plik.htaccess

Parametr i wartość, np.:DocumentRoot "/var/www/html"

Grupowanie, np.:<Directory "/var/www/cgi-bin">

...</Directory>

Page 5: Apache http server - proste i zaawansowane przypadki użycia

Komendy

Zarządzenie procesem: apachectl● start, stop, restart● reload● graceful● status● configtest

Zarządzenie plikiem haseł: htpasswd

Testowanie wydajności: ab

Page 6: Apache http server - proste i zaawansowane przypadki użycia

Konfiguracja - RedHat

1. Pliki:/etc/httpd/...

conf/httpd.confconf.d/*.confvhost.d/*.conf

2. Komendy:/etc/init.d/httpd

3. Logi:/var/log/httpd/...

access.logerror.log

Page 7: Apache http server - proste i zaawansowane przypadki użycia

Konfiguracja - Debian

1. Pliki:/etc/apache2/...

httpd.confmods-available/*.confmods-enabled/*.confsites-available/*.confsites-enabled/*.conf

2. Komendy:/etc/init.d/apache2a2enmod, a2dismoda2ensite, a2dissite

Page 8: Apache http server - proste i zaawansowane przypadki użycia

Logi

Parametry:○ Format logowania

LogFormat "%t %r %>s %b" combined

○ Logowanie rządańCustomLog "access.log" combined

○ Logowanie błędówErrorLog "error.log"

Page 9: Apache http server - proste i zaawansowane przypadki użycia

HTTPS - mod_ssl

Minimum:SSLEngine onSSLProxyEngine onSSLCertificateFile server.crtSSLCertificateKeyFile server.key

Dodatkowo:SSLProtocolSSLCipherSuiteSSLOptions

Page 10: Apache http server - proste i zaawansowane przypadki użycia

Certyfikat "self-signed"

● openssl genrsa -des3 -out server.key 1024● openssl req -new -key server.key -out

server.csr● cp server.key server.key.org● openssl rsa -in server.key.org -out

server.key● openssl x509 -req -days 365 -in server.

csr -signkey server.key -out server.crt

Page 11: Apache http server - proste i zaawansowane przypadki użycia

Virtual Host

Pozwala definiować inną konfigurację dla domen. Określa jakie domeny są obsługiwane na jakim interfejsie sieciowym bądź porcie.

Listen 80NameVirtualHost *:80

<VirtualHost *:80>ServerName server.domain.comServerAlias www.server.domain.com...

</VirtualHost>

Page 12: Apache http server - proste i zaawansowane przypadki użycia

Serwowanie plików<VirtualHost *:80>

DocumentRoot /var/www/vhost/html

<Directory /var/www/vhost/html>AllowOverride NoneOrder allow,denyAllow from all

</Directory>

<Location /files>Options Indexes FollowSymLinks

</Location></VirtualHost>

Page 13: Apache http server - proste i zaawansowane przypadki użycia

Serwowanie aplikacjimod_proxy

Moduł odpowiedzialny za funkcjonalność prośredniczenia żądań do innych aplikacji.

<VirtualHost *:80>ServerName vhost.example.com

ProxyPass / http://127.0.0.1:8080/ProxyPassReverse / http://127.0.0.1:8080/ProxyPreserveHost On

</VirtualHost>

Page 14: Apache http server - proste i zaawansowane przypadki użycia

Serwowanie aplikacjimod_rewrite<VirtualHost *:80>

ServerName vhost.example.com

RewriteEngine OnRewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [R]

</VirtualHost>

<VirtualHost *:443>ServerName vhost.example.comDocumentRoot /var/www/vhost/html

RewriteEngine OnRewriteRule ^/static/(.*) /static/$1 [L]RewriteRule ^/(.*)$ http://127.0.0.1:8080/$1 [L,P]

</VirtualHost>

Page 15: Apache http server - proste i zaawansowane przypadki użycia

Serwowanie aplikacjimod_rewrite

Moduł pozwala na przepisywanie jednych adresów po spełnienie odpowiednich warunków.

Flagi reguł:● L (last) - ignoruje dalsze reguły● NC - dopasowanie ścieżki bez

rozróżniania wielkości liter● NE - nie escapuje znaków● P - przekazanie do mod_proxy● R - przekierowanie (ang. redirect)● E= - ustawia zmienną środowiskową

Page 16: Apache http server - proste i zaawansowane przypadki użycia

Serwowanie aplikacjimod_rewriteServerName example.comServerAlias pl.example.comServerAlias example.com.pl

RewriteEngine onRewriteCond %{REQUEST_METHOD} !^POST$RewriteRule ^/submit$ http://%{SERVER_NAME}/404 [R]

RewriteCond %{HTTP_HOST} ^pl\. [OR]RewriteCond %{HTTP_HOST} \.pl$

RewriteRule ^/(.*)$ http://example.com/pl/$1 [R]

Page 17: Apache http server - proste i zaawansowane przypadki użycia

Serwowanie aplikacjimod_rewriteServerName example.comServerAlias *.example.com

RewriteEngine OnRewriteRule .* - [E=lang:en]RewriteCond %{HTTP_HOST} (.*)\.example\.comRewriteRule .* - [E=lang:%1]RequestHeader set X_SITE_LANG %{lang}eRewriteRule ^/(.*)$ http://127.0.0.1:8080/$1 [L,P]

Page 18: Apache http server - proste i zaawansowane przypadki użycia

Serwowanie aplikacjimod_wsgi

Moduł pozwala hostować aplikacje obsługujące interface WSGI.

Udostępnia 3 tryby:● WSGIScriptAlias● SetHandler● WSGIDaemonProcess

Page 19: Apache http server - proste i zaawansowane przypadki użycia

Serwowanie aplikacjimod_wsgi - WSGIScriptAlias<VirtualHost *:80>

ServerName django.example.comDocumentRoot /var/www/django

<Directory /var/www/django/>Order allow,denyAllow from all

</Directory>

RewriteEngine OnRewriteRule ^/site-media/(.*) /site-media/$1 [L]WSGIScriptAlias / /var/www/django/wsgi.py

</VirtualHost>

Page 20: Apache http server - proste i zaawansowane przypadki użycia

Serwowanie aplikacjimod_wsgi - SetHandler<VirtualHost *:80>

ServerName wsgiapp.example.com

Alias / /var/www/wsgiapp/<Directory /var/www/wsgiapp/>

Options ExecCGISetHandler wsgi-script

Order allow,denyAllow from all

</Directory></VirtualHost>

Page 21: Apache http server - proste i zaawansowane przypadki użycia

Serwowanie aplikacjimod_wsgi - WSGIDaemonProcessWSGIDaemonProcess app-name processes=3 threads=10WSGIScriptAlias / /var/www/wsgiapp/wsgi.py

<Directory /var/www/wsgiapp/>Options ExecCGIWSGIProcessGroup app-nameOrder allow,denyAllow from all

</Directory>

Page 22: Apache http server - proste i zaawansowane przypadki użycia

"Cachowanie" w przeglądarceExpiresActive OnExpiresDefault A0

ExpiresByType application/x-javascript A604800ExpiresByType application/javascript A604800ExpiresByType text/css "access plus 1 month"ExpiresByType image/x-icon "access plus 1 year"ExpiresByType image/jpeg "access plus 1 month"ExpiresByType image/png "access plus 1 month"ExpiresByType image/gif "access plus 1 month"

Page 23: Apache http server - proste i zaawansowane przypadki użycia

Nadpisywanie "Cachowania"w przeglądarce

<VirtualHost *:80> ExpiresActive On ExpiresByType image/jpeg "access plus 1 month" ProxyPass / http://127.0.0.1:8001/</VirtualHost><VirtualHost 127.0.0.1:8001>

Header unset ETagHeader unset Last-ModifiedHeader unset Cache-ControlHeader unset ExpiresHeader unset Content-RangeWSGIScriptAlias / /var/www/django/wsgi.py

</VirtualHost>

Page 24: Apache http server - proste i zaawansowane przypadki użycia

Modyfikacja nagłówkówmod_headers

RequestHeader zmienia nagłówek rządania przed przekazaniem do aplikacji, a Header modyfikuje nagłówek odpowiedzi. Operacje:

● set● append● merge● add● unset● echo● edit

Page 25: Apache http server - proste i zaawansowane przypadki użycia

Modyfikacja nagłówkówmod_headers - przykłady

Przekazanie nagłówka:RequestHeader set plone_skin "Plone Classic Theme"

Poprawianie przekierowań:Header edit Location ^http://127.0.0.1:8800$ /Header edit Location ^http://127.0.0.1:8800/ /

Przekazywanie zalogowanego użytkownika:RewriteCond %{LA-U:REMOTE_USER} (.+)RewriteRule ^/(.*)$ /$1 [PT,E=RU:%1]RequestHeader set X_REMOTE_USER %{RU}e

Page 26: Apache http server - proste i zaawansowane przypadki użycia

Podstawowe uwierzytelnianie<Location />

AuthType BasicAuthName "Password Required"AuthUserFile /etc/httpd/users.authRequire valid-user

</Location>

Komendy:htpasswd -cm /etc/httpd/users.auth user1htpasswd -m /etc/httpd/users.auth user2htpasswd -D /etc/httpd/users.auth user1

Page 27: Apache http server - proste i zaawansowane przypadki użycia

Uwierzytelnianie LDAPmod_ldap<Location />

AuthType BasicAuthName "LDAP"AuthBasicProvider ldapRequire valid-userAuthLDAPURL "..."AuthzLDAPAuthoritative offAuthLDAPGroupAttributeIsDN on

</Location>

ldap://ldap.softax.pl:389/ou=Accounts,dc=softax,dc=pl?uidldap://ldap.softax.local/ou=Accounts,dc=softax,dc=local?uidldap://ldap.stxnext.local/ou=people,dc=stxnext,dc=local?uid

Page 28: Apache http server - proste i zaawansowane przypadki użycia

Silnik Apachempm_prefork

● podstawowy silnik (najstarszy)● wiele procesów potomnych● bez watków = thread-safe● więcej pamięci

<IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0</IfModule>

Page 29: Apache http server - proste i zaawansowane przypadki użycia

Silnik Apachempm_worker

● w httpd od 2.0● kilka procesów potomnych● każdy potomny ma kilka wątków● mniej pamięci, ale nie "thread-safe"

<IfModule mpm_worker_module> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25</IfModule>

Page 30: Apache http server - proste i zaawansowane przypadki użycia

Optymalizacja WSGI(z moich obserwacji)WSGIDaemonProcess spowalnia bo jest dodatkowa komunikacja po unix'owym plikowym socket'ie. Dlatego lepiej aby mpm sterował ilością procesów i wątków.

prefork + szybkie zabijanie = średnio pamięci + dobra odpowiedź + zwieszki!

prefork + wolne zabijanie = dużo pamięci + dobra odpowiedź

prefork + dużo na starcie + wolne zabijanie = = wolny start + bardzo dużo pamięci + najszybsza odpowiedź

worker + szybkie zabijanie = mało pamięci + średnia odpowiedź

worker + wolne zabijanie = średnio pamięci + dobra odpowiedź

worker + dużo na starcie + wolne zabijanie = średnio pamięci + szybka odpowiedź

Zwracać uwagę na sprzęt (ilość rdzeni, pamięć) oraz charakter ruchu.

Page 31: Apache http server - proste i zaawansowane przypadki użycia