Nginx. Что такое nginx

Содержание

Слайд 2

ОГЛАВЛЕНИЕ Что такое nginx Принцип работы Разбор конфигурации

ОГЛАВЛЕНИЕ

Что такое nginx
Принцип работы
Разбор конфигурации

Слайд 3

ЧТО ТАКОЕ NGINX nginx [engine x] — это HTTP-сервер и обратный

ЧТО ТАКОЕ NGINX
nginx [engine x] — это HTTP-сервер и обратный прокси-сервер, почтовый

прокси-сервер, а также TCP/UDP прокси-сервер общего назначения
Слайд 4

ПРИНЦИП РАБОТЫ К nginx прилетает запрос, он в зависимости от конфигурационного

ПРИНЦИП РАБОТЫ

К nginx прилетает запрос, он в зависимости от конфигурационного файла,

который ему задать, выполняет определенные действия
Какие действия он может выполнять:
Отдать код ответа. К примеру: вычислить ip, useragent, геолокацию и для тех, кто попал в список отдать определенный код, а для тех, кто не попал выполнить другие действия.
if ($http_user_agent ~ (Ahrefs|MJ12bot|LinkadBot|MauiBot)) {
return 403;
}
Слайд 5

Выполнить редирект: server { listen 80 default_server; listen [::]:80 default_server; server_name

Выполнить редирект:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name site.ru www.site.ru;
return 301 https://$host$request_uri;
}
301

– переехал на постоянной основе
302 – переехал временно
Слайд 6

Отдавать статический контент: Nginx делает это молниеносно. Все ограничено скоростью жесткого

Отдавать статический контент: Nginx делает это молниеносно. Все ограничено скоростью жесткого

диска или мягкого
Проксировать запросы: может проксировать по http протоколу, fastCGI с помощью сокета и т.д.
Так же nginx имеет кучу функций с помощью доп. модулей. Например: он может ресайзить картинки, отдавать Lua-скрипты
Слайд 7

РАЗБОР КОНФИГУРАЦИИ Корнем конфигурации nginx считается файл nginx.conf. Его демон который

РАЗБОР КОНФИГУРАЦИИ

Корнем конфигурации nginx считается файл nginx.conf. Его демон который запускается,

всегда просматривает. Находится /etc/nginx/nginx.conf – отсюда nginx начинает парсить свои конфиги
Nginx состоит из модулей, которые настраиваются с помощью деректив, которые прописываются в конфиге. Дерективы бывают простые и блочные
Простая деректива состоит из имени и параметра:
access_log /var/log/nginx/access.log;
!!!Есть дерективы, которые привязаны к определенному контексту, а есть которые могут быть переопределены внутри вложенных контекстов!!!
Слайд 8

Блочная деректива состоит из имени и дополнительного блока с набором дополнительных

Блочная деректива состоит из имени и дополнительного блока с набором дополнительных

инструкций, помещенные внутри фигурных скобок. Если у блочной дерективы можно задать другие дерективы – это называется контекстом
events {
worker_connections 1024; # один пользователь
}
Дерективы:
main
events
http
server
location
Слайд 9

КОНТЕКСТ MAIN main – корень конфигурации, его не называют. Тут располагаются

КОНТЕКСТ MAIN

main – корень конфигурации, его не называют. Тут располагаются настройки

веб-сервера в общем: под каким пользователем он будет запускаться, где будет лежать pid-файл, сколько процессов будет запускаться – зависит от того, сколько ядер
Pid-файл - это файл, содержащий идентификационный номер процесса
user www-data; -- пользователь
worker_processes auto; -- сколько ядер, столько и процессов, если ядер 4 и поставил 3, то просто одно ядро не будет работать, если же их 4 и поставить 6 – может быть конфликт
worker_rlimit_nofile 4096; -- максимально количество одновременно открытых файловых дескрипторов у одного процесса, но нужно будет править конфиги Debian ( по умолчанию 1024 )
Слайд 10

В main входит контекст: events{} – указывает дерективы, влияющие на обработку

В main входит контекст:
events{} – указывает дерективы, влияющие на обработку соединения
events

{
worker_connections 1024; #определяет сколько рабочих процессов может максимально открыть одно соединение
}
http{} – отвечает за обработку нашего запроса, по протоколу http ( https – надстройка над протоколом http )
Здесь можно задать апстримы, лимиты, настройки сжатия, а так же общие настройки для всех ваших сайтов
В контексте http{} присутствует контекст server{} – тут задаются настройки для отдельных сайтов – эти настройки не добавляются в файл /etc/nginx/nginx.conf, его импортируют из какой-нибудь директории:
include /etc/nginx/conf.d/*.conf;
Контекст сервер лучше выносить для каждого сайта и называть его по имени домена
Слайд 11

Директива listen будет определяет то, что будет слушать наш сервер. Может

Директива listen будет определяет то, что будет слушать наш сервер. Может

слушать как сокет, так и порт.
listen 80 default_server;
Директива server_name, тут прописывается хост
server_name site.ru www.site.ru;
Можно использовать конекст location для проксирования запросов к другому сервису, а так же статического контента и т.п.
server {
location / {
proxy_pass http://localhost:8080;
}
location /images/ {
root /data;
} }
Слайд 12

Отдача html страницы location / { root /home/site/situha/dist; index index.html; try_files

Отдача html страницы
location / {
root /home/site/situha/dist;
index index.html;
try_files $uri /home/site/situha/dist/index.html;
}
Так же можно

отдавать JSON и другие файлы
Слайд 13

Как nginx определяет какое правило применить к запросу и что отдать?

Как nginx определяет какое правило применить к запросу и что отдать?

По урлу запроса пришедшего на сервер и правилу прописанного после location. Правило может содержать как точный урл, так и часть, а также регулярное выражение:
Location /api/{
proxy_pass http://site;
proxy_redirect off;
}
Как же все таки nginx выбирает что отдать клиенту?
Поступил запрос по http протоколу на наш ip и порт. Nginx ищет по всем контекстам server{} в значении listen кто принимает запрос по этому ip ипорту ( можно указать просто порт и тогда сайт будет доступен на всех ip на сервере )
Слайд 14

Server { listen 192.168.1.1:80; server_name site.ru www.site.ru; } Server { listen

Server {
listen 192.168.1.1:80;
server_name site.ru www.site.ru;
}
Server {
listen 192.168.1.1:80 default_server;
server_name site.ru www.site.ru;
}
Server {
listen

192.168.1.2:80 default_server;
server_name site.ru www.site.ru;
}
Server {
listen 80;
server_name ~^www\d+\.site\.ru$;
}
Слайд 15

Дальше он смотрит заголовок запроса host и сопоставляет значение server_name и

Дальше он смотрит заголовок запроса host и сопоставляет значение server_name и

ищет самое верхнее полное совпадение, если не нашел – ищет самое точное совпадение в значении которого находится регулярка, а если и там не нашел, то выбирает дефолтовый
Определились и выбрали нужный сервер. Теперь нужно понять как nginx обрабатывает нужный урл. С помощью location.
Nginx не обрабатывает значения в урле, которые после «?» -- это get-парамерт, которые должны обрабатываться приложением.
Если один location, то запрос на него и пойдет.
Допустим мы хотим получить картинку по /logo.gif
Слайд 16

server { listen 80 default_server; server_name site.ru www.site.ru; root /data/www; #

server {
listen 80 default_server;
server_name site.ru www.site.ru;
root /data/www; # обозначает от какого

корня искать файл
location / {
index index.html index.php;
}
location ~* \.(gif|jpeg|png)$ { # подходит
expires 30d;
}
location ~ \.php$ {
fastcgi_pass localhost:9000;
fastcgi_param SCRIPT_FILENAME
$document_root$fastcgi__script_name;
include fastcgi_params;
}
}
Слайд 17

Вначале ищет среди всех правил Префиксных location, если максимальное совпадение с

Вначале ищет среди всех правил Префиксных location, если максимальное совпадение с

нашим запросом. Если есть точное совпадение – выбирает его. Префиксные location– это те, которые не содержат регулярок
При первом совпадении поиск прекращается
Nginx отдаст файл, которые располагается /data/www/logo.gif
Если не найдет и в регулрках, то он возьмет самый подходящий префиксный location, в нашем случае это будет корень