Similar presentations:
Nginx. Что такое nginx
1.
NGINX2.
ОГЛАВЛЕНИЕo Что такое nginx
o Принцип работы
o Разбор конфигурации
3.
ЧТО ТАКОЕ NGINXnginx [engine x] — это HTTP-сервер и обратный прокси-сервер, почтовый
прокси-сервер, а также TCP/UDP прокси-сервер общего назначения
4.
ПРИНЦИП РАБОТЫК 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 site.ru www.site.ru;
return 301 https://$host$request_uri;
}
301 – переехал на постоянной основе
302 – переехал временно
6.
Отдавать статический контент: Nginx делает этомолниеносно. Все ограничено скоростью жесткого диска
или мягкого
Проксировать запросы: может проксировать по http
протоколу, fastCGI с помощью сокета и т.д.
Так же nginx имеет кучу функций с помощью доп.
модулей. Например: он может ресайзить картинки,
отдавать Lua-скрипты
7.
РАЗБОР КОНФИГУРАЦИИКорнем конфигурации 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.
КОНТЕКСТ MAINmain – корень конфигурации, его не называют. Тут
располагаются настройки веб-сервера в общем: под каким
пользователем он будет запускаться, где будет лежать pidфайл, сколько процессов будет запускаться – зависит от того,
сколько ядер
Pid-файл - это файл, содержащий идентификационный номер
процесса
user www-data; -- пользователь
worker_processes auto; -- сколько ядер, столько и
процессов, если ядер 4 и поставил 3, то просто одно ядро не
будет работать, если же их 4 и поставить 6 – может быть
конфликт
worker_rlimit_nofile 4096; -- максимально количество
одновременно открытых файловых дескрипторов у одного
процесса, но нужно будет править конфиги Debian ( по
умолчанию 1024 )
10.
В 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 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 $uri /home/site/situha/dist/index.html;
}
Так же можно отдавать JSON и другие файлы
13.
Как 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 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 и ищет самое верхнее полное совпадение,
если не нашел – ищет самое точное совпадение в значении
которого находится регулярка, а если и там не нашел, то
выбирает дефолтовый
Определились и выбрали нужный сервер. Теперь нужно понять
как nginx обрабатывает нужный урл. С помощью location.
Nginx не обрабатывает значения в урле, которые после «?» -- это
get-парамерт, которые должны обрабатываться приложением.
Если один location, то запрос на него и пойдет.
Допустим мы хотим получить картинку по /logo.gif
16.
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– это те,
которые не содержат регулярок
При первом совпадении поиск прекращается
Nginx отдаст файл, которые располагается /data/www/logo.gif
Если не найдет и в регулрках, то он возьмет самый подходящий
префиксный location, в нашем случае это будет корень