tips
Если вы использовали nginx, вы можете пропустить введение и сразу перейти кконфигурационный файл nginxа такжесцены, которые будут использоваться, если вы хотите познакомиться с nginx в целом, просто посмотрите на него медленно.В конце статьи будут добавлены некоторые распространенные реальные боевые сценарии nginx.
предисловие
В качестве фронтенда мы, помимоnode
Как услуга, какие еще варианты у нас есть, настолько просты и удобны в использованииNginx
Может удовлетворить все ваши фантазии. Изучение nginx может помочь нам лучше понять весь процесс запуска фронтенд-проектов.
В качестве внешнего интерфейса у вас будет более или менее некоторый опыт работы с Nginx, так зачем вам это изучать? Не систематизировано: в прошлом вы могли настроить только определенную функцию (собранную онлайн), которая представляет собой фрагментарное знание и не является систематическим. В результате, когда у вашего сервиса возникают проблемы, вы не знаете, с чего начать решение этих проблем.
1. Что такое Nginx?
официальное введение nginx:
«Nginx — это легкий HTTP-сервер, использующий управляемую событиями асинхронную неблокирующую структуру обработки, которая обеспечивает превосходную производительность ввода-вывода и часто используется для обратного проксирования на стороне сервера и балансировки нагрузки».
Преимущества нгинкс
- Поддержка массового параллелизма: используется epoll для мультиплексирования ввода-вывода. Официальный тестовый Nginx может поддерживать 50 000 одновременных подключений, а реальная производственная среда может поддерживать 20 000–40 000 одновременных подключений.
- низкое потребление памяти
- Коммерческий
- Простой файл конфигурации
В дополнение к этим преимуществам есть еще много других, таких как функция обратного прокси, публикация в оттенках серого, функция балансировки нагрузки и т. д.
2. Установка
Эта статья не фокусируется на том, как установить nginx, но также оставляет вам адрес руководства по установке, заберите его сами.
Если это centos, то можно и напрямую с yum установить, что тоже очень удобно
yum -y install nginx
- window
- Устанавливается через докер (настоятельно рекомендуется), Panda уже делала готовые, и вы тоже можете их использовать
Файл nginx.conf — это общий файл конфигурации nginx и точка входа для nginx для чтения конфигурации.
Три, введение в файл nginx
Наиболее часто используемый файл nginx — это файл конфигурации nginx. Мы принесли и другие файлы. Когда вы умеете писать файлы nginx, это фактически эквивалентно умелому использованию nginx.
[wujianrong@localhost ~]# tree /usr/local/nginx
/usr/local/nginx
├── client_body_temp
├── conf # Nginx所有配置文件的目录
│ ├── fastcgi.conf # fastcgi相关参数的配置文件
│ ├── fastcgi.conf.default # fastcgi.conf的原始备份文件
│ ├── fastcgi_params # fastcgi的参数文件
│ ├── fastcgi_params.default
│ ├── koi-utf
│ ├── koi-win
│ ├── mime.types # 媒体类型
│ ├── mime.types.default
│ ├── nginx.conf # Nginx主配置文件
│ ├── nginx.conf.default
│ ├── scgi_params # scgi相关参数文件
│ ├── scgi_params.default
│ ├── uwsgi_params # uwsgi相关参数文件
│ ├── uwsgi_params.default
│ └── win-utf
├── fastcgi_temp # fastcgi临时数据目录
├── html # Nginx默认站点目录
│ ├── 50x.html # 错误页面优雅替代显示文件,例如当出现502错误时会调用此页面
│ └── index.html # 默认的首页文件
├── logs # Nginx日志目录
│ ├── access.log # 访问日志文件
│ ├── error.log # 错误日志文件
│ └── nginx.pid # pid文件,Nginx进程启动后,会把所有进程的ID号写到此文件
├── proxy_temp # 临时目录
├── sbin # Nginx命令目录
│ └── nginx # Nginx的启动命令
├── scgi_temp # 临时目录
└── uwsgi_temp # 临时目录
1. Конфигурационный файл (выделено)
conf //nginx所有配置文件目录
nginx.conf //这个是Nginx的核心配置文件,这个文件非常重要,也是我们即将要学习的重点
nginx.conf.default //nginx.conf的备份文件
2. Журнал
logs: 记录入门的文件,当nginx服务器启动后
这里面会有 access.log error.log 和nginx.pid三个文件出现。
3. Каталог ресурсов
html //存放nginx自带的两个静态的html页面
50x.html //访问失败后的失败页面
index.html //成功访问的默认首页
4. Резервные файлы
fastcgi.conf:fastcgi //相关配置文件
fastcgi.conf.default //fastcgi.conf的备份文件
fastcgi_params //fastcgi的参数文件
fastcgi_params.default //fastcgi的参数备份文件
scgi_params //scgi的参数文件
scgi_params.default //scgi的参数备份文件
uwsgi_params //uwsgi的参数文件
uwsgi_params.default //uwsgi的参数备份文件
mime.types //记录的是HTTP协议中的Content-Type的值和文件后缀名的对应关系
mime.types.default //mime.types的备份文件
5. Кодирование файлов
koi-utf、koi-win、win-utf这三个文件都是与编码转换映射相关的配置文件,
用来将一种编码转换成另一种编码
6. Запустите файл
sbin: 是存放执行程序文件nginx
7. Команда
nginx: 是用来控制Nginx的启动和停止等相关的命令。
В-четвертых, общие команды nginx
- Две общие команды запуска
> nginx //直接nginx启动,前提是配好nginx环境变量
> systemctl start nginx.service //使用systemctl命令启动
- 4 общие команды остановки
> nginx -s stop //立即停止服务
> nginx -s quit // 从容停止服务 需要进程完成当前工作后再停止
> killall nginx //直接杀死nginx进程
> systemctl stop nginx.service //systemctl停止
- Две общие команды перезапуска
> nginx -s reload //重启nginx
> systemctl reload nginx.service //systemctl重启nginx
- Убедитесь, что файл конфигурации nginx верен.
> nginx -t //输出nginx.conf syntax is ok即表示nginx的配置文件正确
Пять, детали конфигурации nginx
Введение 1. Структура файла конфигурации
Чтобы дать вам простую схему, вот краткое описание файла конфигурации:
worker_processes 1; # worker进程的数量
events { # 事件区块开始
worker_connections 1024; # 每个worker进程支持的最大连接数
} # 事件区块结束
http { # HTTP区块开始
include mime.types; # Nginx支持的媒体类型库文件
default_type application/octet-stream; # 默认的媒体类型
sendfile on; # 开启高效传输模式
keepalive_timeout 65; # 连接超时
server { # 第一个Server区块开始,表示一个独立的虚拟主机站点
listen 80; # 提供服务的端口,默认80
server_name localhost; # 提供服务的域名主机名
location / { # 第一个location区块开始
root html; # 站点的根目录,相当于Nginx的安装目录
index index.html index.htm; # 默认的首页文件,多个用空格分开
} # 第一个location区块结果
error_page 500502503504 /50x.html; # 出现对应的http状态码时,使用50x.html回应客户
location = /50x.html { # location区块开始,访问50x.html
root html; # 指定对应的站点目录为html
}
}
......
- nginx.conf эквивалентен входному файлу. После запуска nginx сначала прочитает базовую конфигурацию из nginx.conf.
- Различные файлы xxx.conf в каталоге conf обычно являются конфигурацией каждого приложения.Например, конфигурация nginx веб-сайта a называется a.conf, а конфигурация nginx веб-сайта b называется b.conf, что удобно для нам управлять.
- Загрузите конфигурацию в каталог conf, в основном файле конфигурации nginx.conf обычно есть такая строка кода
2. Подробное введение в основной файл конфигурации nginx.conf
3. Подробное введение в файл подконфигурации xx.conf
Мы чаще всего меняем nginx, подфайли
4. О сопоставлении местоположения
#优先级1,精确匹配,根路径
location =/ {
return 400;
}
#优先级2,以某个字符串开头,以av开头的,优先匹配这里,区分大小写
location ^~ /av {
root /data/av/;
}
#优先级3,区分大小写的正则匹配,匹配/media*****路径
location ~ /media {
alias /data/static/;
}
#优先级4 ,不区分大小写的正则匹配,所有的****.jpg|gif|png 都走这里
location ~* .*\.(jpg|gif|png|js|css)$ {
root /data/av/;
}
#优先7,通用匹配
location / {
return 403;
}
Шесть, обратный прокси-сервер nginx, краткое введение в балансировку нагрузки
1. Обратный прокси
Прежде чем говорить об обратном прокси, давайте сначала посмотрим на прямой прокси.Прямой прокси также является режимом прокси, с которым все чаще всего контактируют.Мы обсудим режим обработки прямого прокси с двух аспектов, с точки зрения программного обеспечения. и С точки зрения жизни, давайте объясним, что такое прямой прокси, а также поговорим о разнице между прямым и обратным прокси.
прямой прокси
Прямой прокси-сервер, «он проксирует клиента», — это сервер, который находится между клиентом и исходным сервером. Чтобы получить контент с исходного сервера, клиент отправляет запрос прокси-серверу с указанием пункта назначения (исходного сервера). ) , затем прокси перенаправляет запрос на исходный сервер и возвращает полученный контент клиенту. Клиент должен выполнить некоторые специальные настройки, чтобы использовать прямой прокси. Назначение прямого прокси:
- Доступ к ранее недоступным ресурсам, таким как Google
- Кэш можно использовать для ускорения доступа к ресурсам
- Авторизация клиентского доступа и аутентификация в Интернете
- Агент может записывать записи доступа пользователей (управление поведением в Интернете) и скрывать информацию о пользователях от внешнего мира.
обратный прокси
Обратный прокси, «он представляет сервер», в основном используется в случае распределенного развертывания кластеров серверов, обратный прокси скрывает информацию о сервере. Роль обратного прокси:
- Для обеспечения безопасности интрасети в качестве общедоступного адреса доступа к сети обычно используется обратный прокси-сервер, а в качестве интрасети выступает веб-сервер.
- Балансировка нагрузки, оптимизация загрузки сайта через обратный прокси-сервер
2. Балансировка нагрузки
Количество запросов, полученных сервером от разных клиентов и полученных обратным прокси-сервером Nginx, — это то, что мы называем нагрузкой.
Количество этих запросов распределяется по разным серверам для обработки по определенным правилам, что является своеобразным правилом балансировки.
Поэтому процесс распределения полученных сервером запросов по правилам называется балансировкой нагрузки.
Балансировка нагрузки также делится на аппаратную балансировку нагрузки и программную балансировку нагрузки.Мы говорим о программной балансировке нагрузки.Те, кто интересуется аппаратной балансировкой нагрузки, могут узнать об этом.
Алгоритм балансировки нагрузки:
- циклический перебор (по умолчанию, взвешенный циклический перебор, ip_hash)
- Плагины (fair, url_hash), url_hash и ip_hash похожи, один основан на ip, а другой на url, поэтому я не буду вдаваться в подробности.
опрос по умолчанию
Каждый запрос распределяется по разным внутренним серверам один за другим в хронологическом порядке.Если внутренний сервер выходит из строя, неисправная система может быть автоматически устранена.
# constPolling 作为存放负载均衡的变量
upstream constPolling {
server localhost:10001;
server localhost:10002;
}
server {
listen 10000;
server_name localhost;
location / {
proxy_pass http://constPolling; #在代理的时候接入constPolling
proxy_redirect default;
}
}
взвешенная круговая система
При установке веса, чем больше значение, тем больше скорость распределения Вероятность доступа выше, в основном используется, когда производительность каждого сервера в бэкенде несбалансирована. Во-вторых, установить разные веса для главного и подчиненного устройств, чтобы добиться разумного и эффективного использования ресурсов хоста.
# constPolling 作为存放负载均衡的变量
upstream constPolling {
server localhost:10001 weight=1;
server localhost:10002 weight=2;
}
server {
listen 10000;
server_name localhost;
location / {
proxy_pass http://constPolling; #在代理的时候接入constPolling
proxy_redirect default;
}
}
Чем больше вес, тем больше вероятность доступа.Например, вышеприведенное 33,33% и 66,66% вероятности доступа.
Эффект от посещения:
локальный: 10001, локальный: 10002, локальный: 10002, локальный: 10001, локальный: 10002, локальный: 10002
ip_hash
Каждый запрос распределяется в соответствии с хеш-результатом доступа к ip.После такой обработки каждый посетитель может получить фиксированный доступ к серверной службе.Следующая конфигурация (ip_hash может использоваться в сочетании с весом),并且可以有效解决动态网页存在的session共享问题
upstream constPolling {
ip_hash;
server localhost:10001 weight=1;
server localhost:10002 weight=2;
}
fair
Алгоритм балансировки нагрузки, который я предпочитаю использовать, справедливый алгоритм может разумно выполнять балансировку нагрузки в соответствии с размером страницы и временем загрузки и отдавать приоритет тем, у кого короткое время отклика.
- Установите модуль upstream_fairПрикрепите руководство по установке
- Какой сервер имеет самое быстрое время отклика, назначьте запрос этому серверу
upstream constPolling {
server localhost:10001;
server localhost:10002;
fair;
}
Семь, конфигурация страницы ошибок nginx, открытая конфигурация сжатия Gzip
1. Конфигурация страницы ошибок nginx
Когда адрес, который мы посещаем, не существует, мы можем выполнить соответствующую обработку в соответствии с кодом состояния http, в качестве примера возьмем 404.
Конечно, в дополнение к 404, мы думаем, что можем также отображать его в соответствии с другими кодами состояния, такими как 500, 502 и т. д. В проекте компании panda, поскольку страницы ошибок нескольких проектов унифицированы, у нас есть набор ошибок кодовые страницы, которые мы поддерживаем отдельно.Поместите их в средний проект нашей компании, а затем перейдите на соответствующую страницу ошибок в зависимости от того, является ли клиент ПК/мобильным терминалом.
2. Gzip-сжатие
Gzip — это технология сжатия веб-страниц.После сжатия gzip размер страницы может быть уменьшен до 30% от исходного или даже меньше. Меньшие веб-страницы делают просмотр более удобным и быстрым для пользователей. Реализация веб-сжатия gzip требует поддержки браузера и сервера.
Gzip должен поддерживаться как сервером, так и браузером. Когда браузер поддерживает сжатие gzip, он будет включать Accept-Encoding: gzip в сообщение запроса, чтобы Nginx отправлял содержимое после прослушивания gzip в браузер, и добавлял Content-Encoding: gzip в соответствующий заголовок, чтобы объявить об этом. это содержимое после gzip, говорящее браузеру распаковать его перед анализом вывода.Если проект работает в Internet Explorer или некоторых менее совместимых браузерах, вам необходимо проверить, поддерживает ли браузер gzip.
server {
listen 12089;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/html/gzip;
# 开启gzip压缩
gzip on;
# http请求版本
gzip_http_version 1.0;
# 设置什么类型的文件需要压缩
gzip_types text/css text/javascript application/javascript image/png image/jpeg image/gif;
location / {
index index.html index.htm index.php;
autoindex off;
}
}
Какой формат требуется для gzip_types, вы можете проверить content-Type
Content-Type: text/css
# 成功开启gzip
Content-Encoding: gzip
Восемь часто используемых глобальных переменных
Переменная имея в виду $args Эта переменная равна параметру в строке запроса, как и $query_string. $content length Поле Content-length в заголовке запроса. $content_type Поле Content-Type в заголовке запроса. $document_root Значение, указанное в корневой директиве для текущего запроса. $host Поле заголовка хоста запроса, иначе имя сервера. $http_user_agent Информация об агенте клиента $http_cookie Информация о файлах cookie клиента $limit_rate Эта переменная может ограничивать скорость соединения. $request_method Действие, запрошенное клиентом, обычно GET или POST. $remote_addr IP-адрес клиента. $remote_port Порт клиента. $remote_user Имя пользователя, которое было аутентифицировано базовым модулем аутентификации. $request_filename Путь к файлу текущего запроса, сгенерированный директивой root или alias и запросом URI. $scheme Методы HTTP (например, http, https). $server_protocol Протокол, используемый запросом, обычно HTTP/1.0 или HTTP/1.1. $server_addr Адрес сервера, который можно определить после выполнения системного вызова. $server_name ник сервера. $server_port Номер порта, по которому запрос поступает на сервер. $request_uri Необработанный URI, содержащий параметры запроса, без имени хоста, например, «/foo/bar.php?arg=baz». $uri Текущий URI без параметров запроса, $uri не содержит имя хоста, например, "/foo/bar.html". $document_uri То же, что $ури.
Девять, nginx использует комплексный сценарий (будет обновляться и дополняться на github)
1. Одно и то же доменное имя указывает разные каталоги проектов через разные каталоги.
В процессе разработки есть сценарий, например, проект с несколькими подсистемами, к которым необходимо получить доступ через одно и то же доменное имя через разные каталоги.
Он также будет использоваться в таких сценариях, как публикация A/B-тестирования в оттенках серого.
Например:
Посетите a.com/a/***, чтобы посетить систему
Посетите a.com/b/***, чтобы посетить систему b
2. Автоматически адаптироваться к ПК/мобильным страницам
3. Ограничить доступ только через Google Chrome
4. Проблема с обновлением одностраничного приложения 404
Дополнительно: включая противоугонную цепочку, динамическое и статическое разделение, контроль разрешений
ты можешь идтиgithubилиgiteeПроверить
Примеры будут продолжать обновляться, и большие ребята могут помочь добавить