Руководство по серии Nginx
10-минутное руководство для начинающих по Nginx для Xiaobai
Компиляция и установка Nginx и общие команды
Подробные шаги для полного удаления nginx
Подробный файл конфигурации Nginx
Поймите разницу между прямым прокси и обратным прокси
В этой статье вы познакомитесь с обратным прокси-сервером Nginx.
В этой статье вы познакомитесь с директивой location в nginx.
предисловие
nginx
Nginx — высокопроизводительныйhttp 服务器
/反向代理服务器
а также电子邮件
(IMAP/POP3) прокси-сервер. Официальный тестовый nginx может поддерживать5万
Одновременные соединения и потребление ресурсов, таких как процессор и память, очень низкие, а работа очень стабильная.
Балансировка нагрузки
Что такое балансировка нагрузки Буквально это можно интерпретировать как N серверов, поровну распределяющих нагрузку, и не будет ситуации, когда сервер простаивает из-за простоя определенного сервера с высокой нагрузкой. Тогда предпосылкой балансировки нагрузки является наличие нескольких серверов, целью которых является достижение высокой производительности и высокой доступности всей системы.
1. Введение в балансировку нагрузки Nginx
Введение в концепции обратного прокси и балансировки нагрузки
Строго говоря,Nginx
как толькоNginx Proxy反向代理
Он используется, потому что эффект этой функции обратного прокси-сервера — это эффект кластера балансировки нагрузки, поэтому в этой статье он называется балансировкой нагрузки Nginx. Так,В чем разница между обратным прокси и балансировкой нагрузки?
-
Обычное программное обеспечение балансировки нагрузки, такое как знаменитый LVS, на самом деле работает только для пересылки (и, возможно, перезаписи) и доставки пакетов запросов. Очевидная особенность режима DR заключается в том, что с точки зрения нод-сервера под балансировщиком нагрузки полученный запрос все еще является реальным пользователем от клиента, обращающегося к балансировщику нагрузки.
-
Обратный прокси-сервер отличается.После того, как обратный прокси-сервер получит запрос пользователя доступа, он будет проксировать пользователя для повторной инициации сервера узла под прокси-сервером запроса и, наконец, вернет данные пользователю-клиенту. сервер узла, сервер узла, к которому осуществляется доступ Клиентский пользователь является обратным прокси-сервером, а не реальным посетителем веб-сайта.
-
Одним словом, балансировка нагрузки, такая как LVS, предназначена для пересылки пакетов данных, запрошенных пользователями, в то время как обратный прокси-сервер Nginx предназначен для прокси-сервера пользователя для повторной инициации сервера узла под прокси-сервером запроса после получения запроса пользователя.
2. Компонентный модуль балансировки нагрузки Nginx
Есть два основных компонента для реализации балансировки нагрузки Nginx:
-
ngx_http_upstream_module
Модуль балансировки нагрузки может реализовать функцию балансировки нагрузки веб-сайта и проверку работоспособности узлов.
-
ngx_http_proxy_module
Модуль прокси используется для пересылки запросов на серверные узлы или пулы вышестоящих серверов.
2.1, восходящий модуль
(1) Введение в восходящий модуль
Модуль upstream позволяет Nginx определять одну или несколько групп групп серверов узла.При использовании запрос веб-сайта может быть отправлен на имя соответствующей группы upstream, определенное заранее, с помощью прокси-метода proxy_pass.Конкретный метод записи:
proxy_pass http://server_pools
где server_pools — это имя группы серверов вышестоящего узла.
(2) случай восходящей конфигурации
范例1:基本的upstream配置案例:
upstream server_pools {
upstream是关键字必须有,后面的server_pools是upstream集群组的名字,可自定义名称,调用时就用这个名字。
server 192.168.1.251:80 weight=5;
server 192.168.1.252:80 weight=10;
server 192.168.1.253:80 weight=15;
server关键字是固定的,后面可以接域名或IP。如果不指定端口,默认是80端口。weight代表权重,数值越大被分配的请求越多。
}
范例2:较完整的upstream配置案例:
upstream blog__pools {
server 192.168.0.223; #这行标签和下行是等价的
server 192.168.0.224:80 weight=1 max_fails=1 fail_timeout=10s; #这行标签和上一行是等价的,此行多余的部分就是默认配置,不写也可以。
server 192.168.0.225:80 weight=1 max_fails=2 fail_timeout=20s backup;
server最后面可以加很多参数,具体参数作用看下文的表格
}
(3) параметры восходящего модуля
server
Конфигурация RS за нагрузкой может быть IP или доменным именем.
weight
Вес сервера запросов. Значение по умолчанию равно 1, и чем больше значение, тем больше доля принятых запросов.
max_fails
Количество неудачных попыток nginx подключиться к серверному хосту.
Это значение должно совпадатьproxy_net_upstream
,fastcgi_next_upstream
а такжеmemcached_next_upstream
Эти три параметра используются.
Когда nginx получает код состояния, определяемый этими тремя параметрами, возвращаемыми внутренним сервером, он перенаправляет запрос на обычный работающий внутренний сервер, например 404, 502, 503.
fail_timeout
существуетmax_fails
После определенного количества сбоев интервал времени от следующей проверки, по умолчанию 10 с
backup
Конфигурация горячего резерва, помечающая этот сервер как резервный сервер, если все основные серверы не работают, запрос будет перенаправлен на него.
down
Указывает, что этот сервер никогда не доступен и может использоваться с ip_hash.
пример:
upstream web_pools {
server linux.example.com weight=5;
server 127.0.0.1:8080 max_fail=5 fail_timeout=10s;
// 当5次连续检查失败后,间隔10s后重新检测。
server linux.example.com:8080 backup;
// 指定备份服务器。作用:等上面服务器全部不可访问时就向它转发请求。
}
2.2, модуль http_proxy_module
(1) Введение в инструкцию proxy_pass
proxy_pass
инструкция принадлежитngx_http_proxy_module
модуль, этот модуль может пересылать запросы на другой сервер. В реальной работе обратного прокси он будет проходить черезlocation
Функция сопоставляет указанный URI, а затем сопоставляет полученное совпадение.URI
запрос черезproxy_pass
к определенномуupstream
пул узлов.
содержание местоположения, ссылка:В этой статье подробно рассматривается директива location в nginx.
(2) Варианты использования proxy_pass
location /web/ {
proxy_pass http://127.0.0.1/abc/;
}
Отправлять запросы, соответствующие URI как веб-сайту, на http://127.0.0.1/abc/
(3) параметры модуля http-прокси
proxy_set_header
Установите элемент заголовка HTTP-запроса, который будет передан узлу внутреннего сервера. Например, можно добиться того, чтобы серверный узел в бэкенде прокси мог получить реальный IP-адрес пользователя, обращающегося к клиенту.
client_body_buffer_size
Используется для указания размера буфера темы запроса клиента.
proxy_connect_timeout
Указывает период ожидания для соединения между обратным прокси-сервером и сервером внутреннего узла, то есть период ожидания для инициирования рукопожатия и ожидания ответа.
proxy_send_timeout
Указывает время возврата данных бэкенд-сервера прокси, то есть в течение указанного времени бэкенд-сервер должен передать все данные, иначе nginx разорвет соединение
proxy_read_timeout
Установите время, в течение которого nginx будет получать информацию от внутреннего сервера прокси-сервера, указав, что после успешного установления соединения nginx ожидает время ответа внутреннего сервера, которое на самом деле является временем, которое nginx ожидает в фоновом режиме. конец для обработки
proxy_buffer_size
Установите размер буфера.По умолчанию размер буфера равен размеру, заданному командой proxy_buffers.
proxy_buffers
Установите номер и размер буфера, в буфер будет помещаться ответная информация, полученная nginx от внутреннего сервера прокси.
proxy_busy_buffers_size
Используется для установки размера proxy_buffers, который можно использовать, когда система очень загружена.Официальный рекомендуемый размер: proxy_bufer*2.
proxy_temp_file_write_size
Указывает размер временных файлов кэша прокси.
3. Алгоритм планирования балансировки нагрузки Nginx
(1) rr опрос (по умолчанию)
Алгоритм планирования по умолчанию назначается разным внутренним серверам один за другим по запросу клиента, а время простоя автоматически удаляется из пула узловых серверов.
upstream server_pools {
server 192.168.1.251;
server 192.168.1.252;
}
Примечание: для серверов
性能不同
кластеры, алгоритм склонен к资源分配不合理
И другие вопросы.
(2) wrr взвешенный опрос (вес)
На основе алгоритма опроса rr добавляется вес, и вес пропорционален доступу пользователя, чем больше значение веса, тем больше запросов пересылается.
upstream server_pools {
server 192.168.1.251 weight=5;
server 192.168.1.252 weight=10;
}
Взвешенный циклический перебор используется в кластерах с неравной производительностью серверов для рационализации распределения ресурсов.
(3) ip_hash (сохранение сеанса)
за запрос по IP доступаhash
Распределение результата, каждый посетитель фиксированно обращается к бэкэнд серверу, что можно решитьsession
Не делитесь проблемой.
upstream server_pools {
ip_hash;
server 192.168.1.251;
server 192.168.1.252;
}
Сессия не разделена означает, что при условии, что пользователь вошел в систему, запрос, выданный в это время, назначается серверу A, но сервер A внезапно выходит из строя, и запрос пользователя будет перенаправлен на сервер B. Но поскольку сеанс не является общим, B не может напрямую прочитать информацию о входе пользователя, чтобы продолжить выполнение других операций.
(4) справедливый (алгоритм динамического планирования)
Запросы распределяются в соответствии со временем отклика сервера внутреннего узла, и приоритет отдается тем, у которых короткое время отклика.
upstream server_pools {
server 192.168.1.251;
server 192.168.1.252;
fair;
}
Это более умный алгоритм планирования, но Nginx
本身不支持
Алгоритм справедливого планирования. Если вам нужно использовать справедливое планирование, вы должны загрузить модули, связанные с Nginx.upstream_fair
.
(5) алгоритм url_hash (узел веб-кеша)
Распределяйте запросы на основе результата хеширования URL-адреса, к которому осуществляется доступ, чтобы каждый URL-адрес был направлен на один и тот же внутренний сервер.
upstream server_pools {
server qll:9001;
server qll:9002;
hash $request_uri;
hash_method crc32;
}
Точно так же сам Nginx не поддерживает url_hash.Если вам нужно использовать этот алгоритм планирования, вы должны установить пакет хэш-модуля Nginx.
4. Пример настройки балансировки нагрузки Nginx
(1) Осознайте эффект
Введите адрес в браузереhttp://www.qll.com
, для достижения эффекта балансировки нагрузки (средний доступ к двум серверам)
(2) Подготовка
а) Подготовьте 3 сервера nginx следующим образом:
Имя процессора | айпи адрес | Описание роли |
---|---|---|
web01 | 10.43.187.251 | сервер nginx web01 |
web02 | 10.43.187.252 | сервер nginx web01 |
lb | 10.43.187.253 | сервер балансировки нагрузки nginx |
Не делайте)三台服务器均安装nginx
Установите nginx, см.:Компиляция и установка Nginx и общие команды
c) Настройте веб-сервис для тестирования
Уведомление: Этот подраздел находится в
两台Nginx Web
Операция на сервере
[root@web01 nginx]# cat conf/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html/www;
index index.html index.htm;
}
access_log logs/access_www.log main;
}
}
Создать данные тестового файла
[root@web01 ~]# cd /usr/local/nginx/html/ [root@web01 html]# mkdir www [root@web01 www]# echo "`hostname` www" > index.html
查看创建的文件内容: [root@qll251 www]# cat index.html web01 www
Не забудьте запустить службу nginx
г) Настройте сервер балансировки нагрузки nginx.
[root@lb01 nginx]# cat conf/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream www_server_pools { #这里定义Web服务器池,包含了251,252两个Web节点
server 10.43.187.251:80 weight=1;
server 10.43.187.252:80 weight=1;
}
server { #这里定义代理的负载均衡域名虚拟主机
listen 80;
server_name www.qll.com;
location / {
proxy_pass http://www_server_pools; #访问www.qll.com,请求发送给www_server_pools里面的节点
}
}
}
e) Разрешение доменного имени
Поскольку это не настоящая среда, используется доменное имяwww.qll.com
Он используется для тестирования, поэтому разрешение www.qll.com можно задать только в файле hosts.
Открыть:
C:\Windows\System32\drivers\etc\hosts
Добавьте в конце:
10.43.187.253 www.qll.com
(3) Тестовая проверка
Открытый доступ в браузереwww.qll.com
, вы обнаружите, что все запросы распределяются между web01 (10.43.187.251) и web02 (10.43.187.252) сервером балансировки нагрузки (10.43.187.253), достигая эффекта балансировки нагрузки.
Эпилог
Добро пожаловать в публичный аккаунт WeChat »开源Linux
』, фокусируется на совместном использовании контента, связанного с Linux/Unix, включая эксплуатацию и обслуживание Linux, разработку системы Linux, сетевое программирование и техническую галантерею, такую как виртуализация и облачные вычисления. Отвечу на «Обучение» в фоновом режиме и отправлю вам серию книг для изучения Linux, с нетерпением жду встречи с вами.