web весна 2012 лекция 3

25
Web сервера Смаль Дмитрий [email protected]

Upload: technopark

Post on 15-Jun-2015

183 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Web весна 2012 лекция 3

Web сервера

Смаль Дмитрий[email protected]

Page 2: Web весна 2012 лекция 3

Что такое web-сервер

Page 3: Web весна 2012 лекция 3

Терминология Порт (port) Соединение (connection) Сокет (socket) Запрос (request) Локейшен (location) Файлы и директории Файл настроек (httpd.conf) Лог доступ (access log) Лог ошибок (error log)

Page 4: Web весна 2012 лекция 3

Запуск web сервера1) Команда на запуск

sudo /etc/init.d/httpd start

/usr/sbin/httpd -f /home/me/httpd.conf

2) Чтение файла конфигурации

3) Получение порта 80

4) Открытие (создание) логов

5) Понижение привелегий (*)

6) Запуск дочерних процесов/потоков (*)

7) Готов к обработке запроса

Page 5: Web весна 2012 лекция 3

Обработка запроса

Page 6: Web весна 2012 лекция 3

Пример конфигурацииListen 80

User www

DirectoryIndex index.html

DocumentRoot /www/htdocs

NameVirtualHost *:80

<VirtualHost *:80>

ServerName www.domain.ru

DocumentRoot /www/domain

ErrorLog /var/log/domain/error_log

CustomLog /var/log/domain/access_log

<Directory "/var/www/html">

Options Indexes FollowSymLinks

</Directory>

</VirtualHost>

Page 7: Web весна 2012 лекция 3

Основные секции и

директивы<VirtualHost> – конфигурация для

домена

<Location /admin> </Location>

<LocationMatch .svn> </LocationMatch>

<Directory /htdocs> </Directory>

<DirectoryMatch /inc/> </DirectoryMatch>

DocumentRoot /www/htdocs

Alias /www/htdocs/

Page 8: Web весна 2012 лекция 3

Порядок применения1) VirtualHost – по заголовку Host

2) DocumentRoot / Alias – вычисление пути

3) Directory и .htaccess

3) DirectoryMatch

4) Files и FilesMatch

4) Location и LocationMatch

Приоритеты – в обратном порядке

Page 9: Web весна 2012 лекция 3

Модульная

архитектура1) web сервер – не монолитный

2) LoadModule – загрузка модулей

3) Этапы обработки запроса и модули

4) Дополнительные директивы, контексты

5) Примеры: mod_mime, mod_mime_magic, mod_autoindex, mod_rewrite, mod_cgi, mod_perl, mod_gzip

Page 10: Web весна 2012 лекция 3

mod_rewriteRewriteEngine on

# запрет картинок для сторонних сайтов

RewriteBase /img/

RewriteCond %{HTTP_REFERER} !^$

RewriteRule \.(jpe?g|gif|png|css|swf)$ - [ F ]

# несуществующие документы – на другой сервер

RewriteBase /

RewriteCond /your/docroot/%{REQUEST_FILENAME} !-f

RewriteRule ^(.+) http://webserverB.dom/

Page 11: Web весна 2012 лекция 3

Простейший TCP серверimport socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind(('127.0.0.1', 8080))

s.listen(10)

while True:

conn, addr = s.accept()

request = conn.recv(1024).decode('utf8')

url = request.rstrip("\r\n")

file = open('/www' + str(url), 'r')

data = file.read(1024).encode('utf8')

conn.send(data)

file.close()

conn.close()

Page 12: Web весна 2012 лекция 3

Blocking I/O

Page 13: Web весна 2012 лекция 3

Как обслужить более 1

клиента?1) Многопоточность (threads)

+ экономия памяти

+ быстрый запуск потока

- все библиотеки должны быть thread-safe

2) Дочерние процессы (prefork)

+ простота, не обязательно thread-safe

- потребление памяти

- медленый запуск процессов

3) Комбинированный режим (worker)

Page 14: Web весна 2012 лекция 3

Non-blocking I/O

Page 15: Web весна 2012 лекция 3

AIO

Page 16: Web весна 2012 лекция 3

Event Driven Programming1) множество открытых файлов

2) select, kqueue, epoll, aio...

3) последовательное исполнение → события

4) “20 байт из сокета A”, “6 байт из файла B”

+ быстро, никакого сна

+ экономия памяти. 1 клиент – 1 структура

+ большое количество клиентов

- очень тяжело программировать

- блокирующие вызовы запрещены

Page 17: Web весна 2012 лекция 3

Кто есть Who.

1) Apache – prefork, worker, С

2) ISS, Tomcat, Jetty – threads, Java

3) Starman, Hypnotoad – prefork, языки высокого уровня

4) nginx, lighttpd – асинхронные, С

5) Node.JS, Tornado, POE – асинхронные, языки высокого уровня

6) Erlang!

7) Для разработки.

Page 18: Web весна 2012 лекция 3

Front-end и Back-end

Page 19: Web весна 2012 лекция 3

Front-end

Легкий, множество соединений

1) отдача статических файлов

2) проксирование (reverse proxy)

3) балансировка нагрузки

4) кеширование

5) сборка SSI

6) авторизация, SSL, нарезка картинок

Page 20: Web весна 2012 лекция 3

Проксирование в nginxupstream backend {

server back1.example.com:8080 weight=1;

server back2.example.com:8080 weight=2;

}

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_read_timeout 60s;

location / {

proxy_pass http://backend;

}

location ~ /(img|css|js)/ {

root /www/static;

}

location /partner/ {

proxy_pass http://www.partner.com;

}

Page 21: Web весна 2012 лекция 3

Back-end Удобный, обработка сложных

запросов, запуск скриптов.

1) CGI

2) FastCGI

3) mod_perl, mod_python, mod_php, PHP!!!

4) PSGI, WSGI, Rack

5) apache не нужен ?

Page 22: Web весна 2012 лекция 3
Page 23: Web весна 2012 лекция 3
Page 24: Web весна 2012 лекция 3

Полезные утилиты

1) top – список запущенных процессов

top -d 1

2) netstat – список сетевых соединений

netstat -t

3) telnet – элементарный tcp клиент

telnet mail.ru 80

4) ab – нагрузочное тестирование

ab -n 1000 -c 10 http://mail.ru/

Page 25: Web весна 2012 лекция 3

Домашнее заданиe

1) Настроить Apache для запуска CGI

2) Написать Hello World CGI скрипт

1) Настроить Apache 2.2 для отдачи статики

2) Настроить nginx для отдачи статики

3) Сравнить производительность с помощью ab (ApacheBenchmark)