Это 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.