nginx реализует балансировку нагрузки + файловый сервер

задняя часть Nginx
nginx реализует балансировку нагрузки + файловый сервер

Это 26-й день моего участия в Gengwen Challenge.Подробности о мероприятии:Обновить вызов

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

Установка Nginx

нажмите на меня, чтобы скачать

  • После загрузки мы можем напрямую щелкнуть, чтобы запустить службу

Дружеское напоминание: путь nginx не может содержать китайские символы这里写图片描述

  • Либо запускаем службу через команду cmd. Сначала перейдите в каталог D:\Chirs\Downloads\nginx-1.11.11\nginx-1.11.11, чтобы выполнить команду
nginx
  • Кстати, команда выключения:
nginx -s  stop 
  • Это так просто, и nginx включен. Чтобы проверить успешность открытия, достаточно открыть браузер и ввести 127.0.0.1 или localhost

这里写图片描述

Основные команды Nginx

  • Команда запуска уже упоминалась выше: nginx.exe

Перезапуск: nginx.exe -s перезагрузить Закрыть: nginx.exe -s остановить Проверить корректность конфигурации: nginx.exe -t

Дружеское напоминание: попробуйте использовать команду перезагрузки при перезапуске. Некоторым людям нравится сначала закрывать службу, а затем запускать ее. Таким образом, если измененная конфигурация неверна, это повлияет на использование nginx. Если используется команда перезапуска, даже если измененная конфигурация неверна, она влияет только на вновь измененную функцию, и предыдущая служба все еще может быть выполнена.

Nginx и Tomcat достигают балансировки нагрузки

  • В нынешнюю эпоху больших данных с десятками тысяч посещений распространение является фактором, который мы должны учитывать. Тогда nginx может помочь нам уменьшить давление больших данных. Мы можем отправлять запросы на разные томаты через обратный прокси Nginx, что значительно снижает нагрузку на наш сервер.

Подготовьте двух котов

  • Чтобы добиться балансировки нагрузки, нам нужно иметь несколько серверов, чтобы nginx мог равномерно распределять запросы между разными сервисами. Так что здесь, чтобы замаскировать эффект, мы подготавливаем только два сервера (Tomcat). Вы можете настроить различные порты доступа.

nginx.conf

Сначала разместите раздел файла конфигурации Windows на официальном сайте. Ниже приводится объяснение по одному.


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


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

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

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

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

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


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

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

}

  • #user nobody;: Атрибут пользователя в windows задавать не нужно, и комментарии людей явно никто не пишет, а вот в линукс системах мы рекомендуем писать user nginx (пользователь) nginx (группа).

  • worker_processes 1;: рабочий процесс обычно ЦП * 2

  • error_log: адрес файла регистрации ошибок nginx.

  • pid: В Windows у каждого процесса есть свой pid в фоновом режиме.

这里写图片描述

  • events: установить в нем некоторые свойства, например количество подключений worker_connections

  • http: http — это nginx для достижения балансировки нагрузки через установленный http

-  `include mime.types;` : 设定mime类型,类型由mime.type文件定义

-  `default_type application/octet-stream;` : 设置默认的请求类型

- `log_format`  : 日志的输出格式。

-  日志格式参数解释:
-  `$remote_addr`与`$http_x_forwarded_for`用以记录客户端的ip地址;

-  $remote_user:用来记录客户端用户名称;

-  $time_local: 用来记录访问时间与时区;

-  $request: 用来记录请求的url与http协议;

-  $status: 用来记录请求状态;成功是200,

-  $body_bytes_sent :记录发送给客户端文件主体内容大小;

-  $http_referer:用来记录从那个页面链接访问过来的;

-  $http_user_agent:记录客户浏览器的相关信息;

-  `sendfile on;` : sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。

-  `tcp_nopush on;`: 此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用   

подробный

модификация nginx.conf

  • Выше мы подробно представили настройки различных параметров nginx. Перед настройкой давайте посмотрим на расположение исходной конфигурации nginx http

这里写图片描述

  • Из приведенного выше видно, что когда мы посещаем localhost(server_name):80(listen), nginx автоматически переходит на страницу index.html или index.htm в папке html.

这里写图片描述

  • Что нам нужно сделать сейчас, так это случайным образом перейти к нашему назначенному Tomcat при доступе к nginx. Я считаю, что все это знают, просто измените путь сопоставления местоположения. Но наш путь сопоставления — это селектор, поэтому сначала мы создаем селектор.
upstream mynginxserver {
        server 192.168.1.183:8888 weight=2;
        server 192.168.1.183:8080 weight=1;
  }
  • Среди них weight — это вес, то есть nginx выбирает сервис по этому весу при его случайном выборе.

  • Затем мы сопоставляем путь сопоставления местоположения с mynginserver.

location / {
			proxy_pass http://mynginxserver;
        }

Примечание: за proxy_pass должен следоватьhttp://.

  • После того, как все настроено, перезапускаем nginx (nginx.exe -s reload). А пока давайте взглянем на эффект двух обращений к Tomcat соответственно.

Обратите внимание, что порт пути отличается Томкэт1:这里写图片描述

Томкэт2:这里写图片描述

Затем мы обращаемся к порту nginx в это время:http://192.168.1.183:802/springtests/

这里写图片描述 这里写图片描述

  • Вышеприведенный эффект представляет собой тот же запрос, но запрошенная страница представляет собой две страницы, которые на самом деле являются запрошенными двумя Tomcats. В нашей реальной работе мы разместим один и тот же проект на обоих Tomcat. Таким образом, пользовательский опыт — это тот же проект, но мы добились балансировки нагрузки.

Несколько стратегий балансировки нагрузки

  • Мы достигли балансировки нагрузки выше. nginx предоставляет мне стратегии для балансировки нагрузки.

  • Стратегия по умолчанию -- опрос:

upstream mynginxserver {
        server 192.168.1.183:8888;
        server 192.168.1.183:8080;
    }

Запрашивайте разные Tomcats в хронологическом порядке запросов. Если один из них не работает, он автоматически игнорируется.

  • Наименьшее количество ссылок: как следует из названия, тот, у кого наименьшее количество связей при выборе, выбирает того, кого
upstream mynginxserver {
	least_conn;
        server 192.168.1.183:8888;
        server 192.168.1.183:8080;
    }
  • Вес: Этот метод также является методом, который я использовал для достижения балансировки нагрузки выше. Значение по умолчанию — 1. То есть при выборе которого Tomcat отправить, он судит в зависимости от веса томата.
upstream mynginxserver {
        server 192.168.1.183:8888 weight=2;
        server 192.168.1.183:8080 weight=1;
    }
  • ip_hash : это для вычисления соответствующего хеш-значения в соответствии с IP-адресом текущего запроса, а затем выбора соответствующего Tomcat в соответствии с хеш-значением. Этот эффект заключается в том, что клиент обращается к одному и тому же Tomcat от начала до конца. Сессия здесь такая же.
upstream mynginxserver {
	ip_hash;
        server 192.168.1.183:8888 ;
        server 192.168.1.183:8080 ;
    }
  • url_hash: а ip_hash — это эффект
upstream mynginxserver {
	hash $request_url;
        server 192.168.1.183:8888;
        server 192.168.1.183:8080;
    }
  • справедливо: на основе времени отклика. У кого короткое время отклика, хоть у кого.
upstream mynginxserver {
        server 192.168.1.183:8888 ;
        server 192.168.1.183:8080 ;
        fair;
    }

сопоставление адресов nginx

  • Помимо балансировки нагрузки на сервер, nginx также имеет яркое пятно в отображении адресов. Используется в качестве сервера ресурсов. В нашей веб-разработке нам часто нужно загружать ресурсы в сервис. Мы не всегда можем размещать ресурсы на Tomcat. Это значительно увеличит нагрузку на Tomcat. И эти данные легко потерять. nginx может решить эту проблему.

  • На самом деле сопоставление адресов было реализовано, когда выше реализована балансировка нагрузки. location — это мост сопоставления адресов.

location ~ ^/images/(.*) 

         # location ~ ^/images/(.*\.jpg) 

         #“.”表示任何字符,“*”表示任意数量,

         #“\.jpg”表示jpg后缀名的文件

      {

         expires 1s;

         alias D:/zxh/test/$1;   #“$1”表是location后面()的内容

         index  index.html index.htm;

         break;

      }

Приведенное выше расположение указывает, что оно будет сопоставлено с папкой D:/zxh/test в форме server+port+^images^.^. Например, я захожу в браузере:http://192.168.1.183:802/images/test.jpg

В это время nginx получит доступ к изображению test.jpg в папке D:/zxh/test.这里写图片描述

这里写图片描述