Эта статья разрешает эксклюзивное использование общедоступной учетной записи сообщества разработчиков Nuggets, включая, помимо прочего, редактирование, пометку оригинальности и другие права.
Поскольку существует множество сред разработки, сред разработки, тестовых сред, предварительных сред и т. д., для настройки прокси часто используется nginx. Но я умею только им пользоваться, а со знаниями nginx хочу тщательно разобраться.
1. Что такое Nginx
Nginx(двигатель х) — высокая производительностьHTTPиобратный проксивеб сервер.
Nginx написан на основе событий, поэтому он имеет очень хорошую производительность, а также является очень эффективным обратным прокси-сервером и сервером балансировки нагрузки. С точки зрения производительности Nginx занимает очень мало системных ресурсов, может поддерживать больше одновременных подключений и достигать более высокой эффективности доступа; с точки зрения функций Nginx является отличным прокси-сервером и сервером балансировки нагрузки; с точки зрения конфигурации установки Nginx легко установить , гибкая конфигурация.
Nginx поддерживает горячее развертывание с чрезвычайно высокой скоростью запуска, а также может обновлять версии программного обеспечения или конфигурации без прерывания обслуживания, даже если оно работает в течение нескольких месяцев без перезапуска.
В системе микросервисов Nginx используется все большим количеством проектов в качестве шлюза и взаимодействует с Lua для управления текущим ограничением и слиянием.
Здесь упоминается обратный прокси, что такое обратный прокси?
Nginx перенаправляет запрос на разные машины, разные порты (или напрямую возвращает результат) в соответствии с портом, доменным именем и URL-адресом полученного запроса, а затем возвращает возвращенные данные клиенту.
В шаблоне проектирования Java шаблон прокси определяется следующим образом: прокси-объект предоставляется объекту, и прокси-объект управляет ссылкой на исходный объект.
Обратный прокси: клиент 1 > прокси сервер
Пример обратного прокси с арендодателем:
А (клиент) хочет снять дом, а Б (агент) сдает ему дом.
В настоящее время C (сервер) фактически является арендодателем.
Б (агент) — посредник, сдающий дом А (клиенту).
В этом процессе А (клиент) не знает, кто является домовладельцем дома.
Он может подумать, что этот дом Б (агент)
Функции обратного прокси
- Nginx не имеет собственного адреса, его адрес — это адрес сервера, например www.baidu.com, для внешнего мира он является производителем данных.
- Nginx четко знает, к какому серверу ему следует обратиться для получения данных (еще до получения запроса он уже определил, к какому серверу ему следует подключиться)
Если есть реверс, должен быть и форвард.
Так называемый прямой прокси — это прокси, который следует направлению запроса, то есть прокси-сервер настроен вами для обслуживания вас и запроса адреса целевого сервера. Самая большая особенность прямого прокси-сервера заключается в том, что клиент очень четко знает адрес сервера, к которому необходимо получить доступ; сервер знает только, с какого прокси-сервера исходит запрос, но не от какого конкретного клиента; режим прямого прокси-сервера экранирует или скрывает реальная информация о клиенте
Прямой прокси: клиент прокси один> сервер
Форвард-агент также просто использует аналогию с арендой дома:
A (клиент) хочет арендовать дом C (сервера), но A (клиент) не знает, что C (сервер) не может его арендовать.
B (агент) знает, что C (сервер) может арендовать этот дом, поэтому вы находите B (агента), чтобы помочь арендовать этот дом.
В этом процессе C (сервер) не знает A (клиент), а знает только B (агент).
C (сервер) не знает, что A (клиент) арендует дом, только то, что дом сдается B (агенту).
2. Сценарии применения Nginx
1,http-сервер. Nginx — это http-сервис, который может предоставлять http-сервисы независимо. Его можно использовать как статический веб-сервер.
2,виртуальный хост. Несколько веб-сайтов могут быть виртуализированы на одном сервере. Например, веб-хостинг, используемый личными веб-сайтами.
- на основе портов, разные порты
- На основе домена, разные доменные имена
3.Обратный прокси, балансировка нагрузки. Когда трафик веб-сайта достигает определенного уровня, когда один сервер не может удовлетворить запрос пользователя, необходимо использовать несколько кластеров серверов для использования nginx в качестве обратного прокси. Кроме того, несколько серверов могут поровну распределять нагрузку, и не будет ситуации, когда сервер простаивает из-за высокой загрузки определенного сервера.
3. Установите Nginx
4. Команда
nginx -s reopen #重启Nginx
nginx -s reload #重新加载Nginx配置文件,然后以优雅的方式重启Nginx
nginx -s stop #强制停止Nginx服务
nginx -s quit #优雅地停止Nginx服务(即处理完所有请求后再停止服务)
nginx -?,-h #打开帮助信息
nginx -v #显示版本信息并退出
nginx -V #显示版本和配置选项信息,然后退出
nginx -t #检测配置文件是否有语法错误,然后退出
nginx -T #检测配置文件是否有语法错误,转储并退出
nginx -q #在检测配置文件期间屏蔽非错误信息
nginx -p prefix #设置前缀路径(默认是:/usr/share/nginx/)nginx -c filename #设置配置文件(默认是:/etc/nginx/nginx.conf)
nginx -g directives #设置配置文件外的全局指令
killall nginx #杀死所有nginx进程
свалка:Данные на таких устройствах, как память, ЦП и ввод-вывод, являются динамическими (или энергозависимыми), что означает, что данные будут потеряны, когда они будут израсходованы или возникнет исключение. Если я хочу получить данные в какой-то момент (возможно, для отладки ошибки или сбора какой-то информации), мне нужно выгрузить их в статическую (например, в файл) форму. В противном случае у вас никогда не будет доступа к этим данным.
5. Конфигурация Nginx
Основной файл конфигурации Nginx: nginx.conf.
Конфигурация внутри в основном следующая:
# 全局区 有一个工作子进程,一般设置为CPU数 * 核数
worker_processes 1;
events {
# 一般是配置nginx进程与连接的特性
# 如1个word能同时允许多少连接,一个子进程最大允许连接1024个连接
worker_connections 1024;
}
# 配置HTTP服务器配置段
http {
# 配置虚拟主机段
server {
# 定位,把特殊的路径或文件再次定位。
location {
}
}
server {
...
}
}
Мы можем четко разделить файл конфигурации nginx.conf на три части:
Глобальный блок:От начала файла конфигурации до содержимого между блоком событий будут установлены некоторые инструкции по настройке, влияющие на общую работу сервера nginx, в основном включая настройку пользователя (группы), запускающего сервер Nginx, количество разрешенных рабочих процессов путь хранения PID процесса, журнал, путь и тип хранилища, введение файлов конфигурации и т. д.
Например, первая строка конфигурации выше:
worker_processes 1;
Это ключевая конфигурация сервиса параллельной обработки сервера Nginx.Чем больше значение worker_processes, тем больше параллельных процессов он может поддерживать, но это будет ограничено аппаратным, программным и другим оборудованием.
**блок событий:** задействованные инструкции в основном влияют на сетевое соединение между сервером Nginx и пользователем. Общие настройки включают в себя, следует ли включить сериализацию сетевых подключений в рамках нескольких рабочих процессов, разрешить ли получение нескольких сетевых подключений одновременно. время и какой из них выбрать.Управляемая событиями модель для обработки запросов на подключение, максимальное количество одновременных подключений, которые может поддерживать каждый текстовый процесс, и т. д.
http-блок:Здесь находится наиболее частая часть настройки сервера Nginx, большинство функций, таких как определение прокси, кеша и журнала, а также настройка сторонних модулей.
6. Обратный прокси
Обратный прокси был объяснен выше, давайте напишем его сейчас. Когда я настрою обратный прокси в своей компании, я добавлю сервер в http:
server {
listen 80;
server_name dev-customer.sdyxmall.com ;
gzip off;
gzip_buffers 4 16k;
gzip_comp_level 5;
gzip_http_version 1.0;
gzip_min_length 1k;
gzip_types text/plain text/css application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon image/bmp;
gzip_vary on;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}
Затем настройте в hosts:
10.3.100.13 dev-customer.sdyxmall.com
Далее разберемся с синтаксисом:
1 listen *:80 | *:8080 #监听所有80端口和8080端口
2 listen IP_address:port #监听指定的地址和端口号
3 listen IP_address #监听指定ip地址所有端口
4 listen port #监听该端口的所有IP连接
Директива server_name в основном используется для настройки виртуальных хостов на основе имени.
Роль gzip заключается в том, чтобы включить сжатую передачу
Директива location используется для сопоставления URL-адресов.
Директива proxy_pass используется для установки адреса прокси-сервера.
proxy_set_header используется для установки информации заголовка (заголовка запроса), полученного прокси-сервером.
В основном мы понимаем server_name, location, proxy_pass для настройки обратного прокси
7. Nginx управляет виртуальными хостами
Я не сталкивался с этой частью в своей работе, но когда я искал информацию, название выглядело очень высоко, поэтому я специально его изучил. Когда мы хотим виртуализировать несколько веб-сайтов на одном сервере, мы можем использовать для этого виртуальные хосты.
Виртуальный хост использует специальную программно-аппаратную технологию. Он делит хост-сервер, работающий в Интернете, на «виртуальные» хосты. Каждый виртуальный хост может быть независимым веб-сайтом и может иметь независимое доменное имя. С полным набором функций интернет-сервера (WWW, FTP, электронная почта и т. д.), виртуальные хосты на одном хосте полностью независимы. С точки зрения посетителя сайта каждый виртуальный хост ничем не отличается от автономного хоста.
7.1 Веб-хостинг на основе домена
1. Добавьте следующий фрагмент кода в фигурные скобки http:
server {
#监听端口 80
listen 80;
#监听域名feng.com;
server_name feng.com;
location / {
# 相对路径,相对nginx根目录。也可写成绝对路径
root feng;
# 默认跳转到index.html页面
index index.html;
}
}
2. Переключите каталог установки: cd/usr/local/software/nginx
3. Создайте каталог: mkdir feng
4. Создайте новый файл index.html: vi /usr/local/software/nginx/feng/index.html, содержимое файла:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h2>枫</h2>
</body>
</html>
5. Перечитайте файл конфигурации:
/usr/local/software/nginx/sbin/nginx-s reload
kill -HUP идентификатор процесса
6. Настройте собственный хост Windows:
192.168.197.142 feng.com #LinuxIP-адрес сервера
7. Посетите:feng.com:80/
7.2 Конфигурация виртуального хоста на основе портов
server {
listen 2022;
server_name feng.com;
location / {
root /home;
index index.html;
}
}
7.3 Конфигурация виртуального хоста на основе IP-адреса
server {
listen 80;
server_name 192.168.197.142;
location / {
root ip;
index index.html;
}
}
8. Балансировка нагрузки
Что мы чаще всего слышим об использовании Nginx, так это балансировку нагрузки, так что же такое балансировка нагрузки?
**Балансировка нагрузки: **Из-за увеличения объема бизнеса, быстрого роста доступа и трафика данных соответственно увеличиваются вычислительная мощность и интенсивность вычислений каждой основной части существующей сети, что делает фундаментальное оборудование с одним сервером. не могу позволить.
Дешевый, эффективный и прозрачный метод, полученный из этой ситуации, для расширения пропускной способности существующего сетевого оборудования и серверов, увеличения пропускной способности, усиления возможностей обработки сетевых данных и повышения гибкости и доступности сети.Технология балансировки нагрузки (Load Balance).
В Nginx есть несколько вариантов реализации балансировки нагрузки.
8.1 Опрос
Опрос является циклическим.В соответствии с порядком в конфигурационном файле Nginx веб-запросы клиента распределяются по разным внутренним серверам по очереди.
upstream backserver {
server 192.168.0.14;
server 192.168.0.15;
}
8.2 weight
Балансировка нагрузки на основе веса — взвешенная балансировка нагрузки, Таким образом, мы можем настроить Nginx для распределения большего количества запросов на высоконастроенные внутренние серверы и распределения относительно меньшего количества запросов на низкопрофильные серверы.
upstream backserver {
server 192.168.0.14 weight=3;
server 192.168.0.15 weight=7;
}
Чем выше вес, тем больше вероятность обращения, как в приведенном выше примере 30% и 70% соответственно.
8.3 ip_hash
В вышеупомянутых двух схемах балансировки нагрузки непрерывные веб-запросы от одного и того же клиента могут распределяться на разные внутренние серверы для обработки, поэтому, если задействован сеанс, сеанс будет более сложным. Распространенным является сохранение сеанса на основе базы данных. Для преодоления вышеуказанных трудностей можно использовать схему балансировки нагрузки, основанную на хешировании IP-адресов. В этом случае последовательные веб-запросы от одного и того же клиента будут распределяться на один и тот же сервер для обработки.
upstream backserver {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
8.4 fair
Запросы распределяются в соответствии со временем отклика внутреннего сервера, и первыми распределяются запросы с коротким временем отклика.
upstream backserver {
server server1;
server server2;
fair;
}
8.5 url_hash
Распределяйте запросы в соответствии с хеш-результатом доступа к URL-адресам, чтобы каждый URL-адрес был направлен на один и тот же (соответствующий) внутренний сервер, что более эффективно, когда внутренний сервер кэшируется.
upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
Увеличение количества серверов, которым необходимо использовать балансировку нагрузки.
proxy_pass http://backserver/;
upstream backserver{
ip_hash;
server 127.0.0.1:9090 down; (down 表示单前的server暂时不参与负载)
server 127.0.0.1:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大)
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器)
}
max_fails : допустимое количество неудачных запросов по умолчанию равно 1. Когда максимальное количество раз превышено, возвращается ошибка, определенная модулем proxy_next_upstream.
fail_timeout: время паузы после сбоев max_fails.
Пример конфигурации:
#user nobody;
worker_processes 4;
events {
# 最大并发数
worker_connections 1024;
}
http{
# 待选服务器列表
upstream myproject{
# ip_hash指令,将同一用户引入同一服务器。
ip_hash;
server 125.219.42.4 fail_timeout=60s;
server 172.31.2.183;
}
server{
# 监听端口
listen 80;
# 根目录下
location / {
# 选择哪个服务器列表
proxy_pass http://myproject;
}
}
}
8.6 Углубленная практика
Выше приведены все решения для балансировки нагрузки.Что касается конкретной реализации, я видел, что Zhihu написал очень хорошо, и выглядит красиво, чтобы взлететь.
адрес:zhuanlan.zhihu.com/p/32122459
9. Резюме
Nginx действительно мощный, и его используют все шире и шире.Хотя я мало использую его в компании, я получил много знаний о Nginx, и у меня появилось больше идей по построению и оптимизации проекта. Может быть, его не нужно глубоко понимать, этого достаточно для удовлетворения наших повседневных потребностей.Знание этого, когда мы работаем над проектом или решаем проблему, может быть использовано в качестве решения для нас, это очень приятно.