в предыдущей статьеУчебник Nginx для начинающих по бэкенду: основыВ основном мы говорили о том, что такое Nginx, что он может делать, а также о четырех наиболее важных базовых концепциях Nginx, которыепрямой прокси, Обратный прокси, балансировка нагрузки, динамическое и статическое разделение.
В качестве практической главы эта глава будет начинаться с фактической командной строки, постепенно понимать и использовать Nginx, устанавливая, запуская и настраивая Nginx, и может самостоятельно реализовать некоторые простые конфигурации обратного прокси и балансировки нагрузки.
Без глупостей, сразу к галантерее.
Установка нгинкс:
Установка Nginx относительно проста. Есть автономная установка и онлайн-установка. Существует множество способов установки. Здесь я расскажу только о самом простом. Откройте наш терминал командной строки и напрямую введите команду yum для установки.
yum install -y nginx
Когда терминал отобразит слова Complete!, это означает, что наш Nginx был успешно установлен.
Проверьте версию Nginx:
nginx -v
#在这里我安装的是1.16.1版本的nginx
Основная операция Nginx:
Как и наш предыдущий докер, nginx также имеет некоторые базовые операции, включая запуск, остановку и перезагрузку сервисов.
Запускаем нгинкс:
##在centos7+ 启动nginx服务
systemctl start nginx.service
#centos6+ 上启动nginx服务
service nginx start
#或,简单粗暴一句
nginx
Остановить нгинкс:
##在centos7+ 停止nginx服务
systemctl stop nginx.service
#centos6+ 上停止nginx服务
service nginx stop
#粗鲁的停止,下班了,不干了,就算请求来了我也不接了。
nginx -s stop
##优雅的停止,Nginx在退出前完成已经接受的连接请求。
nginx -s quit
Перезапустите nginx:
Когда мы изменяем некоторые конфигурации nginx, чтобы конфигурация вступила в силу, нам часто требуется перезапустить nginx.Точно так же есть еще два способа перезапустить наш сервис nginx под linux:
##在centos7+ 重启nginx服务
systemctl restart nginx.service
#centos6+ 上重启nginx服务
service nginx restart
#使用nginx命令停止,推荐这个
nginx -s reload
Конкретное использование родной операции nginx nginx -s - это systemctl, предоставляемый linux. Это в основном зависит от личных предпочтений. На самом деле функции этих двух похожи, и нет очевидной разницы.
Другие команды:
Проверьте, в порядке ли файл конфигурации:
#如果配置文件有问题的话会显示failed,如果没得问题的话,会显示successful
nginx -t
Показать справочную информацию:
nginx -h
#或者
nginx -?
Конфигурация Nginx:
Nginx сам по себе является очень полной структурой балансировки нагрузки. Как и во многих зрелых платформах с открытым исходным кодом, большинство функций можно выполнить, изменив файл конфигурации. Пользователям нужно просто изменить файл конфигурации nginx, и это можно очень легко реализовать. Например, обратный прокси-сервер и балансировка нагрузки являются часто используемыми функциями. Точно так же, как и другие платформы с открытым исходным кодом, такие как tomcat, файлы конфигурации nginx также соответствуют соответствующим спецификациям формата и не могут быть настроены в случайном порядке. Я объясню, как использовать nginx для реализации обратного прокси-сервера. Перед настройкой таких функций, как балансировка нагрузки, нам нужно понять структуру файла конфигурации nginx.
Поскольку я хочу понять конфигурационный файл nginx, я должен знать, где находится конфигурационный файл nginx.Файл конфигурации nginx по умолчанию помещается в каталог conf по пути установки nginx, а основной файл конфигурации nginx.conf, естественно, Почти все операции сводятся к модификации конфигурационного файла nginx.conf.
Однако как узнать, где установлен мой nginx? Что делать, если я не знаю, где установлен nginx?
Это, осторожные друзья, могут обнаружить, что при выполнении команды nginx -t следующее не только показывает, в порядке ли файл конфигурации nginx, но также включает путь к файлу конфигурации. Нет, это он
[root@izuf61d3ovm5vx1kknakwrz ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
С помощью vim откройте конфигурационный файл.Давайте посмотрим.Конфигурационный файл разных версий может немного отличаться.Содержимое моего конфигурационного файла следующее:
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
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 /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
?? ?
К чему все это, я вообще не понимаю.
Не беда, давайте подробно разберем содержимое файла nginx.conf.
В соответствии с функцией мы обычно делим файл конфигурации nginx на три основных блока:глобальный блок, блок событий, блок http.
Часть 1: Глобальные блоки
Первая куча, которая бросается в глаза:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
мы называем егоглобальный блок, Очки знаний, друзья, помните, здесь мы в основном установим некоторые инструкции по настройке, которые влияют на общую работу сервера nginx, в основном включая настройку пользователя (группы), запускающего сервер Nginx, количество рабочих процессов, которые разрешено генерировать, и путь хранения PID процесса, путь и тип хранения журнала, а также введение файлов конфигурации.
Например, worker_processes auto; в этой строке, чем больше значение worker_processes, тем больший параллелизм может поддерживать наш nginx. Многие считают, что это круто. Я установил его на плюс бесконечность, флаг бесконечного параллелизма достигается, и Проблема шипов может быть легко решена, это ограничено вашим собственным серверным оборудованием, вы не можете бездельничать.
Вторая часть: блок событий:
events {
worker_connections 1024;
}
Эта связка является второй частью нашего конфигурационного файла,блок событий
Название такое случайное, третья часть называется блоком http?
wc, ты знаешь это, да
Инструкции, задействованные в блоке событий, в основном влияют на сетевое соединение между сервером Nginx и пользователем.Общие настройки включают в себя возможность включения нескольких рабочих процессов. Сериализировать сетевое подключение ниже, разрешено ли одновременное получение нескольких сетевых подключений, какая управляемая событиями модель выбрана для обработки запросов на подключение, каждое слово Максимальное количество одновременных подключений, которое может поддерживать процесс, и т. д.
Третья часть: блок http:
слишком много контента
http {
server {
}
}
Уведомление:
HTTP — это большой блок, который также может включать множество маленьких блоков, таких как глобальный блок http, блок сервера и т. д.
Директивы конфигурации глобального блока http включают импорт файлов, определение MIME-TYPE, настройку журнала, время ожидания соединения, верхний предел одноканальных запросов и т. д.
Блок сервера в блоке http эквивалентен виртуальному хосту, а блок http может иметь несколько блоков сервера.
В серверный блок также входятглобальный серверблок, иlocationкусок.
Блок глобального сервера в основном включает конфигурацию мониторинга хоста виртуальной машины и имя или IP-конфигурацию виртуального хоста.
Блок местоположения используется для сопоставления строк, отличных от имен виртуальных хостов, для обработки определенных запросов. Адресная ориентация, кэширование данных Здесь также выполняются такие функции, как управление хранением и ответами, а также настройка многих сторонних модулей. Например, запросы, относящиеся к /usr, обрабатываются 8080, а /admin — к 8081.
Сказав так много, я так и не особо понял, что делать.Проблема не большая.Далее мы будем использовать несколько примеров, которые помогут вам лучше понять роль этих конфигураций на практике.
Битва конфигураций Nginx:
Далее мы завершим простую настройку обратного прокси, балансировки нагрузки и динамического и статического разделения, изменив файл конфигурации nginx.
nginx настроить обратный прокси:
Я нашел много руководств, в которых говорилось, что когда nginx настраивает обратный прокси, файл хоста изменяется, Здесь, потому что мы суммировали суть обратного прокси в предыдущей статье, а именно:
Обратный прокси-сервер и целевой сервер являются сервером для внешнего мира, который раскрывает адрес прокси-сервера и скрывает реальный IP-адрес сервера.
Итак, далее мы проходим небольшой каштан.Когда мы обращаемся к серверу, поскольку мой сервер не зарегистрирован, порт 80 по умолчанию Алиюна не открыт, поэтому здесь мы устанавливаем порт внешней службы на 8888,Когда мы обращаемся к порту 8888, мы фактически переходим на порт 8080.
Сначала мы запускаем контейнер tomcat с докером, а затем настраиваем сопоставление портов на 8080.
Подожди, а что, если ты не знаешь докер? Если вы не знаете докер, можете посмотреть корейские номераПоследний учебник для начинающих по докеру (забавно)
Если вы мало знаете о докере, вы можете использовать традиционный Linux для запуска tomcat, причина та же.
Затем измените блок server в нашем конфигурационном файле nginx.conf, измененное содержимое выглядит следующим образом:
server {
listen 8888 ; ##设置我们nginx监听端口为8888
server_name [服务器的ip地址];
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
proxy_pass http://127.0.0.1:8080; ##需要代理的服务器地址
index index.html;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
Затем введите в браузере: server ip:8888 и обнаружите, что браузер отображает приветственный интерфейс tomcat на порту 8080, реализуя таким образом требование обратного прокси-сервера, например, скрытие реального адреса сервера.
Ой? Выглядит это так потрясающе.Ну, я часто видел это раньше, то есть разные ссылки /image/video соответствуют разным сайтам.Так это делается?
Смарт, здесь мы создаем новый контейнер tomcat с портом 8081, и в то же время создаем новый собственный каталог в каталоге tomcat webapps в контейнере, здесь он называется hello, и создаем внутри новый файл hello.html, содержание
<h1>I am Hello<h1>
В то же время в контейнере tomcat с портом 8080 мы создаем новый файл home hi в webapps и создаем новый файл hi.html, содержимое которого
<h1>I am Hi<h1>
Ах, сложно ли настроить в этом случае?
Ты слишком много думаешь, постучи просто.
Измените скорость сервера в нашем файле конфигурации следующим образом:
server {
listen 8888 ; ##设置我们nginx监听端口为8888
server_name [服务器的ip地址];
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location /hi/ {
proxy_pass http://127.0.0.1:8080; ##需要代理的服务器地址
index index.html;
}
location /hello/ {
proxy_pass http://127.0.0.1:8081; ##需要代理的服务器地址
index index.html;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
Введите в браузере: ip сервера: 8888/hi/hi.html
отображение в браузереI am hiСоответствующий порт сервера — 8080.
Введите в браузере: ip сервера: 8888/hello/hello.html
отображение в браузереI am helloСоответствующий порт сервера — 8081.
Таким образом реализуется функциональная конфигурация раздачи разных url-запросов на разные серверы.
Подождите, молодой человек, вы что-то забыли? Что означает местоположение /hello/? Вы можете просто написать это так?
конечно, нет. Изучите команду местоположения, чтобы соответствовать пути, и небрежно измените позу.
Описание команды определения местоположения:
Функция: используется для сопоставления URL-адресов
Синтаксис следующий:
1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配
成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字
符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location
块中的正则 uri 和请求字符串做匹配。
Уведомление:
Если uri содержит регулярное выражение, оно должно быть помечено знаком ~ или ~*.
На этом как просто настроить обратный прокси-сервер для nginx сделано, поговорим о том, как добиться простой настройки балансировки нагрузки.
nginx настроить балансировку нагрузки:
Также очень легко настроить балансировку нагрузки в nginx, и он также поддерживает различные стратегии балансировки нагрузки, которые мы можем гибко выбирать. В первую очередь я еще подготавливаю два сервера tomcat, один с портом 8080 и один с портом 8081. Здесь рекомендую развернуть с докером, уж слишком он удобен, что, если вы не знаете докер, то можно перейти на мой базовый вводный курс по докеру, ориентированный на серверную часть. Он действительно прост в использовании и экономит много работы.
бред, реклама
Затем измените наш блок http следующим образом:
http {
###此处省略一大堆没有改的配置
##自定义我们的服务列表
upstream myserver{
server 127.0.0.1:8080;
server 127.0.0.1:8090;
}
server {
listen 8888 ; ##设置我们nginx监听端口为8888
server_name [服务器的ip地址];
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
proxy_pass http://myserver; ##叮,核心配置在这里
proxy_connect_timeout 10; #超时时间,单位秒
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
Это конец?Конечно, еще нет, как я уже говорил, nginx предоставляет нам три разных стратегии балансировки нагрузки, которые мы можем гибко выбирать, а именно:
-
Опрос (по умолчанию):Каждый запрос распределяется по разным бэкенд-серверам один за другим в хронологическом порядке, и если бэкэнд-сервер выходит из строя, он может быть автоматически устранен.
Использование: ничего не добавляется, приведенный выше пример является методом по умолчанию, который используется по умолчанию.
-
Масса:Вес представляет собой вес, значение по умолчанию равно 1, чем выше вес, тем больше клиентов назначено, чем больше вес, тем больше возможностей, больше ответственности и больше обработанных запросов.
использование:
upstream myserver{ server 127.0.0.1:8080 weight =1; server 127.0.0.1:8090 weight =2; }
-
ip_hash: каждый запрос распределяется в соответствии с результатом хеширования IP-адреса доступа, так что каждый посетитель имеет фиксированный доступ к внутреннему серверу, что может решить проблему сеанса.
использование:
upstream myserver{ ip_hash;#可与weight配合使用 server 127.0.0.1:8080 weight =1; server 127.0.0.1:8090 weight =2; }
Динамическое и статическое разделение конфигурации nginx:
Далее поговорим о последнем примере, простой конфигурации динамического и статического разделения.
Подождите, я помню, что их явно четыре, а прямой прокси явно один?
Это патриотично и законопослушно, и каждый несет ответственность.Студенты, которым необходимо получить доступ к некоторым веб-сайтам, недоступным в Китае, могут пойти и проверить информацию самостоятельно.
Что касается того, как настроить прямой прокси, мы не знаем, мы не смеем сказать, мы не смеем спрашивать.
Обзор основ:
Динамическое и статическое разделение заключается в размещении статических файлов ресурсов, таких как изображения, видео, стили CSS и т. д., которые редко изменяются, на отдельном сервере, в то время как динамические запросы выполняются на другом сервере. Таким образом, сервер, отвечающий за динамические запросы, Мы можем сосредоточиться на обработке динамических запросов, тем самым повышая эффективность работы наших программ.В то же время мы также можем проводить эксклюзивную оптимизацию для наших серверов статических ресурсов, чтобы увеличить скорость ответа на наши статические запросы.
Конкретная конфигурация динамического и статического разделения не очень сложна и аналогична балансировке нагрузки и обратному прокси-серверу.
Чтобы продемонстрировать разделение статического и динамического, сначала нам нужно подготовить две папки, одна — папка данных, которая используется для хранения наших файлов статических ресурсов js и css, а другая — папка html, которая используется для хранить наши html-файлы.
Создайте новый html-файл в папке html, index.html со следующим содержимым.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>我是一个静态界面</title>
</head>
<script type="text/javascript" src="jquery.js"></script>
<body>
<h1>我是一个静态界面</h1>
<div id="test_div"></div>
</body
</html>
Обратите внимание, что здесь мы не положили файл jquery.js в каталог html, а положили его в другой каталог данных, когда серверу нужно запросить файл jquery.js, он не пойдет в index.html Сервер, где он находится размещенный запросит этот файл, но перейдет непосредственно к серверу или пути, который мы настроили для поиска файла js.В этом примере он перейдет в папку данных, чтобы найти файл jquery.js.
Измените конфигурацию сервера следующим образом:
server {
listen 8886 ;
server_name [你的服务器ip地址];
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
root /html/;
index index.html;
}
#拦截静态资源,static里面存放的我们图片什么的静态资源
location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|js|css)$ {
root /data/;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
контрольная работа:
Вводим в браузере ip адрес: 8888/index.html, на экране видно, что я статический интерфейс, и при этом открываю инструменты разработчика, которые идут вместе с браузером
Вы обнаружите, что jquery.js был запрошен нормально.
Начнем техническое резюме:
Настоящая боевая глава здесь? Нет, хотя примеры балансировки нагрузки, обратного прокси и динамического и статического разделения приведены выше, они все же являются лишь самыми базовыми конфигурациями, такими как многоуровневая балансировка нагрузки, кэширование и другие расширенные конфигурации, которые необходимо внедрять постепенно в нашей будущей жизни развития.Свяжитесь и поймите. В следующей статье мы углубимся в глубь nginx, и бросим краткий, но не подробный, общий взгляд на то, как nginx поддерживает такую эффективную работу.
Наконец, все учебные заметки Хань Шу выложены на github с открытым исходным кодом.starах ах ах ах ах
Тысячи рек и гор - это всегда любовь, можешь подарить мне звезду?
Добро пожаловать, лайкайте, следуйте за мной, ешьте привет фрукты (смешно)