- Оригинальный адрес:Nginx concepts I wish I knew years ago
- Оригинальный автор:Aemie Jariwala
- Перевод с:Программа перевода самородков
- Постоянная ссылка на эту статью:GitHub.com/rare earth/gold-no…
- Переводчик:joyking7
- Корректор:PassionPenguin,ningzhy3
Концепции Nginx, которые я хотел бы знать много лет назад
Nginx — это веб-сервер с архитектурой master-slave, который можно использовать в качестве обратного прокси-сервера, балансировщика нагрузки, почтового прокси-сервера и кэша HTTP.
Вау! Сложная терминология и запутанные определения, наполненные тоннами запутанных слов, верно? Не волнуйтесь, сначала я помогу вам понять базовую архитектуру и терминологию Nginx, а затем мы установим и создадимNginxконфигурация.
Для простоты просто помните:Nginx — отличный веб-сервер..
Проще говоря, веб-сервер действует как посредник. Например, если вы хотите получить доступ к dev.to, введите адресhttps://dev.to
, ваш браузер узнаетhttps://dev.to
адрес веб-сервера, а затем направить его на внутренний сервер, который вернет ответ клиенту.
Прокси против обратного прокси
Основная функция Nginx — это прокси, поэтому теперь вам нужно понять, что такое прокси и обратный прокси.
играет роль
Итак, у нас есть один или несколько клиентов, промежуточный веб-сервер (в данном случае мы называем его прокси) и сервер. Главное в этом то, что сервер не знает, какой клиент запрашивает. Смущенный? Поясню на схеме.
В этом случае клиенты client1 и client2 отправляют запросы request1 и request2 на сервер через прокси-сервер, а фоновый сервер не будет знать, отправлен запрос1 client1 или client2, и будет только выполнять операцию.
обратный прокси
Проще говоря, обратный прокси полностью меняет работу прокси. Допустим, есть клиент, промежуточный веб-сервер и один или несколько внутренних серверов. Давайте продолжим объяснение с помощью принципиальной схемы!
В этом случае клиент отправит запрос через веб-сервер, а веб-сервер направит запрос на любой из множества серверов с помощью алгоритма, один из которых Round-Robin (самый симпатичный) перед возвратом. ответ клиенту через веб-сервер. Так что здесь клиент не знает, с каким внутренним сервером он взаимодействует.
балансировки нагрузки
Черт, еще одно новое слово, но его легче понять, потому что онообратный проксипрактическое применение само по себе.
Начнем с основных отличий. При балансировке нагрузки необходимо иметь два или более внутренних сервера, но при настройке обратного прокси в этом нет необходимости, его можно использовать даже только с одним внутренним сервером.
Давайте заглянем за кулисы, если у нас много запросов от клиентов, этот балансировщик нагрузки проверяет состояние каждого фонового сервера и распределяет нагрузку запросов, после чего быстрее отправляет ответ клиенту.
Приложения с отслеживанием состояния и приложения без сохранения состояния
Хорошо, ребята, я обещаю, что скоро расскажу о коде Nginx, так что давайте разберемся со всеми основными понятиями!
приложение с отслеживанием состояния
Это приложение хранит дополнительную переменную, содержащую информацию, применимую только к одному экземпляру сервера.
Я имею в виду, если внутренний серверserver1хранится какая-то информация, то она не будет храниться вserver2, поэтому взаимодействующий клиент (в данном случае Боб) может не получить желаемого результата, поскольку он может взаимодействовать либо с server1, либо с server2. В этом случае server1 позволит Бобу просмотреть файл конфигурации, а server2 — нет. Таким образом, хотя приложение с отслеживанием состояния блокирует многие вызовы API к базе данных и работает быстрее, оно может вызвать указанные выше проблемы на разных серверах.
приложение без гражданства
Теперь безгражданство — это больше вызовов API к базе данных, но меньше проблем, когда клиент взаимодействует с разными внутренними серверами. .
Я знаю, что ты не понимаешь, что я имею в виду. Проще говоря, если я отправляю от клиента через веб-сервер, скажем, на внутренний серверserver1Отправьте запрос, и он предоставит клиенту токен, который можно использовать для доступа к любому другому запросу. Клиент может использовать токен и отправить запрос на веб-сервер, который отправляет запрос вместе с токеном на любой из внутренних серверов, каждый из которых вернет один и тот же ожидаемый результат.
Что такое Nginx?
Nginx — это веб-сервер, до сих пор я использовал слово «веб-сервер» в этом блоге, и, честно говоря, это похоже напосредник.
Эту диаграмму нетрудно понять, она просто объединяет все концепции, которые я объяснял до сих пор. На этом рисунке у нас есть 3 внутренних сервера, работающих на портах 3001, 3002 и 3003 соответственно, и эти внутренние серверы совместно используют базу данных, работающую на порту 5432.
Теперь, когда клиент отправляетhttps://localhost
(порт по умолчанию 443) отправить запросGET /employees
, Nginx отправит запрос на любой фоновый сервер в соответствии с алгоритмом, фоновый сервер получит информацию из базы данных, а затем отправит результат JSON обратно на веб-сервер Nginx, а Nginx отправит его обратно клиенту.
Если бы мы использовали что-то вродекруговое планированиеДля такого алгоритма Nginx сделает так: Например, client2 отправляет запрос наhttps://localhost
, то сервер Nginx сначала передаст запрос на порт 3001, а затем вернет ответ клиенту. Для другого запроса Nginx передаст запрос на порт 3002 и так далее.
Слишком много понятий! Но к настоящему моменту у вас должно быть четкое представление о том, что такое Nginx и связанные с ним термины. Теперь перейдем к установке и настройке Nginx.
Процесс установки
Это, наконец, здесь! Если вы понимаете концепции Nginx и видите эту часть кода, отлично!
Хорошо, давайте будем честными, установка Nginx на любую ОС — это всего лишь одна строка команды. Я пользователь Mac OSX, поэтому буду писать команды на его основе. но дляUbuntuа такжеWindowsКак и в других дистрибутивах Linux, есть аналогичные команды.
$ brew install Nginx
Всего одной строкой команды Nginx уже установлен в вашей системе!
Беги так легко!
Выполнение следующей команды, чтобы проверить, запущен ли Nginx в вашей системе, — еще один очень простой шаг.
$ nginx
# OR
$ sudo nginx
После запуска команды используйте свой любимый браузер для доступаhttp://localhost:8080/
, вы увидите картинку ниже на экране!
Базовая конфигурация и примеры
Хорошо, покажем магию Nginx на примере. Сначала создайте следующую структуру каталогов на локальном компьютере:
.
├── nginx-demo
│ ├── content
│ │ ├── first.txt
│ │ ├── index.html
│ │ └── index.md
│ └── main
│ └── index.html
└── temp-nginx
└── outsider
└── index.html
В то же время вhtmlа такжеmdЗапишите основной контекстный контент в файл.
Какого эффекта мы хотим добиться?
Здесь у нас есть две отдельные папкиnginx-demo
а такжеtemp-nginx
, каждая папка содержит статические HTML-файлы. Мы сосредоточимся на запуске двух папок на общем порту и настроим правила по своему вкусу.
Теперь снова на ходу. Мы можем сделать это, изменив/usr/local/etc/nginx
(Примечание переводчика: путь установки по умолчанию) по путиnginx.conf
файл, который реализует любые изменения в конфигурации Nginx по умолчанию. Кроме того, в моей системе есть Vim, поэтому я буду использовать Vim для своих модификаций, а вы можете использовать редактор по своему выбору.
$ cd /usr/local/etc/nginx
$ vim nginx.conf
Это откроет файл конфигурации Nginx по умолчанию, но я действительно не хочу использовать его конфигурацию по умолчанию. Поэтому я обычно копирую этот файл конфигурации, а затем модифицирую исходный файл. Здесь мы делаем то же самое.
$ cp nginx.conf copy-nginx.conf
$ rm nginx.conf && vim nginx.conf
Теперь открываем пустой файл, в который мы добавим нашу конфигурацию.
-
Добавьте базовую конфигурацию. Добавить к
events {}
Это необходимо, потому что для архитектуры Nginx обычно используется для представления количества воркеров. мы используем здесьhttp
сообщить Nginx, что мы будем использоватьМодель OSI7-й этаж.Здесь мы позволяем Nginx прослушивать порт 5000 и указывать на
/nginx-demo/main
статические файлы в папке.http { server { listen 5000; root /path/to/nginx-demo/main/; } } events {}
-
Далее мы будем
/content
а также/outsider
URL добавляет дополнительные правила, гдеoutsiderукажет на корневой каталог, упомянутый в первом шаге (/nginx-demo
) вне каталога.здесь
location /content
означает, что независимо от того, какой корневой каталог я определяю в подкаталоге,contentДополнительные URL-адреса добавляются в конец определенного корневого каталога. Итак, здесь, когда я указываю корневой каталог какroot /path/to/nginx-demo/
, это просто означает, что я говорю Nginxhttp://localhost:5000/path/to/nginx-demo/content/
Покажите мне содержимое статических файлов внутри папки.http { server { listen 5000; root /path/to/nginx-demo/main/; location /content { root /path/to/nginx-demo/; } location /outsider { root /path/temp-nginx/; } } } events {}
так круто! Теперь Nginx не ограничивается определением корневого URL-адреса, но также может устанавливать правила, чтобы я мог блокировать доступ клиентов к определенным файлам.
-
Мы напишем дополнительное правило в определенном мастере, чтобы предотвратить доступ к любому.mdдокумент. Мы можем использовать регулярные выражения в Nginx, правила определены следующим образом:
location ~ .md { return 403; }
-
Наконец, давайте изучим популярные команды
proxy_pass
. Теперь, когда мы поняли, что такое прокси и обратный прокси, здесь мы сначала определяем еще один фоновый сервер, работающий на порту 8888, так что теперь у нас есть 2 фоновых сервера, работающих на портах 5000 и 8888 соответственно.Что нам нужно сделать, так это, когда клиент получает доступ к порту 8888 через Nginx, передать запрос на порт 5000 и вернуть ответ клиенту!
server { listen 8888; location / { proxy_pass http://localhost:5000/; } location /new { proxy_pass http://localhost:5000/outsider/; } }
Наконец, давайте взглянем на полный код! 😁
http {
server {
listen 5000;
root /path/to/nginx-demo/main/;
location /content {
root /path/to/nginx-demo/;
}
location /outsider {
root /path/temp-nginx/;
}
location ~ .md {
return 403;
}
}
server {
listen 8888;
location / {
proxy_pass http://localhost:5000/;
}
location /new {
proxy_pass http://localhost:5000/outsider/;
}
}
}
events {}
пройти черезsudo nginx
для запуска кода.
Дополнительные команды Nginx!
-
Запустите веб-сервер Nginx в первый раз.
$ nginx #OR $ sudo nginx
-
Перезагрузите работающий веб-сервер Nginx.
$ nginx -s reload #OR $ sudo nginx -s reload
-
Выключите работающий веб-сервер Nginx.
$ nginx -s stop #OR $ sudo nginx -s stop
-
Узнайте, какие процессы Nginx запущены в системе
$ ps -ef | grep Nginx
Четвертая команда очень важна.Когда первые три команды имеют ошибки, вы можете использовать четвертую команду, чтобы найти все запущенные процессы Nginx, затем убить эти процессы и перезапустить службу Nginx.
Чтобы убить процесс, вам нужно сначала узнать его PID, а затем убить его с помощью следующей команды:
$ kill -9 <PID>
#OR
$ sudo kill -9 <PID>
Прежде чем завершить этот пост, я хотел бы заявить, что изображения и визуальные эффекты, которые я использовал, взяты из изображений Google иHussein NasserПредоставленный учебник Youtube.
О базовом понимании и настройке Nginx мы поговорим здесь. Если вас интересуют расширенные настройки Nginx, дайте мне знать в комментариях. А пока наслаждайтесь программированием и исследуйте магию Nginx! 👋
Если вы обнаружите ошибки в переводе или в других областях, требующих доработки, добро пожаловать наПрограмма перевода самородковВы также можете получить соответствующие бонусные баллы за доработку перевода и PR. начало статьиПостоянная ссылка на эту статьюЭто ссылка MarkDown этой статьи на GitHub.
Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из Интернета сНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,продукт,дизайн,искусственный интеллектЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.