258.86K
Категория: ИнтернетИнтернет

Nginx. Что такое nginx

1.

NGINX

2.

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

3.

ЧТО ТАКОЕ NGINX
nginx [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.

КОНТЕКСТ MAIN
main – корень конфигурации, его не называют. Тут
располагаются настройки веб-сервера в общем: под каким
пользователем он будет запускаться, где будет лежать 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, в нашем случае это будет корень

18.

КОНЕЦ
English     Русский Правила