Концепции Nginx, которые я хотел бы знать много лет назад

задняя часть Nginx
Концепции Nginx, которые я хотел бы знать много лет назад

路由器

Концепции Nginx, которые я хотел бы знать много лет назад

Nginx — это веб-сервер с архитектурой master-slave, который можно использовать в качестве обратного прокси-сервера, балансировщика нагрузки, почтового прокси-сервера и кэша HTTP.

Вау! Сложная терминология и запутанные определения, наполненные тоннами запутанных слов, верно? Не волнуйтесь, сначала я помогу вам понять базовую архитектуру и терминологию Nginx, а затем мы установим и создадимNginxконфигурация.

迷惑表情.gif

Для простоты просто помните: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 — это веб-сервер, до сих пор я использовал слово «веб-сервер» в этом блоге, и, честно говоря, это похоже напосредник.

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 и видите эту часть кода, отлично!

十分感动.gif

Хорошо, давайте будем честными, установка Nginx на любую ОС — это всего лишь одна строка команды. Я пользователь Mac OSX, поэтому буду писать команды на его основе. но дляUbuntuа такжеWindowsКак и в других дистрибутивах Linux, есть аналогичные команды.

$ brew install Nginx

Всего одной строкой команды Nginx уже установлен в вашей системе!

Беги так легко!

Выполнение следующей команды, чтобы проверить, запущен ли Nginx в вашей системе, — еще один очень простой шаг.

$ nginx 
# OR 
$ sudo nginx

После запуска команды используйте свой любимый браузер для доступаhttp://localhost:8080/, вы увидите картинку ниже на экране!

Nginx网页

Базовая конфигурация и примеры

Хорошо, покажем магию 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 

Теперь открываем пустой файл, в который мы добавим нашу конфигурацию.

  1. Добавьте базовую конфигурацию. Добавить кevents {}Это необходимо, потому что для архитектуры Nginx обычно используется для представления количества воркеров. мы используем здесьhttpсообщить Nginx, что мы будем использоватьМодель OSI7-й этаж.

    Здесь мы позволяем Nginx прослушивать порт 5000 и указывать на/nginx-demo/mainстатические файлы в папке.

      http {
    
         server {
           listen 5000;
           root /path/to/nginx-demo/main/; 
          }
    
      }
    
      events {}
    
  2. Далее мы будем/contentа также/outsiderURL добавляет дополнительные правила, где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-адреса, но также может устанавливать правила, чтобы я мог блокировать доступ клиентов к определенным файлам.

  3. Мы напишем дополнительное правило в определенном мастере, чтобы предотвратить доступ к любому.mdдокумент. Мы можем использовать регулярные выражения в Nginx, правила определены следующим образом:

       location ~ .md {
            return 403;
       }
    
  4. Наконец, давайте изучим популярные команды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!

  1. Запустите веб-сервер Nginx в первый раз.

      $ nginx 
      #OR 
      $ sudo nginx
    
  2. Перезагрузите работающий веб-сервер Nginx.

      $ nginx -s reload
      #OR 
      $ sudo nginx -s reload
    
  3. Выключите работающий веб-сервер Nginx.

      $ nginx -s stop
      #OR 
      $ sudo nginx -s stop
    
  4. Узнайте, какие процессы 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,внешний интерфейс,задняя часть,блокчейн,продукт,дизайн,искусственный интеллектЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.