SlideShare a Scribd company logo
Web сервера
2
Запуск web сервера
•   Команда на запуск
sudo /etc/init.d/nginx start
•   Чтение файла конфигурации
•   Получение порта 80
•   Открытие (создание) логов
•   Понижение привилегий
•   Запуск дочерних процессов/потоков (*)
•   Готов к обработке запроса
3
Файлы web сервера
•   Конфиг /etc/nginx/nginx.conf
include /etc/nginx/sites-enabled/*
•   Init-скрипт /etc/init.d/nginx [start|stop|restart]
•   PID-файл /var/run/nginx.pid
•   Error-лог /var/log/nginx/error.log
•   Access-лог /var/log/nginx/access.log
4
Процессы web сервера
•   Master (root, 1 процесс)
•   Чтение и валидация конфига
•   Открытие сокета (ов) и логов
•   Запуск и управление дочерними процессами (worker)
•   Graceful restart, Binary updates
•   Worker (www-data, 1+ процессов)
•   Обработка входящих запросов
5
6
Модульная архитектура
•   web сервер – не монолитный
•   Динамическая загрузка модулей - LoadModule
•   Этапы обработки запроса и модули
•   Дополнительные директивы, контексты
•   Примеры: mod_mime, mod_mime_magic, mod_autoindex,
mod_rewrite, mod_cgi, mod_perl, mod_gzip
7
Конфигурация
web сервера
Терминология
virtual host, вирт. хост - секция конфига web сервера, отвечающая
за обслуживание определенного домена
location - секция конфига, отвечающая за обслуживание
определенной группы URL
9
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;
}
}
}
10
Секции и директивы
•   http ― конфигурация для HTTP сервера
•   server ― конфигурация домена (вирт. Хоста)
•   server_name ― имена доменов
•   location ― локейшен, группа URL
•   root , alias ― откуда нужно брать файлы
•   error_log ― лог ошибок сервера
•   access_log ― лог запросов
11
Приоритеты location в nginx
•   location = /img/1.jpg
•   location ^~ /pic/
•   location ~* .jpg$
•   location /img/
При одинаковом приоритете используется тот location, что
находится выше в конфиге.
12
Отдача статических документов
location ~* ^.+.(jpg|jpeg|gif|png)$ {
root /www/images;
}
location /sitemap/ {
alias /home/www/generated/;
}
/2015/10/ae2b5.png → /www/images/2015/10/ae2b5.png
/sitemap/index.xml → /home/www/generated/index.xml
13
У процесса есть
•   пользователь
•   группа
У файла (или директории) есть
•   пользователь (владелец)
•   группа
•   права доступа (read/write/execute)
Атрибуты файлов и процессов
14
Как узнать атрибуты ?
$ ps -o pid,euser,egroup,comm,args -C nginx
PID EUSER EGROUP COMMAND
29731 root root nginx: master process /usr/sbin/nginx
29732 www-data www-data nginx: worker process
29733 www-data www-data nginx: worker process
29734 www-data www-data nginx: worker process
29737 www-data www-data nginx: worker process
$ ls -lah www/index.html
-rw-r--r-- 1 nuf users 156K Feb 6 21:15 www/index.html
15
Проверка доступа
Для того, чтобы открыть файл, необходимо иметь права на чтение
r самого файла и на исполнение x директорий, в которых он
находится. Наличие прав проверяется следующим образом:
•   Если совпадает пользователь -rw-r--r--
•   Если совпадает группа -rw-r--r--
•   Иначе -rw-r--r--
16
Модели
обработки
сетевых
соединений
Простейший 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()
path = conn.recv(512).decode('utf8').rstrip("rn")
file = open('/www' + str(path), 'r')
data = file.read().encode('utf8')
conn.sendall(data)
file.close(); conn.close()
18
Блокирующий ввод-вывод
19
Решение проблемы
•   множество потоков - multithreading
•   множество процессов - prefork, pool of workers
•   комбинированный подход
20
Плюсы и минусы prefork
➕ простота разработки
➕ можно использовать любые библиотеки
➖ большое потребление памяти: 1 клиент = 1 процесс
➖ проблема с долгоживущими соединениями
21
Плюсы и минусы multithreading
По сравнению с prefork,
➕ экономия памяти: 1 клиент = 1 поток
➖ требует аккуратной работы с памятью
➖ как следствие, накладывает ограничение на выбор библиотек
22
Неблокирующий ввод-вывод
23
Мультиплексирование
readsocks, writesocks = [...], [...] # сокеты
while True:
readables, writeables, exceptions = 
select(readsocks, writesocks, [])
for sockobj in readables:
data = sockobj.recv(512)
if not data:
sockobj.close()
readsocks.remove(sockobj)
else:
print('tgot', data, 'on', id(sockobj))
24
Event-driven разработка
•   множество открытых файлов
•   select, kqueue, epoll, aio...
•   последовательное исполнение → события
25
Плюсы и минусы
➕ быстро, программа не блокируется
➕ экономия памяти: 1 клиент = 1 объект
➕ обработка большого количества клиентов
➕ обработка медленных или долгоживущих соединений
➖ тяжело программировать
➖ использование блокирующих вызовов все портит
26
Кто есть кто
•   Apache – prefork, worker, threads, С
•   Tomcat, Jetty – threads, Java
•   Starman, Gunicorn – prefork, языки высокого уровня
•   Nginx, Lighttpd – асинхронные, С
•   Node.JS, Tornado – асинхронные, языки высокого уровня
27

More Related Content

PDF
08 - Web-технологии. Архитектура frontend-backend
PDF
17 - Web-технологии. Real Time сообщения
PDF
05 - Web-технологии. Сетевые протоколы
PDF
02 - Web-технологии. Web-клиенты
PDF
15 - Web-технологии. Сессии и авторизация
PDF
01 - Web-технологии. Архитектура Web приложений
PDF
06 - Web-технологии. Протокол HTTP
PDF
09 - Web-технологии. MVC фреймворки
08 - Web-технологии. Архитектура frontend-backend
17 - Web-технологии. Real Time сообщения
05 - Web-технологии. Сетевые протоколы
02 - Web-технологии. Web-клиенты
15 - Web-технологии. Сессии и авторизация
01 - Web-технологии. Архитектура Web приложений
06 - Web-технологии. Протокол HTTP
09 - Web-технологии. MVC фреймворки

What's hot (20)

PDF
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
PDF
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
PDF
2014.10.15 Сергей Бурладян, Avito.ru
PDF
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
PDF
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
PPT
Загрузка, обработка, хранение и отдача статики
PPTX
07 virtual hosts_ru
PPTX
04 web server_deployment_ru
PDF
pgconf.ru 2015.avito postgresql recovery
ODP
Nginx Igor Sysoev
PPTX
03 web server_architecture_ru
PDF
HTTP протокол
PPTX
05 db server_deployment_ru
PPT
Major mistakes in site moving
PPTX
Применяем Ansible
PPTX
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
PPTX
06 php instalation_ru
PDF
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Сергей Бурладян, Avito.ru
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Загрузка, обработка, хранение и отдача статики
07 virtual hosts_ru
04 web server_deployment_ru
pgconf.ru 2015.avito postgresql recovery
Nginx Igor Sysoev
03 web server_architecture_ru
HTTP протокол
05 db server_deployment_ru
Major mistakes in site moving
Применяем Ansible
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
06 php instalation_ru
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Ad

Viewers also liked (6)

PDF
16 - Web-технологии. Технология AJAX
PDF
12 - Web-технологии. Django модели
PDF
11 - Web-технологии. Работа с СУБД
PDF
66 - Spring. Spring и JSF
PDF
14 - Web-технологии. Обработка форм
PDF
13 - Web-технологии. Отображение данных
16 - Web-технологии. Технология AJAX
12 - Web-технологии. Django модели
11 - Web-технологии. Работа с СУБД
66 - Spring. Spring и JSF
14 - Web-технологии. Обработка форм
13 - Web-технологии. Отображение данных
Ad

Similar to 07 - Web-технологии. Web-сервера (20)

PPT
Web весна 2013 лекция 3
PDF
Web осень 2013 лекция 3
PPT
Web осень 2012 лекция 3
PPT
Web весна 2012 лекция 3
PDF
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
PPTX
Web осень 2013 лекция 9
PDF
Веб-сервер
PPTX
Масштабирование и отказоустойчивость с Nginx
PPTX
Варианты развертывания проектов на M3
PPTX
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
PDF
PPTX
Nginx.pm
PDF
Спецификация WSGI (PEP-333)
PDF
Механика DDoS (Александр Крижановский)
PPTX
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
PDF
Максим Дунин, Nginx, Inc.
PDF
Вячеслав Бирюков - HTTP и HTTPS
POT
Снижение нагрузки на сервер с помощью NGINX
PDF
Анатомия веб сервиса (HighLoad-2014)
PDF
Анатомия веб-сервиса, Андрей Смирнов (ex-Skype)
Web весна 2013 лекция 3
Web осень 2013 лекция 3
Web осень 2012 лекция 3
Web весна 2012 лекция 3
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
Web осень 2013 лекция 9
Веб-сервер
Масштабирование и отказоустойчивость с Nginx
Варианты развертывания проектов на M3
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Nginx.pm
Спецификация WSGI (PEP-333)
Механика DDoS (Александр Крижановский)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Максим Дунин, Nginx, Inc.
Вячеслав Бирюков - HTTP и HTTPS
Снижение нагрузки на сервер с помощью NGINX
Анатомия веб сервиса (HighLoad-2014)
Анатомия веб-сервиса, Андрей Смирнов (ex-Skype)

More from Roman Brovko (20)

PDF
Individual task Networking
PPTX
Networking essentials lect3
PPTX
Gl embedded starterkit_ethernet
PPTX
Networking essentials lect2
PPTX
Networking essentials lect1
PPTX
Bare metal training_07_spi_flash
PPTX
Bare metal training_06_I2C
PPTX
Glesk worshop
PPTX
Bare metal training_05_uart
PPTX
Bare metal training_04_adc_temp_sensor
PPTX
Bare metal training_03_timers_pwm
PPTX
Bare metal training_02_le_ds_and_buttons
PPTX
Bare metal training_01_hello_world
PPTX
Bare metal training_00_prerequisites
PPTX
C language lect_23_advanced
PPTX
C language lect_22_advanced
PPTX
C language lect_21_advanced
PPTX
подготовка рабочего окружения
PPTX
C language lect_20_advanced
PPTX
C language lect_19_basics
Individual task Networking
Networking essentials lect3
Gl embedded starterkit_ethernet
Networking essentials lect2
Networking essentials lect1
Bare metal training_07_spi_flash
Bare metal training_06_I2C
Glesk worshop
Bare metal training_05_uart
Bare metal training_04_adc_temp_sensor
Bare metal training_03_timers_pwm
Bare metal training_02_le_ds_and_buttons
Bare metal training_01_hello_world
Bare metal training_00_prerequisites
C language lect_23_advanced
C language lect_22_advanced
C language lect_21_advanced
подготовка рабочего окружения
C language lect_20_advanced
C language lect_19_basics

07 - Web-технологии. Web-сервера

  • 2. 2
  • 3. Запуск web сервера •   Команда на запуск sudo /etc/init.d/nginx start •   Чтение файла конфигурации •   Получение порта 80 •   Открытие (создание) логов •   Понижение привилегий •   Запуск дочерних процессов/потоков (*) •   Готов к обработке запроса 3
  • 4. Файлы web сервера •   Конфиг /etc/nginx/nginx.conf include /etc/nginx/sites-enabled/* •   Init-скрипт /etc/init.d/nginx [start|stop|restart] •   PID-файл /var/run/nginx.pid •   Error-лог /var/log/nginx/error.log •   Access-лог /var/log/nginx/access.log 4
  • 5. Процессы web сервера •   Master (root, 1 процесс) •   Чтение и валидация конфига •   Открытие сокета (ов) и логов •   Запуск и управление дочерними процессами (worker) •   Graceful restart, Binary updates •   Worker (www-data, 1+ процессов) •   Обработка входящих запросов 5
  • 6. 6
  • 7. Модульная архитектура •   web сервер – не монолитный •   Динамическая загрузка модулей - LoadModule •   Этапы обработки запроса и модули •   Дополнительные директивы, контексты •   Примеры: mod_mime, mod_mime_magic, mod_autoindex, mod_rewrite, mod_cgi, mod_perl, mod_gzip 7
  • 9. Терминология virtual host, вирт. хост - секция конфига web сервера, отвечающая за обслуживание определенного домена location - секция конфига, отвечающая за обслуживание определенной группы URL 9
  • 10. 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; } } } 10
  • 11. Секции и директивы •   http ― конфигурация для HTTP сервера •   server ― конфигурация домена (вирт. Хоста) •   server_name ― имена доменов •   location ― локейшен, группа URL •   root , alias ― откуда нужно брать файлы •   error_log ― лог ошибок сервера •   access_log ― лог запросов 11
  • 12. Приоритеты location в nginx •   location = /img/1.jpg •   location ^~ /pic/ •   location ~* .jpg$ •   location /img/ При одинаковом приоритете используется тот location, что находится выше в конфиге. 12
  • 13. Отдача статических документов location ~* ^.+.(jpg|jpeg|gif|png)$ { root /www/images; } location /sitemap/ { alias /home/www/generated/; } /2015/10/ae2b5.png → /www/images/2015/10/ae2b5.png /sitemap/index.xml → /home/www/generated/index.xml 13
  • 14. У процесса есть •   пользователь •   группа У файла (или директории) есть •   пользователь (владелец) •   группа •   права доступа (read/write/execute) Атрибуты файлов и процессов 14
  • 15. Как узнать атрибуты ? $ ps -o pid,euser,egroup,comm,args -C nginx PID EUSER EGROUP COMMAND 29731 root root nginx: master process /usr/sbin/nginx 29732 www-data www-data nginx: worker process 29733 www-data www-data nginx: worker process 29734 www-data www-data nginx: worker process 29737 www-data www-data nginx: worker process $ ls -lah www/index.html -rw-r--r-- 1 nuf users 156K Feb 6 21:15 www/index.html 15
  • 16. Проверка доступа Для того, чтобы открыть файл, необходимо иметь права на чтение r самого файла и на исполнение x директорий, в которых он находится. Наличие прав проверяется следующим образом: •   Если совпадает пользователь -rw-r--r-- •   Если совпадает группа -rw-r--r-- •   Иначе -rw-r--r-- 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() path = conn.recv(512).decode('utf8').rstrip("rn") file = open('/www' + str(path), 'r') data = file.read().encode('utf8') conn.sendall(data) file.close(); conn.close() 18
  • 20. Решение проблемы •   множество потоков - multithreading •   множество процессов - prefork, pool of workers •   комбинированный подход 20
  • 21. Плюсы и минусы prefork ➕ простота разработки ➕ можно использовать любые библиотеки ➖ большое потребление памяти: 1 клиент = 1 процесс ➖ проблема с долгоживущими соединениями 21
  • 22. Плюсы и минусы multithreading По сравнению с prefork, ➕ экономия памяти: 1 клиент = 1 поток ➖ требует аккуратной работы с памятью ➖ как следствие, накладывает ограничение на выбор библиотек 22
  • 24. Мультиплексирование readsocks, writesocks = [...], [...] # сокеты while True: readables, writeables, exceptions = select(readsocks, writesocks, []) for sockobj in readables: data = sockobj.recv(512) if not data: sockobj.close() readsocks.remove(sockobj) else: print('tgot', data, 'on', id(sockobj)) 24
  • 25. Event-driven разработка •   множество открытых файлов •   select, kqueue, epoll, aio... •   последовательное исполнение → события 25
  • 26. Плюсы и минусы ➕ быстро, программа не блокируется ➕ экономия памяти: 1 клиент = 1 объект ➕ обработка большого количества клиентов ➕ обработка медленных или долгоживущих соединений ➖ тяжело программировать ➖ использование блокирующих вызовов все портит 26
  • 27. Кто есть кто •   Apache – prefork, worker, threads, С •   Tomcat, Jetty – threads, Java •   Starman, Gunicorn – prefork, языки высокого уровня •   Nginx, Lighttpd – асинхронные, С •   Node.JS, Tornado – асинхронные, языки высокого уровня 27