SlideShare a Scribd company logo
Web серверы

Дмитрий Смаль
Web серверы

2
Терминология
 Порт (port)
 Соединение (connection)
 Сокет (socket)

 Запрос (request)
 Локейшен (location)
 Файлы и директории (directory)
 Файл настроек (httpd.conf, nginx.conf)
 Лог доступа (access log)
 Лог ошибок (error log)
3
Запуск Web сервера
1. Команда на запуск
sudo /etc/init.d/httpd start
/usr/sbin/httpd -f /home/me/httpd.conf
2. Чтение файла конфигурации
3. Получение порта 80
4. Открытие (создание) логов
5. Понижение привелегий (*)
6. Запуск дочерних процесов/потоков (*)
7. Готов к обработке запроса
4
Файлы Web-сервера
1. Конфиг /etc/apache2/httpd.conf
Include /etc/apache2/mods-available/*
Include /etc/apache2/sites-available/*

2. Скрипт /etc/init.d/apache2 [start|stop|restart]
3. PID-файл /var/run/apache2.pid

4. Error-лог /var/log/apache2/error.log
/var/log/apache2/mydomain-error.log
5. Access-лог /var/log/apache2/access.log
/var/log/apache2/mydomain-access.log
5
Процессы Web-сервера
1. Master (root, 1 процесс)
 Чтение и валидация конфига
 Открытие сокета (ов)

 Открытие файлов логов
 Запуск и управление дочерними процессами (worker)
 Graceful restart, Binary updates

2. Worker (www-data, 1+ процессов)
 Обработка входящих запросов

6
Доступ к файлам в UNIX
$ ls -lah server/core.c
-rw-r--r-- 1 nuf users 156K Feb 6 21:15 server/core.c

 У файла (или директории) есть:
 пользователь (владелец)
 группа
 права доступа (read/write/execute)

 У процесса есть:
 пользователь
 группа
7
Обработка запроса

8
Модульная архитектура
 web сервер – не монолитный
 LoadModule – загрузка модулей
 Этапы обработки запроса и модули
 Дополнительные директивы, контексты
 Примеры: mod_mime, mod_mime_magic, mod_autoindex,
mod_rewrite, mod_cgi, mod_perl, mod_gzip

9
Конфигурация

10
Конфигурация Apache
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>
<Location "/private/">
Order Allow, Deny
Deny from all
</Location>
</VirtualHost>
11
Секции и директивы
<VirtualHost> ― конфигурация для домена
<Location /admin> </Location>
<LocationMatch .svn> </LocationMatch>
<Directory /htdocs> </Directory>
<DirectoryMatch /inc/> </DirectoryMatch>

DocumentRoot /www/htdocs
Alias /www/htdocs/
12
Порядок применения
1. VirtualHost – по заголовку Host
2. DocumentRoot / Alias – вычисление пути
3. Directory и .htaccess
4. DirectoryMatch
5. Files и FilesMatch
6. Location и LocationMatch

Приоритеты ― в обратном порядке
13
Конфигурация Nginx
user www www;
error_log /var/log/nginx.error_log info;
http {
include
conf/mime.types;
default_type application/octet-stream;
log_format
simple '$remote_addr $request $status';
server {
listen
one.example.com;
server_name
one.example.com www.one.example.com;
access_log
/var/log/nginx.access_log simple;
location / {
root
/www/one.example.com;
}
location ~* ^.+.(jpg|jpeg|gif)$ {
root
/www/images;
access_log off;
expires
30d;
}
}
}
14
Секции и директивы
http ― конфигурация для HTTP сервера
server ― конфигурация домена (вирт. Хоста)
location ― локейшен (привет, Кэп!)
server_name ― имена доменов

root, alias ― откуда нужно брать файлы
error_log ― лог ошибок сервера
access_log ― лог запросов

15
Приоритеты локейшенов
В nginx:
location = /img/1.jpg
location ^~ /pic/
location *~ .jpg$
location /img/

В apache:
<Location> и <LocationMatch>
<Files> и <FilesMatch>
<DirectoryMatch>
<Directory>
16
Модели обработки сетевых
запросов

17
Простой 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("rn")
file = open('/www' + str(url), 'r')
data = file.read(1024).encode('utf8')
conn.send(data)
file.close()
conn.close()
18
Blocking I/O

19
Более 1 клиента ?
1. Многопоточность (threads)
+ экономия памяти
+ быстрый запуск потока

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

2. Дочерние процессы (prefork)
+ простота, не обязательно thread-safe
— потребление памяти
— медленый запуск процессов

3. Комбинированный режим (worker)
20
Non-blocking I/O

21
IO Multiplexing
readsocks = […] # список сокетов для чтения
writesocks = […] # список сокетов для записи
while True:
readables, writeables, exceptions = 
select(readsocks, writesocks, [])
for sockobj in readables:
data = sockobj.recv(1024)
if not data:
sockobj.close( )
readsocks.remove(sockobj)
else:
print 'tgot', data, 'on', id(sockobj)
22
AIO

23
Event-Driven programming
1. множество открытых файлов
2. select, kqueue, epoll, aio...
3. последовательное исполнение → события
4. “20 байт из сокета A”, “6 байт из файла B”

+ быстро, никакого сна
+ экономия памяти. 1 клиент – 1 структура
+ большое количество клиентов
— очень тяжело программировать
— блокирующие вызовы запрещены
24
Кто есть 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.

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

25
Front-end и Back-end

26
27
Front-end
Легкий, быстрый, множество соединений
1. отдача статических файлов
2. проксирование (reverse proxy)

3. балансировка нагрузки
4. кеширование

5. сборка SSI
6. авторизация, SSL, нарезка картинок, gzip

28
Проксирование в nginx
upstream 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;
}
29
Back-end
Обработка сложных запросов, запуск скриптов.
1. CGI

2. FastCGI
3. mod_perl, mod_python, mod_php, PHP!!!

4. PSGI, WSGI, Rack
5. apache не нужен ?

30
CGI

31
FastCGI

32
Comet

33
Полезные утилиты
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/

34
Домашнее задание
 Установить mysql
 Создать пользователя и базу данных
 Спроектировать схему БД (в виде моделей)
 Подключить Django к СУБД

35
Спасибо за внимание
Дмитрий Смаль,
smal@corp.mail.ru

More Related Content

What's hot

Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
Positive Hack Days
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
Technopark
 
Эффективное программирование на NodeJS
Эффективное программирование на NodeJSЭффективное программирование на NodeJS
Эффективное программирование на NodeJS
Yura Bogdanov
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXMLSlach
 
PHP Tricks
PHP TricksPHP Tricks
PHP TricksBlackFan
 
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
Anastasia Lubennikova
 
Linux basics. Занятие 3.
Linux basics. Занятие 3. Linux basics. Занятие 3.
Linux basics. Занятие 3.
Vikentsi Lapa
 
Web осень 2012 лекция 3
Web осень 2012 лекция 3Web осень 2012 лекция 3
Web осень 2012 лекция 3Technopark
 
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
zfconfua
 
Web весна 2013 лекция 3
Web весна 2013 лекция 3Web весна 2013 лекция 3
Web весна 2013 лекция 3Technopark
 
О безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersО безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersPositive Hack Days
 
Ice Php Framework Preview Release
Ice Php Framework Preview ReleaseIce Php Framework Preview Release
Ice Php Framework Preview Release
Denis Shestakov
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кода
Anastasia Lubennikova
 
Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"
Yandex
 
Михаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxМихаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxYandex
 
Web весна 2012 лекция 2
Web весна 2012 лекция 2Web весна 2012 лекция 2
Web весна 2012 лекция 2Technopark
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"
Technopark
 
Vipolnenie komand na servere
Vipolnenie komand na servereVipolnenie komand na servere
Vipolnenie komand na servere
ygoltsev
 

What's hot (20)

Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
 
Эффективное программирование на NodeJS
Эффективное программирование на NodeJSЭффективное программирование на NodeJS
Эффективное программирование на NodeJS
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXML
 
176023
176023176023
176023
 
PHP Tricks
PHP TricksPHP Tricks
PHP Tricks
 
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
 
Linux basics. Занятие 3.
Linux basics. Занятие 3. Linux basics. Занятие 3.
Linux basics. Занятие 3.
 
Web осень 2012 лекция 3
Web осень 2012 лекция 3Web осень 2012 лекция 3
Web осень 2012 лекция 3
 
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
 
Web весна 2013 лекция 3
Web весна 2013 лекция 3Web весна 2013 лекция 3
Web весна 2013 лекция 3
 
О безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersО безопасном использовании PHP wrappers
О безопасном использовании PHP wrappers
 
Ice Php Framework Preview Release
Ice Php Framework Preview ReleaseIce Php Framework Preview Release
Ice Php Framework Preview Release
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кода
 
Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"
 
Михаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxМихаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, Ajax
 
php frameworks
php frameworksphp frameworks
php frameworks
 
Web весна 2012 лекция 2
Web весна 2012 лекция 2Web весна 2012 лекция 2
Web весна 2012 лекция 2
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"
 
Vipolnenie komand na servere
Vipolnenie komand na servereVipolnenie komand na servere
Vipolnenie komand na servere
 

Viewers also liked

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель Pregel
Technopark
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3
Technopark
 
Frontend весна 2014 лекция 2
Frontend весна 2014 лекция 2Frontend весна 2014 лекция 2
Frontend весна 2014 лекция 2Technopark
 
Android осень 2013 лекция 1
Android осень 2013 лекция 1Android осень 2013 лекция 1
Android осень 2013 лекция 1Technopark
 
Разработка веб-сервисов осень 2013 лекция 9
Разработка веб-сервисов осень 2013 лекция 9Разработка веб-сервисов осень 2013 лекция 9
Разработка веб-сервисов осень 2013 лекция 9Technopark
 
Безопасность интернет-приложений осень 2013 лекция 2
Безопасность интернет-приложений осень 2013 лекция 2Безопасность интернет-приложений осень 2013 лекция 2
Безопасность интернет-приложений осень 2013 лекция 2Technopark
 
Безопасность интернет-приложений осень 2013 лекция 10
Безопасность интернет-приложений осень 2013 лекция 10Безопасность интернет-приложений осень 2013 лекция 10
Безопасность интернет-приложений осень 2013 лекция 10Technopark
 
HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3Technopark
 
Управление продуктом осень 2013 лекция 5
Управление продуктом осень 2013 лекция 5Управление продуктом осень 2013 лекция 5
Управление продуктом осень 2013 лекция 5Technopark
 
Java осень 2013 лекция 1-1
Java осень 2013 лекция 1-1Java осень 2013 лекция 1-1
Java осень 2013 лекция 1-1Technopark
 
Тестирование весна 2014 смешанное занятие 2
Тестирование весна 2014 смешанное занятие 2Тестирование весна 2014 смешанное занятие 2
Тестирование весна 2014 смешанное занятие 2Technopark
 
Java осень 2013 лекция 8
Java осень 2013 лекция 8Java осень 2013 лекция 8
Java осень 2013 лекция 8Technopark
 
Разработка веб-сервисов осень 2013 лекция 1 2
Разработка веб-сервисов осень 2013 лекция 1 2Разработка веб-сервисов осень 2013 лекция 1 2
Разработка веб-сервисов осень 2013 лекция 1 2Technopark
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
Technopark
 
HighLoad весна 2014 лекция 6
HighLoad весна 2014 лекция 6HighLoad весна 2014 лекция 6
HighLoad весна 2014 лекция 6Technopark
 
Java осень 2014 занятие 8
Java осень 2014 занятие 8Java осень 2014 занятие 8
Java осень 2014 занятие 8
Technopark
 
Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2Technopark
 
Проектирование интерфейсов весна 2014 занятие 7
Проектирование интерфейсов весна 2014 занятие 7Проектирование интерфейсов весна 2014 занятие 7
Проектирование интерфейсов весна 2014 занятие 7Technopark
 
Бизнес весна 2014 лекция 6
Бизнес весна 2014 лекция 6Бизнес весна 2014 лекция 6
Бизнес весна 2014 лекция 6Technopark
 
Тестирование весна 2014 смешанное занятие 3
Тестирование весна 2014 смешанное занятие 3Тестирование весна 2014 смешанное занятие 3
Тестирование весна 2014 смешанное занятие 3Technopark
 

Viewers also liked (20)

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель Pregel
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3
 
Frontend весна 2014 лекция 2
Frontend весна 2014 лекция 2Frontend весна 2014 лекция 2
Frontend весна 2014 лекция 2
 
Android осень 2013 лекция 1
Android осень 2013 лекция 1Android осень 2013 лекция 1
Android осень 2013 лекция 1
 
Разработка веб-сервисов осень 2013 лекция 9
Разработка веб-сервисов осень 2013 лекция 9Разработка веб-сервисов осень 2013 лекция 9
Разработка веб-сервисов осень 2013 лекция 9
 
Безопасность интернет-приложений осень 2013 лекция 2
Безопасность интернет-приложений осень 2013 лекция 2Безопасность интернет-приложений осень 2013 лекция 2
Безопасность интернет-приложений осень 2013 лекция 2
 
Безопасность интернет-приложений осень 2013 лекция 10
Безопасность интернет-приложений осень 2013 лекция 10Безопасность интернет-приложений осень 2013 лекция 10
Безопасность интернет-приложений осень 2013 лекция 10
 
HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3
 
Управление продуктом осень 2013 лекция 5
Управление продуктом осень 2013 лекция 5Управление продуктом осень 2013 лекция 5
Управление продуктом осень 2013 лекция 5
 
Java осень 2013 лекция 1-1
Java осень 2013 лекция 1-1Java осень 2013 лекция 1-1
Java осень 2013 лекция 1-1
 
Тестирование весна 2014 смешанное занятие 2
Тестирование весна 2014 смешанное занятие 2Тестирование весна 2014 смешанное занятие 2
Тестирование весна 2014 смешанное занятие 2
 
Java осень 2013 лекция 8
Java осень 2013 лекция 8Java осень 2013 лекция 8
Java осень 2013 лекция 8
 
Разработка веб-сервисов осень 2013 лекция 1 2
Разработка веб-сервисов осень 2013 лекция 1 2Разработка веб-сервисов осень 2013 лекция 1 2
Разработка веб-сервисов осень 2013 лекция 1 2
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
 
HighLoad весна 2014 лекция 6
HighLoad весна 2014 лекция 6HighLoad весна 2014 лекция 6
HighLoad весна 2014 лекция 6
 
Java осень 2014 занятие 8
Java осень 2014 занятие 8Java осень 2014 занятие 8
Java осень 2014 занятие 8
 
Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2
 
Проектирование интерфейсов весна 2014 занятие 7
Проектирование интерфейсов весна 2014 занятие 7Проектирование интерфейсов весна 2014 занятие 7
Проектирование интерфейсов весна 2014 занятие 7
 
Бизнес весна 2014 лекция 6
Бизнес весна 2014 лекция 6Бизнес весна 2014 лекция 6
Бизнес весна 2014 лекция 6
 
Тестирование весна 2014 смешанное занятие 3
Тестирование весна 2014 смешанное занятие 3Тестирование весна 2014 смешанное занятие 3
Тестирование весна 2014 смешанное занятие 3
 

Similar to Web осень 2013 лекция 3

Web весна 2012 лекция 3
Web весна 2012 лекция 3Web весна 2012 лекция 3
Web весна 2012 лекция 3Technopark
 
07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера
Roman Brovko
 
Nginx Igor Sysoev
Nginx   Igor SysoevNginx   Igor Sysoev
Nginx Igor SysoevMedia Gorod
 
Mihail davidov js-ajax
Mihail davidov js-ajaxMihail davidov js-ajax
Mihail davidov js-ajaxYandex
 
Алексей Андросов "HTML5 в Я.Почте"
Алексей Андросов "HTML5 в Я.Почте"Алексей Андросов "HTML5 в Я.Почте"
Алексей Андросов "HTML5 в Я.Почте"
Yandex
 
Стажировка-2013, разработчики, занятие 7. Web, HTTP
Стажировка-2013, разработчики, занятие 7. Web, HTTPСтажировка-2013, разработчики, занятие 7. Web, HTTP
Стажировка-2013, разработчики, занятие 7. Web, HTTP7bits
 
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр ВолковОпенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Yandex
 
Webuibasics - Lesson 3 - Nginx, SSI (in russian)
Webuibasics - Lesson 3 - Nginx, SSI (in russian)Webuibasics - Lesson 3 - Nginx, SSI (in russian)
Webuibasics - Lesson 3 - Nginx, SSI (in russian)
xasima
 
Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеAlexey Androsov
 
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
Александр Сигачев
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Alexey Kachayev
 
МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3
Dima Dzuba
 
Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP Framework
Oleksandr Torosh
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
Timur Shemsedinov
 
Distributed nets
Distributed netsDistributed nets
Distributed nets
zagru
 
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...ZFConf Conference
 
Open protocols as base for social distributed networks
Open protocols as base for social distributed networksOpen protocols as base for social distributed networks
Open protocols as base for social distributed networksТранслируем.бел
 
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Vadim Kruchkov
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Yandex
 

Similar to Web осень 2013 лекция 3 (20)

Web весна 2012 лекция 3
Web весна 2012 лекция 3Web весна 2012 лекция 3
Web весна 2012 лекция 3
 
07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера
 
Nginx Igor Sysoev
Nginx   Igor SysoevNginx   Igor Sysoev
Nginx Igor Sysoev
 
WWW
WWWWWW
WWW
 
Mihail davidov js-ajax
Mihail davidov js-ajaxMihail davidov js-ajax
Mihail davidov js-ajax
 
Алексей Андросов "HTML5 в Я.Почте"
Алексей Андросов "HTML5 в Я.Почте"Алексей Андросов "HTML5 в Я.Почте"
Алексей Андросов "HTML5 в Я.Почте"
 
Стажировка-2013, разработчики, занятие 7. Web, HTTP
Стажировка-2013, разработчики, занятие 7. Web, HTTPСтажировка-2013, разработчики, занятие 7. Web, HTTP
Стажировка-2013, разработчики, занятие 7. Web, HTTP
 
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр ВолковОпенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
 
Webuibasics - Lesson 3 - Nginx, SSI (in russian)
Webuibasics - Lesson 3 - Nginx, SSI (in russian)Webuibasics - Lesson 3 - Nginx, SSI (in russian)
Webuibasics - Lesson 3 - Nginx, SSI (in russian)
 
Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.Почте
 
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
 
МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3
 
Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP Framework
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Distributed nets
Distributed netsDistributed nets
Distributed nets
 
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
 
Open protocols as base for social distributed networks
Open protocols as base for social distributed networksOpen protocols as base for social distributed networks
Open protocols as base for social distributed networks
 
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 

More from Technopark

Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.Ru
Technopark
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARN
Technopark
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
Technopark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
Technopark
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeper
Technopark
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и Hive
Technopark
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)
Technopark
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)
Technopark
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
Technopark
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFS
Technopark
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы Hadoop
Technopark
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduce
Technopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
Technopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
Technopark
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
Technopark
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"
Technopark
 
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
Technopark
 
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
Technopark
 
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
Technopark
 
СУБД 2013 Лекция №1 "Введение и начало проектирования"
СУБД 2013 Лекция №1 "Введение и начало проектирования"СУБД 2013 Лекция №1 "Введение и начало проектирования"
СУБД 2013 Лекция №1 "Введение и начало проектирования"
Technopark
 

More from Technopark (20)

Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.Ru
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARN
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeper
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и Hive
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFS
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы Hadoop
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduce
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"
 
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
 
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
 
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
 
СУБД 2013 Лекция №1 "Введение и начало проектирования"
СУБД 2013 Лекция №1 "Введение и начало проектирования"СУБД 2013 Лекция №1 "Введение и начало проектирования"
СУБД 2013 Лекция №1 "Введение и начало проектирования"
 

Web осень 2013 лекция 3

  • 3. Терминология  Порт (port)  Соединение (connection)  Сокет (socket)  Запрос (request)  Локейшен (location)  Файлы и директории (directory)  Файл настроек (httpd.conf, nginx.conf)  Лог доступа (access log)  Лог ошибок (error log) 3
  • 4. Запуск Web сервера 1. Команда на запуск sudo /etc/init.d/httpd start /usr/sbin/httpd -f /home/me/httpd.conf 2. Чтение файла конфигурации 3. Получение порта 80 4. Открытие (создание) логов 5. Понижение привелегий (*) 6. Запуск дочерних процесов/потоков (*) 7. Готов к обработке запроса 4
  • 5. Файлы Web-сервера 1. Конфиг /etc/apache2/httpd.conf Include /etc/apache2/mods-available/* Include /etc/apache2/sites-available/* 2. Скрипт /etc/init.d/apache2 [start|stop|restart] 3. PID-файл /var/run/apache2.pid 4. Error-лог /var/log/apache2/error.log /var/log/apache2/mydomain-error.log 5. Access-лог /var/log/apache2/access.log /var/log/apache2/mydomain-access.log 5
  • 6. Процессы Web-сервера 1. Master (root, 1 процесс)  Чтение и валидация конфига  Открытие сокета (ов)  Открытие файлов логов  Запуск и управление дочерними процессами (worker)  Graceful restart, Binary updates 2. Worker (www-data, 1+ процессов)  Обработка входящих запросов 6
  • 7. Доступ к файлам в UNIX $ ls -lah server/core.c -rw-r--r-- 1 nuf users 156K Feb 6 21:15 server/core.c  У файла (или директории) есть:  пользователь (владелец)  группа  права доступа (read/write/execute)  У процесса есть:  пользователь  группа 7
  • 9. Модульная архитектура  web сервер – не монолитный  LoadModule – загрузка модулей  Этапы обработки запроса и модули  Дополнительные директивы, контексты  Примеры: mod_mime, mod_mime_magic, mod_autoindex, mod_rewrite, mod_cgi, mod_perl, mod_gzip 9
  • 11. Конфигурация Apache 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> <Location "/private/"> Order Allow, Deny Deny from all </Location> </VirtualHost> 11
  • 12. Секции и директивы <VirtualHost> ― конфигурация для домена <Location /admin> </Location> <LocationMatch .svn> </LocationMatch> <Directory /htdocs> </Directory> <DirectoryMatch /inc/> </DirectoryMatch> DocumentRoot /www/htdocs Alias /www/htdocs/ 12
  • 13. Порядок применения 1. VirtualHost – по заголовку Host 2. DocumentRoot / Alias – вычисление пути 3. Directory и .htaccess 4. DirectoryMatch 5. Files и FilesMatch 6. Location и LocationMatch Приоритеты ― в обратном порядке 13
  • 14. Конфигурация Nginx user www www; error_log /var/log/nginx.error_log info; http { include conf/mime.types; default_type application/octet-stream; log_format simple '$remote_addr $request $status'; server { listen one.example.com; server_name one.example.com www.one.example.com; access_log /var/log/nginx.access_log simple; location / { root /www/one.example.com; } location ~* ^.+.(jpg|jpeg|gif)$ { root /www/images; access_log off; expires 30d; } } } 14
  • 15. Секции и директивы http ― конфигурация для HTTP сервера server ― конфигурация домена (вирт. Хоста) location ― локейшен (привет, Кэп!) server_name ― имена доменов root, alias ― откуда нужно брать файлы error_log ― лог ошибок сервера access_log ― лог запросов 15
  • 16. Приоритеты локейшенов В nginx: location = /img/1.jpg location ^~ /pic/ location *~ .jpg$ location /img/ В apache: <Location> и <LocationMatch> <Files> и <FilesMatch> <DirectoryMatch> <Directory> 16
  • 18. Простой 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("rn") file = open('/www' + str(url), 'r') data = file.read(1024).encode('utf8') conn.send(data) file.close() conn.close() 18
  • 20. Более 1 клиента ? 1. Многопоточность (threads) + экономия памяти + быстрый запуск потока — все библиотеки должны быть thread-safe 2. Дочерние процессы (prefork) + простота, не обязательно thread-safe — потребление памяти — медленый запуск процессов 3. Комбинированный режим (worker) 20
  • 22. IO Multiplexing readsocks = […] # список сокетов для чтения writesocks = […] # список сокетов для записи while True: readables, writeables, exceptions = select(readsocks, writesocks, []) for sockobj in readables: data = sockobj.recv(1024) if not data: sockobj.close( ) readsocks.remove(sockobj) else: print 'tgot', data, 'on', id(sockobj) 22
  • 24. Event-Driven programming 1. множество открытых файлов 2. select, kqueue, epoll, aio... 3. последовательное исполнение → события 4. “20 байт из сокета A”, “6 байт из файла B” + быстро, никакого сна + экономия памяти. 1 клиент – 1 структура + большое количество клиентов — очень тяжело программировать — блокирующие вызовы запрещены 24
  • 25. Кто есть 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. Для разработки. 25
  • 27. 27
  • 28. Front-end Легкий, быстрый, множество соединений 1. отдача статических файлов 2. проксирование (reverse proxy) 3. балансировка нагрузки 4. кеширование 5. сборка SSI 6. авторизация, SSL, нарезка картинок, gzip 28
  • 29. Проксирование в nginx upstream 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; } 29
  • 30. Back-end Обработка сложных запросов, запуск скриптов. 1. CGI 2. FastCGI 3. mod_perl, mod_python, mod_php, PHP!!! 4. PSGI, WSGI, Rack 5. apache не нужен ? 30
  • 34. Полезные утилиты 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/ 34
  • 35. Домашнее задание  Установить mysql  Создать пользователя и базу данных  Спроектировать схему БД (в виде моделей)  Подключить Django к СУБД 35