От принципа к реальному бою, досконально изучите Nginx

Nginx

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

1. Введение

  NginxЭто легкий веб-сервер с открытым исходным кодом, обратный прокси-сервер, балансировщик нагрузки и кэш HTTP. Он характеризуется высоким уровнем параллелизма, высокой производительностью и низким объемом памяти.
  NginxОн специально разработан для оптимизации производительности.Производительность является его самым важным фактором.При реализации большое внимание уделяется эффективности.Он может выдержать испытание высокой нагрузкой и может поддерживать до 50 000 одновременных подключений. Nginx также поддерживает горячее развертывание, которое особенно просто в использовании и может работать практически круглосуточно и без выходных. Среди пользователей веб-сайта Nginx: Baidu, Taobao, Jingdong, Tencent, Sina, NetEase и т. д.

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

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

  NginxЕго можно использовать не только в качестве обратного прокси-сервера для балансировки нагрузки, но и в качестве прямого прокси-сервера для доступа в Интернет и других функций.

正向代理原理图

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

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

反向代理原理图

3. Балансировка нагрузки

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

负载均衡原理图

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

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

动静分离原理图

5. Высокая доступность

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

高可用原理图

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

6.1 Структура файла

  Файл конфигурации Nginx состоит из трех частей.

...              #全局块

events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}
  • Первая часть глобального блока
       в основном устанавливает некоторые инструкции по настройке, влияющие на общую работу сервера nginx.
       Например: worker_processes 1; , чем больше значение worker_processes, тем больше параллельных обработок он может поддерживать.

  • Вторая часть блока событий
    Директивы, задействованные в блоке   events, в основном влияют на сетевое соединение между сервером Nginx и пользователем.
       Например: worker_connections 1024; максимальное количество поддерживаемых подключений.

  • Третья часть http блока
      блок http также включает в себя глобальный блок http и блок сервера, который является наиболее частой частью конфигурации сервера, включая настройку прокси, кэширование, определение журнала и другие функции.

    • серверный блок: Настройте соответствующие параметры виртуального хоста.
    • локационный блок: настроить маршрутизацию запросов и обработку различных страниц.

6.2 Файлы конфигурации

########### 每个指令必须有分号结束。#################
#user administrator administrators;  #配置用户或者组,默认为nobody nobody。
#worker_processes 2;  #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址
error_log log/error.log debug;  #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
    accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
    multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
    #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大连接数,默认为512
}
http {
    include       mime.types;   #文件扩展名与文件类型映射表
    default_type  application/octet-stream; #默认文件类型,默认为text/plain
    #access_log off; #取消服务日志    
    log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
    access_log log/access.log myFormat;  #combined为日志格式的默认值
    sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
    sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。

    upstream mysvr {   
      server 127.0.0.1:7878;
      server 192.168.10.121:3333 backup;  #热备
    }
    error_page 404 https://www.baidu.com; #错误页
    server {
        keepalive_requests 120; #单连接请求上限次数。
        listen       4545;   #监听端口
        server_name  127.0.0.1;   #监听地址       
        location  ~*^.+$ {       #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
           #root path;  #根目录
           #index vv.txt;  #设置默认页
           proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表
           deny 127.0.0.1;  #拒绝的ip
           allow 172.18.5.54; #允许的ip           
        } 
    }
}   

7. Настройте экземпляр

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

7.1.1 Фактический бой 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;      #设置默认页       
        } 
    }

7.1.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 не содержит регулярных выражений и требует строгого соответствия.

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

7.2.1 Фактический бой 1

Осознайте эффект:
   введите в адресной строке браузераhttp://192.168.4.32/example/a.htmlСреднее 8080-5000 и порт, эффект балансировки нагрузки.
Конкретная конфигурация:

    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 的 hash 值分配,每个访客固定访问一个后端服务器。 Например:

          upstream myserver { 
            ip_hash;  
            server 192.167.4.32:5000;
            server 192.168.4.32:8080;
          }
    
  • fair
       распределяется в соответствии со временем отклика внутреннего сервера, и запрос с наименьшим временем отклика будет выделен первым. Например:

          upstream myserver { 
            fair;  
            server 192.167.4.32:5000;
            server 192.168.4.32:8080;
          }
    

Поздравляем! Итак, вы освоили основные принципы работы Nginx и можете настроить обратный прокси и балансировку нагрузки. Далее мы обновим расширенный Nginx:От принципа к реальному бою, досконально изучите Nginx (Advanced), включая динамическое и статическое разделение конфигурации Nginx и примеры конфигурации высокой доступности, а также углубленный анализ принципов Nginx. Кодировать слова непросто, пожалуйста, поставьте лайк, чтобы поощрить это~