"Видимость: 🌟🌟🌟🌟🌟"
"Вкус: яйца из шкуры тигра"
"Время приготовления: 10 мин."
Этот артикул внесен в одноименный склад во фронтовой столовой
Github
github.com/Geekhyt, Добро пожаловать в кафетерий. Если вы считаете, что еда и вино по-прежнему вкусные, звезда станет большим поощрением для владельца кафетерия.
Исторический фон
Глобализация Интернета привела к быстрому росту объема данных в Интернете, вкупе с несостоятельностью закона Мура об одноядерных ЦП в начале этого века, ЦП развиваются в направлении многоядерных, а Apache явно не готов к многоядерной архитектуре, процесс может обрабатывать только одно соединение за раз, а следующее может обработать только после обработки одного запроса, что несомненно не справляется с количеством пользователей в интернете сегодня. Более того, стоимость переключения между процессами очень высока. В связи с этим появился Nginx, который легко справляется с миллионами, десятками миллионов соединений.
Преимущество Nginx
- Высокий параллелизм и высокая производительность
- Хорошая масштабируемость
- Высокая надежность
- горячее развертывание
- Лицензия с открытым исходным кодом
Основные сценарии применения Nginx
- Обслуживание статических ресурсов, обслуживание через локальную файловую систему
- Обратный прокси-сервис, балансировка нагрузки
- Служба API, контроль разрешений, снижение нагрузки на сервер приложений
Конфигурационные файлы и каталоги Nginx
пройти черезrpm -ql nginx
Вы можете просмотреть файлы конфигурации и каталоги установки Nginx.
На картинке показан конфигурационный файл и каталог последней стабильной версии Nginx, которую я установил в определенном облаке.
- /etc/nginx/nginx.conf основной файл конфигурации
- /etc/nginx/conf.d/default.conf файл конфигурации HTTP-сервера по умолчанию
- /etc/nginx/fastcgi_params конфигурация fastcgi
- /etc/nginx/scgi_params конфигурация scgi
- /etc/nginx/uwsgi_params конфигурация uwsgi
- /etc/nginx/koi-utf
- /etc/nginx/koi-win
- /etc/nginx/win-utf Эти три файла являются файлами сопоставления кодировок, потому что автор русский
- /etc/nginx/mime.types Файл, устанавливающий соответствие между Content-Type протокола HTTP и расширением
- /usr/lib/systemd/system/nginx-debug.service
- /usr/lib/systemd/system/nginx.service
- /etc/sysconfig/nginx
- /etc/sysconfig/nginx-debug Эти четыре файла используются для настройки управления демоном.
- /etc/nginx/modules Базовые общие библиотеки и модули ядра
- /usr/share/doc/nginx-1.18.0 справочная документация
- /usr/share/doc/nginx-1.18.0/COPYRIGHT Уведомление об авторских правах
- /usr/share/man/man8/nginx.8.gz инструкция
- /var/cache/nginx Каталог кеша Nginx
- /var/log/nginx Каталог журналов Nginx
- /usr/sbin/nginx исполняемая команда
- /usr/sbin/nginx-debug отлаживать и выполнять исполняемые команды
Общие команды и синтаксис файла конфигурации Nginx можно легко найти. В этой статье мы не будем вдаваться в подробности. Давайте посмотрим на элементы конфигурации, которые Nginx может предоставить нам в каждом сценарии из функций и реальных сценариев Nginx. Перед этим уточним два понятия:
Переадресация прокси
Объясните прямой прокси одним предложением Объект прямого прокси — это клиент, а сервер не может видеть настоящего клиента.
resolver 8.8.8.8 # 谷歌的域名解析地址
server {
location / {
# 当客户端请求我的时候,我会把请求转发给它
# $http_host 要访问的主机名 $request_uri 请求路径
proxy_pass http://$http_host$request_uri;
}
}
Обратный прокси
Объясните обратный прокси одним предложением Объект обратного прокси — это сервер, а клиент не может видеть настоящий сервер.
перекрестный домен
Кросс-доменный сценарий — это сценарий, с которым столкнутся интерфейсные инженеры, и существует множество кросс-доменных решений. Но знайте, что в производственной среде либо используйте CORS, либо обратный прокси-сервер Nginx для междоменного решения. Сделайте следующее в файле конфигурации Nginx:
server {
listen 80;
server_name localhost; # 用户访问 localhost,反向代理到 http://webcanteen.com
location / {
proxy_pass http://webcanteen.com
}
}
Gzip
Gzip — это очень распространенный формат сжатия данных в Интернете.Для простого текста он может быть сжат до 40% от исходного размера, что может значительно сэкономить трафик. Обратите внимание, однако, что минимальная версия HTTP, необходимая для включения Gzip, — 1.1.
location ~ .*\. (jpg|png|gif)$ {
gzip off; #关闭压缩
root /data/www/images;
}
location ~ .*\. (html|js|css)$ {
gzip on; #启用压缩
gzip_min_length 1k; # 超过1K的文件才压缩
gzip_http_version 1.1; # 启用gzip压缩所需的HTTP最低版本
gzip_comp_level 9; # 压缩级别,压缩比率越高,文件被压缩的体积越小
gzip_types text/css application/javascript; # 进行压缩的文件类型
root /data/www/html;
}
лимит запроса
Вредоносный доступ с большим трафиком приведет к потере пропускной способности и увеличению нагрузки на сервер. Количество подключений и параллелизма одного и того же IP часто ограничено.
Существует два основных типа лимитов запросов:
- limit_conn_module ограничение частоты соединений
- limit_req_module ограничение частоты запросов
# $binary_remote_addr 远程IP地址 zone 区域名称 10m内存区域大小
limit_conn_zone $binary_remote_addr zone=coon_zone:10m;
server {
# conn_zone 设置对应的共享内存区域 1是限制的数量
limit_conn conn_zone 1;
}
# $binary_remote_addr 远程IP地址 zone 区域名称 10m内存区域大小 rate 为请求频率 1s 一次
limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
server {
location / {
# 设置对应的共享内存区域 burst最大请求数阈值 nodelay不希望超过的请求被延迟
limit_req zone=req_zone burst=5 nodelay;
}
}
Контроль доступа
Существует два основных типа контроля доступа:
- -http_access_module Управление доступом на основе IP
- -http_auth_basic_module доверенный вход на основе пользователя
(Доверительный вход в систему на основе пользователя не очень безопасен, в этой статье не описываются настройки)
Ниже приведены элементы управления доступом на основе IP:
server {
location ~ ^/index.html {
# 匹配 index.html 页面 除了 127.0.0.1 以外都可以访问
deny 127.0.0.1;
allow all;
}
}
ab команда
Полное название команды ab: Apache Bench — это инструмент стресс-тестирования, который поставляется вместе с Apache, а также может тестировать другие веб-серверы, такие как Nginx и IIS.
- -n общее количество запросов
- -c количество одновременных запросов
ab -n 1000 -c 5000 http://127.0.0.1/
противоугонная цепь
Принцип защиты от пиявки заключается в том, чтобы получить источник веб-страницы по рефереру в заголовке запроса, чтобы реализовать контроль доступа. Таким образом можно предотвратить незаконную кражу ресурсов веб-сайта, тем самым обеспечив информационную безопасность, снизив потребление полосы пропускания и снизив нагрузку на сервер.
location ~ .*\.(jpg|png|gif)$ { # 匹配防盗链资源的文件类型
# 通过 valid_referers 定义合法的地址白名单 $invalid_referer 不合法的返回403
valid_referers none blocked 127.0.0.1;
if ($invalid_referer) {
return 403;
}
}
Баланс нагрузки Баланс нагрузки
Когда нашему веб-сайту необходимо решить проблему высокой параллелизма и больших объемов данных, нам нужно использовать балансировку нагрузки для планирования серверов. Разумно распределяйте запросы по каждому серверу в кластере серверов приложений.
Nginx может предоставить нам возможность балансировки нагрузки, конкретная конфигурация выглядит следующим образом:
# upstream 指定后端服务器地址
# weight 设置权重
# server 中会将 http://webcanteen 的请求转发到 upstream 池中
upstream webcanteen {
server 127.0.0.1:66 weight=10;
server 127.0.0.1:77 weight=1;
server 127.0.0.1:88 weight=1;
}
server {
location / {
proxy_pass http://webcanteen
}
}
Состояние внутреннего сервера
Бэкенд-сервер поддерживает следующие конфигурации состояния:
- down: текущий сервер не участвует в балансировке нагрузки
- резервное копирование: резервный сервер, когда другие узлы недоступны
- max_fails: количество раз, когда запрос может завершиться ошибкой, и если он достигнет этого, он будет спать
- fail_timeout: время паузы сервера после сбоев max_fails, по умолчанию 10 с.
- max_conns: ограничить максимальное количество соединений приема на сервер
upstream webcanteen {
server 127.0.0.1:66 down;
server 127.0.0.1:77 backup;
server 127.0.0.1:88 max_fails=3 fail_timeout=10s;
server 127.0.0.1:99 max_conns=1000;
}
Распределение
- Опрос (по умолчанию), каждый запрос назначается различным внутренним серверам по очереди в хронологическом порядке.Если внутренний сервер выходит из строя, список опроса Nginx автоматически удаляет его.
- Вес (взвешенный опрос), расширенная версия опроса, вес пропорционален вероятности доступа и в основном используется в сценариях, где производительность внутреннего сервера неравномерна.
- ip_hash, каждый запрос распределяется в соответствии с результатом хеширования IP-адреса доступа, так что каждый доступ может иметь фиксированный доступ к внутреннему серверу.
- url_hash распределяет запросы в соответствии с результатом хеширования URL-адреса доступа, так что каждый URL-адрес направляется на один и тот же внутренний сервер, который в основном используется, когда внутренний сервер является кешем.
- Пользовательский хэш, основанный на любом ключевом слове в качестве ключа хэша для достижения балансировки нагрузки алгоритма хеширования.
- честно, в зависимости от времени отклика внутреннего сервера для распределения запросов, время отклика короткое, приоритет распределяется.
❤️Любовное тройное комбо
1. Когда вы увидите это, пожалуйста, поставьте лайк и поддержите это, ваше"отличный"Это то, что побуждает меня творить.
2. Обратите внимание на фронтальную столовую официального аккаунта,"Ваша передняя столовая, не забывайте есть вовремя"!
3. Эта статья была добавлена в интерфейсную столовую.Github
github.com/Geekhyt, попросите звездочку, поблагодарите звезду.