Экземпляр конфигурации
пойматьОт принципа к реальному бою, досконально изучите Nginx, эта статья представляет собой продвинутую практическую работу с Nginx. Путем настройки конфигурационного файла Nginx реализуются 6 функций прямого прокси, обратного прокси, балансировки нагрузки, кеша Nginx, динамического и статического разделения и высокой доступности Nginx, а также анализируется принцип работы Nginx. Когда вам нужно использовать конфигурационный файл Nginx, вы можете обратиться к примеру в этой статье, его рекомендуется собрать.
1. Прокси вперед
Прокси-объектом прямого прокси-сервера является клиент. Прямой прокси — это прокси-сервер для доступа к целевому серверу от имени клиента.
1.1 Фактический боевой
Осознайте эффект:
введите в браузереwww.google.com, браузер переходит кwww.google.com.
Конкретная конфигурация:
server{
resolver 8.8.8.8;
listen 80;
location / {
proxy_pass http://$http_host$request_uri;
}
}
Выполните одну из следующих операций на клиенте, которому требуется доступ к внешней сети:
1. 方法1(推荐)
export http_proxy=http://你的正向代理服务器地址:代理端口
2. 方法2
vim ~/.bashrc
export http_proxy=http://你的正向代理服务器地址:代理端口
2. Обратный прокси
Обратный прокси-сервер относится к промежуточному серверу, который действует как внутренний прокси-сервер для ответа на запросы клиентов, а прокси-объект — это сервер.
2.1 Фактический боевой
Осознайте эффект:
введите в браузереwww.abc.com, Перейти с сервера nginx на главную страницу tomcat системы linux.
Конкретная конфигурация:
server {
listen 80;
server_name 192.168.4.32; #监听地址
location / {
root html; #/html目录
proxy_pass http://127.0.0.1:8080; #请求转向
index index.html index.htm; #设置默认页
}
}
2.2 Фактический бой II
Осознайте эффект:
В соответствии с разными путями, введенными в браузере, переходить к службам разных портов.
Конкретная конфигурация:
server {
listen 9000;
server_name 192.168.4.32; #监听地址
location ~ /example1/ {
proxy_pass http://127.0.0.1:5000;
}
location ~ /example2/ {
proxy_pass http://127.0.0.1:8080;
}
}
locationОписание инструкции:
- ~ :Указывает, что uri содержит регулярное выражение и учитывает регистр.
- ~* :Указывает, что uri содержит регулярное выражение и не чувствителен к регистру.
- = :Указывает, что uri не содержит регулярных выражений и требует строгого соответствия.
3 Балансировка нагрузки
3.1 Фактический боевой
Осознайте эффект:
введите в адресной строке браузераhttp://192.168.4.32/example/a.html, в среднем до 5000 и 8080 портов для достижения эффекта балансировки нагрузки.
Конкретная конфигурация:
upstream myserver {
server 192.167.4.32:5000;
server 192.168.4.32:8080;
}
server {
listen 80; #监听端口
server_name 192.168.4.32; #监听地址
location / {
root html; #html目录
index index.html index.htm; #设置默认页
proxy_pass http://myserver; #请求转向 myserver 定义的服务器列表
}
}
Политика сервера размещения nginx
-
голосование(дефолт)
распределяются по одному в соответствии с хронологическим порядком запроса, если сервер выходит из строя, он может быть автоматически устранен. -
Веса
Чем выше вес , тем больше клиентов выделено, по умолчанию 1. Например:upstream myserver { server 192.167.4.32:5000 weight=10; server 192.168.4.32:8080 weight=5; }
-
ip
выделяется в соответствии с хеш-значением ip запроса, и каждый посетитель имеет фиксированный доступ к внутреннему серверу. Например:upstream myserver { ip_hash; server 192.167.4.32:5000; server 192.168.4.32:8080; }
-
fair
распределяется в соответствии со временем отклика внутреннего сервера, и запрос с наименьшим временем отклика будет выделен первым. Например:upstream myserver { fair; server 192.168.4.32:5000; server 192.168.4.32:8080; }
4. Кэш Nginx
4.1 Фактический бой 1
Осознайте эффект:
В течение 3 дней доступ через адресную строку браузераhttp://192.168.4.32/a.jpg, ресурс не будет захвачен с сервера, а будет повторно загружен с сервера через 3 дня (истечение).
Конкретная конфигурация:
# http 区域下添加缓存区配置
proxy_cache_path /tmp/nginx_proxy_cache levels=1 keys_zone=cache_one:512m inactive=60s max_size=1000m;
# server 区域下添加缓存配置
location ~ \.(gif|jpg|png|htm|html|css|js)(.*) {
proxy_pass http://192.168.4.32:5000;#如果没有缓存则转向请求
proxy_redirect off;
proxy_cache cache_one;
proxy_cache_valid 200 1h; #对不同的 HTTP 状态码设置不同的缓存时间
proxy_cache_valid 500 1d;
proxy_cache_valid any 1m;
expires 3d;
}
expiresЭто установка времени истечения срока действия ресурса.Установив параметр expires, браузер может кэшировать содержимое до истечения срока действия, уменьшая запросы и трафик с сервером. То есть нет необходимости идти на сервер для проверки, и вы можете напрямую подтвердить, истек ли срок его действия, через сам браузер, поэтому дополнительный трафик не будет генерироваться. Этот подход идеален для ресурсов, которые изменяются нечасто.
5. Динамическое и статическое разделение
5.1 Фактический бой 1
Осознайте эффект:
Доступ через адресную строку браузераwww.abc.com/a.html, чтобы получить доступ к содержимому статических ресурсов сервера статических ресурсов. Доступ через адресную строку браузераwww.abc.com/a.jsp, чтобы получить доступ к содержимому динамических ресурсов сервера динамических ресурсов.
Конкретная конфигурация:
upstream static {
server 192.167.4.31:80;
}
upstream dynamic {
server 192.167.4.32:8080;
}
server {
listen 80; #监听端口
server_name www.abc.com; 监听地址
# 拦截动态资源
location ~ .*\.(php|jsp)$ {
proxy_pass http://dynamic;
}
# 拦截静态资源
location ~ .*\.(jpg|png|htm|html|css|js)$ {
root /data/; #html目录
proxy_pass http://static;
autoindex on;; #自动打开文件列表
}
}
6. Высокая доступность
В нормальных условиях доступ к фоновому целевому сервисному кластеру осуществляется через основной сервер nginx. Когда основной сервер зависает, он автоматически переключается на резервный сервер. В это время резервный сервер действует как основной сервер и обращается к резервному серверу. конечный целевой сервер.
6.1 Фактический бой 1
Осознайте эффект:
Подготовьте два сервера nginx, получите доступ к виртуальному IP-адресу через адресную строку браузера, остановите nginx основного сервера и снова получите доступ к виртуальному IP-адресу.
Конкретная конфигурация:
(1) Установите keepalived на два сервера nginx.
keepalived эквивалентен маршруту, он использует скрипт для определения того, жив ли текущий сервер, если он еще жив, продолжить доступ, в противном случае переключиться на другой резервный сервер.
# 安装 keepalived
yum install keepalived -y
# 检查版本
rpm -q -a keepalived
keepalived-1.3.5-16.el7.x86_64
(2) Измените файл конфигурации /etc/keepalived/keepalivec.conf активного и резервного серверов (которые можно заменить напрямую), чтобы завершить настройку высокой доступности ведущий-ведомый.
keepalived привязывает сервер nginx к виртуальному ip, а кластер высокой доступности nginx выставляет этот виртуальный ip во внешний мир, клиенты получают доступ к серверу nginx, обращаясь к этому виртуальному ip.
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from_Alexandre.Cassen@firewall.loc
smtp_server 192.168.4.32
smtp_connect_timeout 30
router_id LVS_DEVEL # 在 /etc/hosts 文件中配置,通过它能访问到我们的主机
}
vrrp_script_chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2 # 检测脚本执行的时间间隔
weight 2 # 权重每次加2
}
vrrp_instance VI_1 {
interface ens7f0 # 网卡,需根据情况修改
state MASTER # 备份服务器上将 MASTER 改为 BACKUP
virtual_router_id 51 # 主备机的 virtual_router_id 必须相同
priority 100 # 主备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 # 每隔多长时间(默认1s)发送一次心跳,检测服务器是否还活着
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100 # VRRP H 虚拟地址,可以绑定多个
}
}
Поле Описание
-
router_id: настроен в файле /etc/hosts, через который мы можем получить доступ к нашему хосту.
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 127.0.0.1 LVS_DEVEL
-
interval: установите интервал времени для выполнения скрипта
-
вес: когда скрипт не выполняется, то есть зависает keepalived или nginx, значение веса увеличивается (может быть отрицательным).
-
интерфейс: вход
ifconfig
Команда, чтобы узнать, какое имя текущей сетевой карты.ens7f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.4.32 netmask 255.255.252.0 broadcast 192.168.7.255 inet6 fe80::e273:9c3c:e675:7c60 prefixlen 64 scopeid 0x20<link> ... ...
(3) Добавьте скрипт обнаружения nginx_check.sh в каталог /usr/local/src.
#!/bin/bash
A=`ps -C nginx -no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ ps -C nginx -no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
(4) Запустите nginx и продолжайте поддерживать активность на двух серверах.
# 启动 nginx
./nginx
# 启动 keepalived
systemctl start keepalived.service
(5) Просмотр виртуального IP-адресаip a
. Остановите основной сервер 192.168.4.32 nginx и keepalived, а затем посетите виртуальный IP-адрес, чтобы увидеть эффект высокой доступности.
6. Принципиальный анализ
После запуска Nginx в системе Linux есть два процесса, один из которых является ведущим, а другой — рабочим. Как администратор, мастер не участвует ни в какой работе, а отвечает только за назначение различных задач нескольким работникам (обычно их несколько).
ps -ef |grep nginx
root 20473 1 0 2019 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 4628 20473 0 Jan06 ? 00:00:00 nginx: worker process
nginx 4629 20473 0 Jan06 ? 00:00:00 nginx: worker process
Как работают рабочие?
Когда клиент отправляет запрос, он должен сначала пройти через мастер.После получения запроса администратор уведомит worker о запросе.карабкатьсяWorker, который получает задачу, будет пересылать запрос, использовать обратный прокси, обращаться к базе данных и т. д. через tomcat и т. д. (сам nginx напрямую не поддерживает java).
Преимущества одного мастера и нескольких рабочих?
- можно использовать
nginx -s reload
Выполните горячее развертывание. - Каждый воркер является независимым процессом.Если возникает проблема с одним из воркеров, другие воркеры будут работать независимо и будут продолжать конкурировать за задачи для реализации процесса запроса клиента, не вызывая прерывания службы.
Сколько рабочих уместно установить?
Подобно Redis, Nginx использует механизм мультиплексирования ввода-вывода. Каждый рабочий процесс является независимым процессом. В каждом процессе есть только один основной поток. Запросы обрабатываются асинхронно и без блокировки. Поток каждого рабочего процесса может максимизировать производительность. процессора, следовательно,Наиболее целесообразно, чтобы количество рабочих и количество ЦП сервера были равны.
считать:
(1) Сколько подключений воркера будет занято отправкой запроса?
(2) Есть мастер и 4 рабочих, и максимальное количество подключений, поддерживаемых каждым рабочим, равно 1024. Какое максимальное количество одновременных подключений поддерживает система?
Поздравляем! На данный момент вы освоили методы настройки 6 функций Nginx и далее обсудите со мной принципы работы Nginx. Мыслительные вопросы, которые могут быть заданы в последних двух интервью, приветствуются для активного обсуждения в области комментариев. Если эта статья была вам полезна, ставьте лайки и подбадривайте друг друга~