Существует много текстового контента (принцип + практика), и объяснение более подробно. Это займет около 10 минут для чтения.
При установке и настройке Nginx в этой статье в качестве примера используется система Mac OS X. Поклонники Win выбирают осторожность.
Хотя заголовок выглядит так, как будто он написан для студентов, изучающих интерфейс, эта статья на самом деле подходит для всех студентов, которые хотят изучать Nginx, но не знают, с чего начать. Автор изо всех сил старался объяснить глубокие вещи простым языком и сделать их легкими для понимания, чтобы опыт чтения у всех присутствующих был таким же гладким, как шоколад Dove, будь то передняя часть или задняя часть.
Что такое Nginx?
«Nginx — это легкий HTTP-сервер, который использует управляемую событиями асинхронную неблокирующую платформу обработки, которая обеспечивает превосходную производительность ввода-вывода и часто используется для серверной части.обратный проксиа такжеБалансировка нагрузки. "
Именно так большинство разработчиков определяют Nginx.
(Что? Я не понимаю, какого черта обратный прокси и балансировка нагрузки? Тогда, пожалуйста, будьте терпеливы, пожалуйста, дочитайте с вопросами)
Nginx — это http-сервер (или веб-сервер). Он был разработан россиянином Игорем Сейсуевым для второго по посещаемости российского сайта Rambler.ru и впервые был опубликован в 2004 году.
Веб-сервер: отвечает за обработку запросов пользователей и ответы на них, также известный как http-сервер, например Apache, IIS, Nginx.
Сервер приложений: сервер, который хранит и запускает системные программы и отвечает за обработку бизнес-логики в программе, такой как Tomcat, Weblogic и Jboss (теперь большинство серверов приложений также включают функции веб-сервера).
Что такое Nginx, подведем итог:
-
Легкий веб-сервер
-
Идея дизайна — асинхронная неблокирующая обработка, управляемая событиями (например, node.js).
-
Низкое использование памяти, высокая скорость запуска и мощная возможность параллелизма
-
Разработано на языке C
-
Хорошая масштабируемость, множество сторонних плагинов
-
Интернет широко используется в проекте
Зачем изучать Nginx?
Nginx входит в тройку лучших серверов в мире, и в последние годы число его пользователей очень быстро растет.
По некоторым статистическим данным около трети веб-сайтов в мире используют Nginx. В архитектуре крупных веб-сайтов широко используется Nginx, таких как Baidu, Ali, Tencent, Jingdong, Netease, Sina, DJI и др.
Nginx прост в установке, прост в настройке, но незаменим. Nginx является обязательным курсом для эксплуатации и обслуживания и серверной части, а также обязательным курсом для продвинутого интерфейса.
Благодаря освоению Nginx внешний интерфейс может стать выше, лучше спроектировать архитектуру системы, лучше выбирать решения проблем и лучше служить развитию бизнеса.
Подводя итог, можно сказать, что Nginx нужно учиться, и внешний интерфейс тоже нельзя оставлять позади.
Как научиться Nginx?
установить/удалить
На компьютеры Mac рекомендуется установить встроенный инструмент homebrew.
Установите Nginx:
brew install nginx
Удалите Nginx:
brew uninstall nginx
Если это не сработает, просто добавьте к brew префикс sudo. (Что такое sudo? Вы не знакомы с Linux, можете перемещатьВ какой степени фронтенд-инженерам необходимо освоить Linux?)
После установки убедитесь, что nginx успешно установлен:
Инструмент homebrew очень удобен, очень похож на использование npm/yarn во фронтенд-разработке.
Просто npm/yarn сильно зависит от среды узла, а homebrew можно свободно использовать в системе Mac. (Портал:Введение и использование домашнего пивоварения)
запускать
Запустите Nginx:
sudo nginx
илиsudo brew services start nginx
Остановить нгинкс:
sudo nginx -s stop
илиsudo brew services stop nginx
Теплый перезапуск Nginx:
sudo nginx -s reload
Принудительно остановить Nginx:
sudo pkill -9 nginx
Изменить настройку
Несколько часто используемых путей к файлам:
-
/usr/local/etc/nginx/nginx.conf
(путь к файлу конфигурации nginx) -
/usr/local/var/www
(Корневой каталог сервера nginx по умолчанию) -
/usr/local/Cellar/nginx/1.17.9
(путь установки nginx) -
/usr/local/var/log/nginx/error.log
(путь журнала nginx по умолчанию)
Введение в файл конфигурации nginx по умолчанию:
# 首尾配置暂时忽略
server {
# 当nginx接到请求后,会匹配其配置中的service模块
# 匹配方法就是将请求携带的host和port去跟配置中的server_name和listen相匹配
listen 8080;
server_name localhost; # 定义当前虚拟主机(站点)匹配请求的主机名
location / {
root html; # Nginx默认值
# 设定Nginx服务器返回的文档名
index index.html index.htm; # 先找根目录下的index.html,如果没有再找index.htm
}
}
# 首尾配置暂时忽略
server{ } фактически содержится внутри http{ } . Каждый сервер{ } является виртуальным хостом (сайтом).
Приведенный выше блок кода означает: когда вызывается запросlocalhost:8080
Когда делается запрос на сервер nginx, запрос будет сопоставлен с server{ } блока кода и выполнен.
Конечно, nginx имеет множество настроек, и вы можете настроить его в соответствии с документацией, когда будете его использовать.
Английский документ:nginx.org/en/docs/
Китайский документ:www.nginx.cn/doc/
Каковы приложения Nginx?
Есть четыре основных приложения.
Динамическое и статическое разделение
Как показано на рисунке выше, разделение динамических и статических фактически состоит в том, что сервер Nginx делит полученные запросы надинамический запроса такжестатический запрос.
Статический запрос напрямую извлекает соответствующие ресурсы из пути к корневому каталогу, установленного сервером nginx, а динамический запрос перенаправляется на реальный фон (вышеупомянутый сервер приложений, такой как Tomcat на рисунке) для обработки.
Это может не только снизить нагрузку на сервер приложений, сделать фоновый API-интерфейс службы, но и разделить интерфейсный и внутренний код для параллельной разработки и развертывания. (Портал:Преимущества динамического и статического разделения nginx)
server {
listen 8080;
server_name localhost;
location / {
root html; # Nginx默认值
index index.html index.htm;
}
# 静态化配置,所有静态请求都转发给 nginx 处理,存放目录为 my-project
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
root /usr/local/var/www/my-project; # 静态请求所代理到的根目录
}
# 动态请求匹配到path为'node'的就转发到8002端口处理
location /node/ {
proxy_pass http://localhost:8002; # 充当服务代理
}
}
Доступ к серверу nginx со статическим ресурсом вернет файлы в моем проекте, такие как получение index.html:
Доступ к динамическим запросам Сервер nginx вернет контент, который он запрашивает через порт 8002, без изменений:
обратный прокси
Что такое обратный прокси?
Обратный прокси на самом деле похож на то, как вы идете к агенту по закупкам, чтобы помочь вам купить вещи (браузер или другой терминал делает запрос к nginx), вам не нужно заботиться, где он идет, чтобы купить это, пока он покупает что вы хотите для вас (браузер или другой терминал, наконец, получает то, что он хочет, но он не знает, где это получить.)
Роль обратного прокси
- Обеспечьте безопасность сервера приложений (добавьте уровень прокси, который может защищать от опасных атак и более удобно контролировать разрешения)
- Реализовать балансировку нагрузки (подождите, я расскажу об этом позже)
- Внедрить кросс-доменный (утверждается, что это самый простой способ междоменного)
Настроить обратный прокси
Настроить простой обратный прокси-сервер можно с помощью следующего кода:
server {
listen 8080;
server_name localhost;
location / {
root html; # Nginx默认值
index index.html index.htm;
}
proxy_pass http://localhost:8000; # 反向代理配置,请求会被转发到8000端口
}
Работа обратного прокси проста. Для приведенного выше блока кода это фактически запрос к nginx.localhost:8080
следуйте запросуhttp://localhost:8000
тот же эффект. (тот же принцип, что и при покупке)
Это простейшая модель обратного прокси-сервера, предназначенная только для иллюстрации конфигурации обратного прокси-сервера. Но на самом деле чаще всего используется балансировка нагрузки обратного прокси.
Схематическая диаграмма выглядит следующим образом:
nginx выступает в качестве прокси на рисунке. Три клиента слева получают контент от nginx при запросе, но они не могут почувствовать существование трех серверов.
На этом этапе прокси действует как обратный прокси для трех серверов.
Обратные прокси широко используются, и сервисы CDN являются одним из классических сценариев применения обратных прокси. Кроме того, обратный прокси-сервер также является основой для балансировки нагрузки, и архитектура многих крупных компаний была применена к обратному прокси-серверу.
Балансировка нагрузки
Что такое балансировка нагрузки?
С непрерывным ростом бизнеса и увеличением числа пользователей один сервис уже не может соответствовать системным требованиям. В это время появился серверкластер.
В кластере серверов Nginx может «равномерно» (строго говоря, не обязательно равномерно) получать клиентские запросы ко всем серверам в кластере, задавая веса. это называетсяБалансировка нагрузки.
Принципиальная схема балансировки нагрузки выглядит следующим образом:
Роль балансировки нагрузки
- Распределить нагрузку кластера серверов
- Обеспечение стабильности клиентского доступа
Как упоминалось ранее, балансировка нагрузки может решить проблему распределения нагрузки на кластеры серверов. Кроме того, Nginx также поставляется смедицинское обследованиеФункция (проверка пульса сервера) будет периодически опрашивать и отправлять запросы проверки работоспособности на все серверы в кластере, чтобы проверить, не находятся ли какие-либо серверы в кластере в ненормальном состоянии.
Как только сервер оказывается ненормальным, клиентские запросы от прокси-сервера не будут отправляться на сервер (до тех пор, пока проверка работоспособности не обнаружит, что сервер вернулся в нормальное состояние), что обеспечивает стабильность клиентского доступа.
Настройка балансировки нагрузки
Настройка простого балансировщика нагрузки не сложная, код такой:
# 负载均衡:设置domain
upstream domain {
server localhost:8000;
server localhost:8001;
}
server {
listen 8080;
server_name localhost;
location / {
# root html; # Nginx默认值
# index index.html index.htm;
proxy_pass http://domain; # 负载均衡配置,请求会被平均分配到8000和8001端口
proxy_set_header Host $host:$server_port;
}
}
8000 и 8001 — это две службы, которые я начал с Node.js локально.После успешной балансировки нагрузки вы можете увидеть доступlocalhost:8080
Иногда осуществляется доступ к странице порта 8000, а иногда — к странице порта 8001.
Если вы видите этот эффект, это означает, что настроенная вами стратегия балансировки нагрузки вступает в силу.
Балансировка нагрузки в реальном проекте намного сложнее, чем в этом случае, но она всегда одна и та же и выводится из этой идеальной модели.
Количество серверов в кластере с балансировкой нагрузки, ограниченное такими ресурсами, как память одного сервера в кластере, не может увеличиваться до бесконечности. Однако благодаря хорошему механизму отказоустойчивости балансировка нагрузки сталаАрхитектура высокой доступностинеотъемлемая часть.
прямой прокси
Прямой прокси является полной противоположностью обратного. В качестве примера возьмем приведенный выше пример агента по закупкам: несколько человек находят агента по закупкам для покупки одного и того же продукта, а агент по закупкам находит магазин, который покупает его, и покупает его одновременно. Во время этого процесса владелец магазина не знал, что дайгоу помогал другим покупать вещи. Затем дайгоу выступает в качестве посредника для многих клиентов, желающих купить товар.
Схематическая диаграмма прямого прокси выглядит следующим образом:
nginx выступает в качестве прокси на рисунке. Три клиента слева получают контент от nginx при запросе, и сервер не может почувствовать существование трех клиентов.
На этом этапе прокси действует как прямой прокси для трех клиентов.
прямой прокси, Имеется в виду, что сервер, расположенный между клиентом и исходным сервером (исходным сервером), для того, чтобы получить контент с исходного сервера, клиент передает запрос на прокси и указывает место назначения (исходный сервер), затем прокси-сервер запросы и пересылаются в исходное содержание, полученное возвращается клиенту. Клиент может использовать прямой прокси. Когда вам нужно использовать свой сервер в качестве прокси-сервера, Nginx можно использовать для получения прямого прокси-сервера.
Научный Интернет VPN (широко известный как翻墙
) на самом деле является прямым прокси-инструментом.
VPN будет проксировать запрос веб-страницы, которая хочет получить доступ к серверу за стеной, на прокси-сервер, который может получить доступ к веб-сайту. Этот прокси-сервер пересылает содержимое веб-страницы, полученное с сервера за пределами стены, клиенту.
Прокси-сервер построен Nginx.
Применение прямого прокси-сервера гораздо менее обширно, чем обратного прокси-сервера, потому что это вводная глава nginx, а объем ограничен, поэтому конкретная справочная конфигурация здесь не приводится.
Эта статья бессвязная, я хотел бы поместить в эту статью все базовые знания о nginx. Это также поможет студентам, которые хотят изучить nginx, понять его и избежать обходных путей.