Основы интервью: прочесывание знаний nginx (коллекционное издание)

Java задняя часть
Основы интервью: прочесывание знаний nginx (коллекционное издание)

предисловие

Эта статья участвовала в [Пожалуйста, проверьте|У вас есть возможность подать заявку на бесплатные подарки в Nuggets.】Мероприятия.

Примите участие в комментариях и получите шанс выиграть 2 новых значка, предоставленных официальным лицом Nuggets.Пожалуйста, обратитесь к концу статьи для получения подробной информации о лотерее.

Для начального развития, особенно для студентов Xiaobai, я надеюсь, что вы внимательно прочитаете его, я верю, что вы что-то приобретете.

Не легко создать, помнитеНравится, Следуй, ИзбранноеЭй.

Концепция Nginx

Nginx — этоВысокопроизводительные службы HTTP и обратного прокси-сервера. Его характеристики заключаются в том, что он занимает меньше памяти и обладает сильными возможностями параллелизма.На самом деле, возможности параллелизма nginx лучше работают на веб-серверах того же типа.

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

В случае высокого параллелизма соединений Nginx является хорошей заменой службам Apache: Nginx — одна из программных платформ, которую часто выбирают владельцы веб-хостинговых компаний в США.

обратный прокси

Прежде чем говорить об обратном прокси, давайте поговорим о том, что такое прокси и прямой прокси.

играет роль

Агент на самом деле является посредником, А и В могли быть связаны напрямую, а С был вставлен посередине, а С был посредником. В начале агент в основном помогаетИнтранет-клиент(ЛВС) доступИнтернет-сервериспользовать. Затем появился обратный прокси,反向Значение слова здесь на самом деле относится к противоположному направлению, то есть прокси перенаправляет запрос от клиента внешней сети на сервер внутренней сети, снаружи внутрь.

прямой прокси

Прямой прокси-сервер — это прокси-сервер клиента, прокси-клиент, и сервер не знает, какой клиент фактически инициировал запрос.

Прямой прокси-сервер похож на трамплин, и прокси-сервер получает доступ к внешним ресурсам.

Например, когда мы получаем доступ к Google в Китае, мы не можем получить к нему доступ напрямую.Мы можем отправить запрос в прокси-сервис через прямой прокси-сервер, и прокси-сервер может получить доступ к Google, чтобы прокси-сервер мог получить доступ к Google, чтобы получить возвращенные данные и вернуть их нам. , чтобы мы могли получить доступ к Google.

image-20210904171928174

обратный прокси

Обратный прокси-сервер — это прокси-сервер на стороне сервера, прокси-сервер, и клиент не знает, какой сервер фактически предоставляет услугу.

Клиент не знает о существовании прокси-сервера.

Это относится к прокси-серверу, который принимает запрос на подключение в Интернете, а затем перенаправляет запрос на сервер во внутренней сети и возвращает результат, полученный от сервера, клиенту, запрашивающему подключение в Интернете. прокси-сервер ведет себя как обратный прокси-сервер.

image-20210904173138672

балансировки нагрузки

Что касается балансировки нагрузки, давайте возьмем пример:

Все должны были быть в метро: когда мы едем в метро в утренний час пик, всегда есть самый загруженный вход в метро.Кто торопится, пожалуйста, идите в порт B, порт B менее загружен и пуст.". А этот работник метрополитена А отвечает за балансировку нагрузки.

Чтобы улучшить возможности веб-сайта во всех аспектах, мы обычно формируем кластер из нескольких машин для предоставления внешних услуг. Однако вход для доступа, предоставляемый нашим сайтом, является одним, напримерwww.taobao.com. Затем, когда пользователь вводит в браузереwww.taobao.comКак распределить запрос пользователя по разным машинам в кластере, этим занимается балансировка нагрузки.

Балансировка нагрузки (Load Balance) означает балансировку и распределение нагрузки (рабочие задачи, запросы доступа) на несколько операционных единиц (серверов, компонентов) для выполнения. Это идеальное решение для обеспечения высокой производительности, единой точки отказа (высокая доступность) и масштабируемости (горизонтальное масштабирование).

image-20210904175555853

Существует три основных способа балансировки нагрузки, предоставляемых Nginx: циклический перебор, взвешенный циклический перебор и IP-хэш.

голосование

По умолчанию nginx по умолчанию опрашивает свой вес равный 1, а порядок, в котором сервер обрабатывает запросы: ABCABCABCABC....

upstream mysvr { 
    server 192.168.8.1:7070; 
    server 192.168.8.2:7071;
    server 192.168.8.3:7072;
}

взвешенная круговая система

Разное количество запросов распределяется по разным серверам в зависимости от размера настроенного веса. Если не установлено, по умолчанию используется значение 1. Последовательность запросов для следующих серверов: ABBCCCABBCCC....

upstream mysvr { 
    server 192.168.8.1:7070 weight=1; 
    server 192.168.8.2:7071 weight=2;
    server 192.168.8.3:7072 weight=3;
}

ip_hash

iphash выполняет хэш-операцию над ip, запрошенным клиентом, а затем распределяет запрос того же ip клиента на тот же сервер для обработки в соответствии с результатом хеширования, что может решить проблему неразделения сеанса.

upstream mysvr { 
    server 192.168.8.1:7070; 
    server 192.168.8.2:7071;
    server 192.168.8.3:7072;
    ip_hash;
}

Динамическое и статическое разделение

Разница между динамическими и статическими страницами

  • Статические ресурсы: когда пользователи обращаются к этому ресурсу несколько раз, исходный код ресурса никогда не изменится (например, файлы HTML, JavaScript, CSS, img и т. д.).
  • Динамический ресурс: когда пользователь обращается к этому ресурсу несколько раз, исходный код ресурса может отправлять изменения (например: .jsp, сервлет и т. д.).

Что такое динамическое разделение

  • Динамическое и статическое разделение позволяет динамическим веб-страницам на динамическом веб-сайте отличать постоянные ресурсы от часто меняющихся ресурсов в соответствии с определенными правилами.После разделения динамических и статических ресурсов мы можем кэшировать их в соответствии с характеристиками статических ресурсов.Это является основной идеей статической обработки веб-сайта.

  • Простое резюме разделения динамических и статических файлов: разделение динамических файлов и статических файлов.

Зачем использовать статическое и динамическое разделение

Чтобы ускорить анализ веб-сайта, вы можете использовать разные серверы для анализа динамических ресурсов и статических ресурсов для ускорения анализа. Уменьшите нагрузку на один сервер.

image-20210904204757717

Установка Nginx

Установить под окна

1. Скачайте нгинкс

nginx.org/ru/download…Загрузите стабильную версию. Возьмите nginx/Windows-1.20.1 в качестве примера, загрузите nginx-1.20.1.zip напрямую. После загрузки разархивируйте его, и распаковка выглядит следующим образом:

image-20210905103735775

2. Запустите nginx

  • Дважды щелкните nginx.exe напрямую, и после двойного щелчка начнет мигать черное всплывающее окно.

  • Откройте командное окно cmd, перейдите в каталог распаковки nginx и введите командуnginx.exe, просто нажмите Enter

3. Проверьте, успешно ли запущен nginx

Введите URL прямо в адресную строку браузераhttp://localhost:80Нажмите Enter, появится следующая страница, свидетельствующая об успешном запуске!

image-20210905103934702

Докер устанавливает nginx

Моя предыдущая статья также рассказывала об этапах установки под Linux, я использовал установку докера, которая очень проста.

Соответствующие ссылки следующие:Docker (3): Docker развертывает Nginx и Tomcat.

1. Просмотр зеркал на всех локальных хостах, с помощью командыdocker images

image-20210904232433522 2. Создайте контейнер nginx и запустите контейнер, с помощью командыdocker run -d --name nginx01 -p 3344:80 nginx

image-20210904233936797

3. Просмотр запущенного контейнера, с помощью командыdocker ps

image-20210904234231750

доступ через браузер服务器ip:3344, как показано ниже, что указывает на то, что установка была успешно начата.

注意: Как подключиться, проверьте, открыты ли порты у группы безопасности Alibaba Cloud, или у брандмауэра сервера есть открытые порты!

image-20210905104039595

Установка под линукс

1. Установите gcc

Для установки nginx нужно сначала скомпилировать исходный код, скачанный с официального сайта, компиляция зависит от среды gcc, если среды gcc нет, то нужно установить:

yum install gcc-c++

2. Установка PCRE pcre-devel

PCRE (Perl-совместимые регулярные выражения) — это Perl-библиотека, включающая Perl-совместимую библиотеку регулярных выражений. Модуль http nginx использует pcre для анализа регулярных выражений, поэтому в Linux необходимо установить библиотеку pcre.pcre-devel — это дополнительная библиотека разработки, разработанная с помощью pcre. nginx также требует эту библиотеку. Заказ:

yum install -y pcre pcre-devel

3. установка zlib

Библиотека zlib предоставляет множество способов сжатия и распаковки.nginx использует zlib для сжатия содержимого http-пакета, поэтому библиотеку zlib необходимо установить на Centos.

yum install -y zlib zlib-devel

4. Установка OpenSSL

OpenSSL — это мощная криптографическая библиотека на уровне защищенных сокетов, включающая основные криптографические алгоритмы, часто используемые функции управления инкапсуляцией ключей и сертификатов и протоколы SSL, а также предоставляет разнообразные приложения для тестирования и других целей. Nginx поддерживает не только протокол http, но и https (то есть передачу http по протоколу ssl), поэтому на Centos нужно установить библиотеку OpenSSL.

yum install -y openssl openssl-devel

5. Скачайте установочный пакет

Вручную загрузите установочный пакет .tar.gz по адресу:nginx.org/ru/download…

image-20210905173049111

После скачивания залить на сервер /root

6. Декомпрессия

tar -zxvf nginx-1.20.1.tar.gz
cd nginx-1.20.1

image-20210905173212111

7. Конфигурация

Используя конфигурацию по умолчанию, выполните в корневом каталоге nginx

./configue
make
make install

Найдите путь установки:whereis nginx

image-20210905181408981

8. Запустите nginx

./nginx

image-20210905181510315

Запущено успешно, посетите страницу: ip:80

image-20210905181740776

Общие команды Nginx

注意: Перед использованием команды операции Nginx необходимо войти в каталог Nginx./usr/local/nginx/sbin

1. Проверьте номер версии Nginx:./nginx -v

image-20210905203751070

2. Запустите Nginx:./nginx

image-20210905201929397

3. Остановить Nginx:./nginx -s stopили./nginx -s quit

image-20210905202644529

4. Перезагрузите файл конфигурации:./nginx -s reload

image-20210905202753783

5. Просмотрите процесс nginx:ps -ef|grep nginx

image-20210905202618893

Конфигурационный файл Nginx

Расположение файла конфигурации Nginx:/usr/local/nginx/conf/nginx.conf

image-20210905204225730

Конфигурационный файл Nginx состоит из 3 частей:


image-20210906151628317

1. Глобальный блок

От начала файла конфигурации до содержимого между блоком событий будут установлены некоторые инструкции по настройке, влияющие на общую работу сервера nginx, например:worker_processes 1.

Это ключевая конфигурация сервиса параллельной обработки сервера Nginx.Чем больше значение worker_processes, тем больше параллельных процессов он может поддерживать, но это будет ограничено аппаратным, программным и другим оборудованием. Общее значение параметра соответствует количеству ядер ЦП.

2. Блок событий

Директивы, задействованные в блоке событий, в основном влияют на сетевое соединение между сервером Nginx и пользователем, например:worker_connections 1024

Указывает, что максимальное количество подключений, поддерживаемых каждым рабочим процессом, равно 1024. Эта часть конфигурации оказывает большое влияние на производительность Nginx и на практике должна быть гибко настроена.

3. http-блок

http {
    include       mime.types;
    
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {
        listen       80;#监听端口
        server_name  localhost;#域名

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
       
        location = /50x.html {
            root   html;
        }

    }

}

Это наиболее частая часть конфигурации сервера Nginx.

Демонстрационный пример

Обратный прокси/балансировщик нагрузки

image-20210906150245880

Демонстрируем под windows, сначала создаем два проекта springboot, порты 9001 и 9002, следующим образом:

image-20210906142059214

Все, что нам нужно сделать, этоlocalhost:80играет рольlocalhost:9001иlocalhost:9002Эти две службы, и пусть опрос доступа к обеим службам.

Конфигурация nginx выглядит следующим образом:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

	upstream jiangwang {
		server 127.0.0.1:9001 weight=1;//轮询其权重都默认为1
		server 127.0.0.1:9002 weight=1;
	}

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://jiangwang;
        }
    }

}

Сначала мы вводим проект в пакет jar, затем запускаем проект из командной строки, а затем получаем доступ к нему в браузере.localhostЧтобы получить доступ к этим двум проектам, я также распечатал журнал в проекте и использовал его, чтобы увидеть результат, были ли опрошены два проекта и доступ к ним.

image-20210906144202974

image-20210906144224135

можно увидеть, посетитьlocalhost, осуществляется доступ к двум опрошенным элементам.

Далее мы меняем веса на следующие настройки:

upstream jiangwang {
    server 127.0.0.1:9001 weight=1;
    server 127.0.0.1:9002 weight=3;
}

Перезагрузите файл конфигурации nginx:nginx -s reload

После загрузки посетим егоlocalhost, обратите внимание на долю его посещений:

image-20210906145104854

image-20210906145132494

Результаты показывают, что количество посещений порта 9002 в основном такое же, как и количество посещений порта 9001.3:1.

Динамическое и статическое разделение

1. Поместите статические ресурсы во вновь созданные файлы локально, например: создайте новый файл данных на диске D, а затем создайте две новые папки в папке данных, папку img для хранения изображений, папку html для хранения html файл; как показано ниже:

image-20210906234145869

2. Создайте новый в папке htmla.htmlфайл со следующим содержимым:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Html文件</title>
</head>
<body>
    <p>Hello World</p>
</body>
</html>

3. Поместите фото в папку img следующим образом:

4. Настройте nginxnginx.confдокумент:

location /html/ {
    root   D:/data/;
    index  index.html index.htm;
}

location /img/ {
    root   D:/data/;
    autoindex on;#表示列出当前文件夹中的所有内容
}

5. Запустите nginx, откройте путь к его файлу и введите в браузереhttp://localhost/html/a.html,следующее:

image-20210906233944234

6. Введите в браузереhttp://localhost/img/

image-20210906234039557

Как работает Nginx

mater&worker

image-20210907084101801

После того, как мастер получает сигнал, он назначает задачу на выполнение воркеру, воркеров может быть несколько.

image-20210906235920093

Как работают рабочие

После того, как клиент отправляет запрос мастеру, рабочий механизм получения задач - это не прямое назначение или опрос, а механизм скремблирования.После "захвата" задачи выполнить задачу, то есть выбрать целевой сервер tomcat и т.д. , а затем вернуть результат.

image-20210907104204828

worker_connection

Максимальное количество одновременных обычных статических обращений:worker_connections * worker_processes/ 2; Если в качестве обратного прокси-сервера используется HTTP, максимальное количество одновременныхworker_connections * worker_processes/ 4, поскольку в качестве обратного прокси-сервера каждый параллелизм будет устанавливать соединение с клиентом и соединение с внутренним сервером, что займет два соединения.

Конечно, количество воркеров не самое лучшее, и лучше всего, когда количество воркеров равно количеству процессоров сервера.

преимущество

можно использоватьnginx –s reloadГорячее развертывание с использованием nginx для горячего развертывания Каждый пробуждающий процесс является независимым процессом.Если у одного из них возникает проблема, другие продолжат конкурировать за выполнение процесса запроса, не вызывая прерывания службы.

Суммировать

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

Подробности о лотерее

  1. Прежде всего, вы должны участвовать в комментариях, я надеюсь, что вы можете прочитать статью, а не просто делать смайлики или что-то в этом роде.

  2. Помните点赞、关注, пошевелите мизинцем, спасибо!

  3. Насчет того, как быть честным, я тоже думал об этом, я создам лотерейную группу, я пришлю красный конверт, ты его возьмешь, и тот, у кого будет наименьшая сумма, получит приз. Или у вас, ребята, есть лучший способ рассказать мне в разделе комментариев. Если я думаю, что это лучше, я возьму его.

  4. Если моя область комментариев будет в топе 1-5, я получу 1 новый набор значков или 1 новую футболку Nuggets IPT, а также подарю друзьям в области комментариев, при условии, что вы обратите внимание на мой публичный аккаунт: WeChat Найдите [первые мысли и первую любовь].