Подросток: Узнайте о Nginx

Nginx
在这里插入图片描述
вставьте сюда описание изображения
在这里插入图片描述
вставьте сюда описание изображения

Введение в Nginx

В традиционных веб-серверах каждое клиентское подключение обрабатывается как отдельный процесс или поток.При переключении задач ЦП необходимо переключать на новую задачу, и создается новый контекст выполнения, потребляющий дополнительную память и время ЦП.Когда количество запросов увеличивается, сервер медленно отвечает, что отрицательно сказывается на производительности.在这里插入图片描述

Поэтому нам срочно нужны несколько высокопроизводительных веб-серверов. Общие серверы приложений в настоящее время: Apache/Microsoft IIS/Tomcat/Lighttpd/Nginx, в настоящее время основным направлением являются два веб-сервера Apache и Nginx.

Apache

Apache по-прежнему является веб-сервером с наибольшим временем использования: согласно последней статистике, доля рынка в настоящее время составляет около 50%. Основное преимущество в том, что один из них представляет собой сервер статических ресурсов Http, который появился ранее, и он также является открытым исходным кодом. Поэтому техническая поддержка и различные решения на рынке относительно зрелые. Модули, поддерживаемые Apache, очень богаты.

Nginx

Nginx - это программа, написанная россиянамивысокая производительностьHTTP и обратный прокси-сервер, Nginx — это высокопроизводительный, высоконадежный веб-сервер и обратный прокси-сервер с открытым исходным кодом, который поддерживает горячее развертывание, почти 7 * 24 часов непрерывной работы, даже если он работает в течение нескольких месяцев без перезагрузки и горячего обновление версии программного обеспечения с бесперебойной работой. Производительность является наиболее важным фактором для Nginx. Он занимает меньше памяти, обладает мощными возможностями параллелизма и может поддерживать одновременные соединения до 5 Вт. Самое главное, Nginx бесплатен и может быть коммерциализирован, а его настройка и использование относительно просты.

Причина выбора Nginx также очень проста: во-первых, он может поддерживать 5 Вт.Высокий параллелизмподключить, второй,низкое потребление памяти,в третьих,бюджетный, Если вы используете F5, NetScaler и другие аппаратные устройства балансировки нагрузки, вам потребуются сотни тысяч. Nginx, с другой стороны, имеет открытый исходный код, бесплатный и доступен для коммерческого использования.

Сценарии использования Nginx:

  1. обратный прокси
  2. Кэширование и балансировка нагрузки
  3. служба статических ресурсов, предоставление услуг через локальную файловую систему;
  4. Keepalived + Nginx для высокой доступности

Прямой прокси и обратный прокси

прямой прокси

Означает клиент и исходный сервер (исходный сервер)междуЧтобы получить контент с исходного сервера, клиент отправляет запрос на прокси с указанием цели (исходного сервера), а прокси отправляет исходный серверзапрос на пересылкуи вернуть полученный контент клиенту. Более распространен следующий пример.在这里插入图片描述

обратный прокси

Обратный прокси-сервер означает, что прокси-сервер принимает запрос на подключение в Интернете, затем перенаправляет запрос на сервер во внутренней сети и возвращает результат, полученный от сервера, клиенту, запрашивающему подключение в Интернете. прокси-сервер действует как обратный прокси-сервер для внешнего мира. Для пользователей, которые знают только о существовании этого URL, они не знают несколько серверов!在这里插入图片描述

Балансировка нагрузки

Как правило, клиент отправляет несколько запросов на сервер, сервер обрабатывает запросы, и некоторым из них может потребоваться работа с некоторыми ресурсами, такими как базы данных, статические ресурсы и т. д. После завершения обработки сервером результаты возвращаются клиенту. . Для ранних систем эта модель предъявляла несложные функциональные требования и могла работать с относительно небольшим числом одновременных запросов, а стоимость также была низкой. С непрерывным ростом объема информации, быстрым увеличением объема доступа и данных, а также постоянным увеличением сложности системного бизнеса этот подход больше не может соответствовать требованиям.Когда параллелизм особенно велик,Сервер легко падает, Например, служба Tomcat, которую мы развертываем, имеет узкое место.

Очевидно, это связано с проблемой узкого места производительности сервера, помимо машины с кучей, наиболее важной практикой является балансировка нагрузки. Когда требуется взрывной рост, производительность одной машины сильна и не может удовлетворить требования.кластерКонцепция проблемы, которую не может решить один сервер, позволяет использовать несколько серверов, а затемраспространение запросаК каждому серверу нагрузка распределяется по разным серверам, что является балансировкой нагрузки, а ядром является «распределение давления». Nginx реализует балансировку нагрузки, которая обычно относится к переадресации запросов на кластеры серверов.在这里插入图片描述

Динамическое и статическое разделение

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

Вообще говоря, необходимо отделить динамические ресурсы от статических ресурсов.Из-за высокой параллелизма Nginx и кэширования статических ресурсов статические ресурсы часто развертываются на Nginx. Если запрос относится к статическим ресурсам, перейдите непосредственно в каталог статических ресурсов для получения ресурсов.Если запрос относится к динамическим ресурсам, используется принцип обратного прокси-сервера для пересылки запроса соответствующему фоновому приложению для обработки, тем самым реализуя динамические и статическое разделение. После разделения внешнего и внутреннего интерфейса скорость доступа к статическим ресурсам может быть значительно улучшена.Даже если динамические службы недоступны, доступ к статическим ресурсам не пострадает.在这里插入图片描述

Установка Nginx

Как правило, существует два метода установки

1. Автоматическая установка
# 切换至root用户
sudo su root
apt-get install nginx

在这里插入图片描述Проверьте, успешно ли установлен nginx在这里插入图片描述запустить nginx在这里插入图片描述После запуска повторно введите IP-адрес на веб-странице (важный: вам может потребоваться закрыть брандмауэр или разработать указанный порт для нормального доступа к нему), вы можете увидеть страницу приветствия nginx. На данный момент nginx успешно установлен在这里插入图片描述После установки файла nginxместоположение файла:

  • /usr/sbin/nginx: Основная программа
  • /etc/nginx: хранить файлы конфигурации
  • /usr/share/nginx: хранить статические файлы
  • /var/log/nginx: хранить логи

удалить nginx

# 彻底卸载nginx
apt-get --purge autoremove nginx
#查看nginx的版本号
nginx -v
在这里插入图片描述
вставьте сюда описание изображения
2. Установка источника

Установить зависимости

apt-get install gcc
apt-get install libpcre3 libpcre3-dev
apt-get install zlib1g zlib1g-dev
# Ubuntu14.04的仓库中没有发现openssl-dev,由下面openssl和libssl-dev替代
#apt-get install openssl openssl-dev
sudo apt-get install openssl 
sudo apt-get install libssl-dev

установить нгинкс

cd /usr/local
mkdir nginx
cd nginx
wget http://nginx.org/download/nginx-1.13.7.tar.gz
tar -xvf nginx-1.13.7.tar.gz 

在这里插入图片描述скомпилировать nginx

# 进入nginx目录
cd /usr/local/nginx/nginx-1.13.7
# 执行命令
./configure
# 执行make命令
make
# 执行make install命令
make install

На данный момент основные файлы в каталоге /usr/local/nginx следующие:

  • Конфигурационный файл конф.
  • Html файл статической веб-страницы
  • Журнал журналов
  • Двоичный файл Sbin

запустить nginx

#进入nginx启动目录
cd /usr/local/nginx/sbin
# 启动nginx
./nginx
3. Брандмауэр

После установки откройте Nginx. Если в системе включен брандмауэр, вам необходимо установить порты, которые необходимо открыть в брандмауэре. Вот несколько общих операций с брандмауэром (не беспокойтесь об этом, если он не включен) :

systemctl start firewalld  # 开启防火墙
systemctl stop firewalld   # 关闭防火墙
systemctl status firewalld # 查看防火墙开启状态,显示running则是正在运行
firewall-cmd --reload      # 重启防火墙,永久打开端口需要reload一下
# 添加开启端口,--permanent表示永久打开,不加是临时打开重启之后失效
firewall-cmd --permanent --zone=public --add-port=8888/tcp
# 查看防火墙,添加的端口也可以看到
firewall-cmd --list-all

Затем установите запуск Nginx:

systemctl enable nginx

Запустите Nginx (другие команды подробно описаны ниже):

systemctl start nginx

Затем посетите свой IP-адрес, затем вы увидите страницу приветствия Nginx ~ Добро пожаловать в nginx!

Общие команды Nginx

Команды Nginx Введите nginx -h в консоли, чтобы увидеть полную команду.Вот несколько часто используемых команд:

nginx -s reload # Отправляем сигнал основному процессу, перезагружаем конфигурационный файл, горячий перезапуск nginx -s reopen # перезапустить Nginx nginx -s stop # быстрое завершение работы nginx -s quit # Дождитесь закрытия рабочего процесса после завершения обработки nginx -T # Просмотр окончательной конфигурации текущего Nginx nginx -t -c # Проверяем, нет ли проблем с конфигурацией, если она уже есть в директории конфигурации, -c не требуется

systemctl - это основная команда инструмента управления системными приложениями Linux systemd. Она используется для управления системой. Мы также можем использовать ее для управления Nginx. Соответствующие команды следующие:

systemctl start nginx # Запустить Nginx systemctl остановить nginx # Остановить Nginx systemctl перезапустить nginx # перезапустить Nginx systemctl reload nginx # Перезагрузить Nginx после изменения конфигурации systemctl enable nginx # Установить загрузку для запуска Nginx systemctl disable nginx # Отключить запуск Nginx systemctl status nginx # Просмотр статуса работы Nginx

Синтаксис конфигурации Nginx

nginx.confСтруктурную схему можно представить следующим образом:在这里插入图片描述

main        # 全局配置,对全局生效
├── events  # 配置影响 Nginx 服务器或与用户的网络连接
├── http    # 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
│   ├── upstream # 配置后端服务器具体地址,负载均衡配置不可或缺的部分
│   ├── server   # 配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块
│   ├── server
│   │   ├── location  # server 块可以包含多个 location 块,location 指令用于匹配 uri
│   │   ├── location
│   │   └── ...
│   └── ...
└── ...

Структура файла конфигурации Nginx показана на рисунке nginx.conf выше.Синтаксические правила файла конфигурации:

  1. Файл конфигурации состоит из инструкций и блоков инструкций;
  2. Каждая команда заканчивается точкой с запятой, а команда и параметры разделяются пробелом;
  3. Блоки инструкций группируют несколько инструкций вместе с фигурными скобками {};
  4. операторы include позволяют комбинировать несколько файлов конфигурации для повышения удобства обслуживания;
  5. Используйте символ # для добавления комментариев, чтобы улучшить читабельность;
  6. Используйте нотацию $ с использованием переменных;
  7. Параметры некоторых команд поддерживают регулярные выражения;

Типичная конфигурация

Типичная конфигурация для Nginx:

user  nginx;                        # 运行用户,默认即是nginx,可以不进行设置
worker_processes  1;                # Nginx 进程数,一般设置为和 CPU 核数一样
error_log  /var/log/nginx/error.log warn;   # Nginx 的错误日志存放目录
pid        /var/run/nginx.pid;      # Nginx 服务启动时的 pid 存放位置

events {
    use epoll;     # 使用epoll的I/O模型(如果你不知道Nginx该使用哪种轮询方法,会自动选择一个最适合你操作系统的)
    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;   # Nginx访问日志存放位置

    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;   # 默认文件类型

    include /etc/nginx/conf.d/*.conf;   # 加载子配置项
    
    server {
     listen       80;       # 配置监听的端口
     server_name  localhost;    # 配置的域名
     
     location / {
      root   /usr/share/nginx/html;  # 网站根目录
      index  index.html index.htm;   # 默认首页文件
      deny 172.168.22.11;   # 禁止访问的ip地址,可以为all
      allow 172.168.33.44; # 允许访问的ip地址,可以为all
     }
     
     error_page 500 502 503 504 /50x.html;  # 默认50x对应的访问页面
     error_page 400 404 error.html;   # 同上
    }
}

Блок server может содержать несколько блоков location.Директива location используется для сопоставления с uri.Синтаксис:

location [ = | ~ | ~* | ^~] uri {
 ...
}

После команды:

= Путь точного совпадения, используемый перед uri без регулярного выражения, если совпадение успешно, последующий поиск выполняться не будет; ^~ используется для uri без регулярного выражения, ранее это означает, что если символ, следующий за символом, является наилучшим соответствием, это правило принимается, и последующий поиск не выполняется; ~ Указывает, что для сопоставления пути с учетом регистра используется обычный шаблон позади символа; ~* Указывает, что регулярное выражение после символа используется для сопоставления пути без учета регистра. Приоритет ~ относительно низок.Если регулярные выражения нескольких местоположений могут совпадать, используется то, у которого регулярное выражение самое длинное;

Если uri содержит регулярное выражение, он должен иметь флаг ~ или ~*.

Правила сопоставления местоположения:
在这里插入图片描述
вставьте сюда описание изображения
Rewrite

rewriteЭто важная инструкция для реализации перенаправления URL, она сопоставляет содержимое и переходит к замене в соответствии с regex (регулярным выражением), а в конце находится тег флага.在这里插入图片描述 在这里插入图片描述

Основной процесс Nginx

在这里插入图片描述url = доменное имя+порт+путь+параметр Процесс сопоставления:

1. Доменное имя (ip) + порт ----" найти виртуальную машину 2. Путь соответствует части местоположения, путь = соответствующий путь + оставшийся путь 3. root: найти путь path1+path2 в каталоге псевдоним: найти путь path2 в каталоге Если URL-адрес заканчивается на /, он считается каталогом и индекс выполняется; в противном случае считается, что путь ведет к файлу. 4. proxy_pass=http://172.17.0.4:8081/ proxy_pass= ip:порт/ Когда ip:port/, переадресовать путь ip+port+path2 Когда ip:port, перенаправить путь ip+port+path1+path2

проверка процесса выполнения nginx

сервер { listen 80; server_name process.sowhat.com; #后台服务原始路径:172.17.0.4:8081/nginx/sowhat/getInfo #无/,访问路径:http://process.sowhat.com/nginx/sowhat/getInfo location /nginx/sowhat { #匹配路径/nginx/sowhat,剩余路径/getInfo proxy_pass http://172.17.0.4:8081;#此处未关闭,传递整个路径/nginx/sowhat/getInfo для таргетинга на ip:port // proxy_pass http://172.17.0.4:8081/nginx/sowhat; } #Да/, путь доступа: http://process.sowhat.com/dynamic/nginx/sowhat/getInfo location / dynamic {# соответствующий путь / dynamic, оставшийся путь /nginx/sowhat/getInfo proxy_pass http://172.17.0.4:8081/;#Закройте здесь,只传递/nginx/sowhat/getInfo для таргетинга на ip:port } #Путь доступа: http://process.sowhat.com/static/a.html ---b.html/c.html location /static { # соответствующий путь /static, оставшийся путь /a.html # корень html/;#root声明, в папке html,查找/static/a.htmlдокумент } #Путь доступа: http://process.sowhat.com/target/a.html ---b.html/c.html location /target {#совпадающий путь/цель, оставшийся путь/a.html псевдоним html/static/;#alias声明, в папке html/static/,查找a.htmlдокумент } }

украшенный

1. Время выполнения индекса

При Root/алиасе, если запрос страницы заканчивается на /, считается, что путь идет только в директорию В этот момент запустите индекс и найдите файл индекса в каталоге

2, оператор if, встроенные переменные: простое суждение if, больше ничего 3. Междоменное: страница доменного имени, доступ к доменному имени B, добавление конфигурации в службу B: W3C требует, чтобы междоменное использование было запрещено, и предлагается способ междоменного взаимодействия.

CORSЭто стандарт W3C, полное название — «Совместное использование ресурсов кросс-происхождения» (Cross-origin resource sharing). Это позволяет браузерам отправлять запросы XMLHttpRequest к серверам с разными источниками, тем самым преодолевая ограничение, заключающееся в том, что AJAX можно использовать только с одним и тем же источником. Простой запрос: Браузер автоматически добавляет поле Origin (откуда исходит этот запрос) к информации заголовка запроса AJAX между источниками. В соответствии с этим значением сервер включает Access-Control-Allow-Origin в информацию заголовка в пределах области разрешения. сложный запрос: Перед официальным сообщением будет добавлен запрос HTTP-запроса, называемый «предполетным» запросом.

4. Защита от пиявки: к вашему собственному доменному имени обращаются другие страницы доменных имен. Anti-junzi: Доступ к некоторым файлам возможен только с фиксированным доменным именем, а такие операции, как сохранение локальных и открытие новых веб-страниц, запрещены. 5. Кэш:кеш-браузер. nginx告诉浏览可以缓存:减少nginx压力 6、压缩: gzip :服务器跟浏览器协商采用何种压缩

Вывод содержимого клиенту сжимается для уменьшения объема передачи файлов, уменьшая пропускную способность сети. Чтобы сжать сервер, клиент должен распаковывать, он займет время процессора. Однако, поскольку передача содержимого уменьшается, процесс передачи, сетевые карты, маршрутизаторы, коммутаторы, время обработки пакетов будут сокращены.gzipСжатие — это то, где выигрывается время. Должны быть соблюдены следующие условия: 1. HTTP-заголовок, отправляемый клиентом, должен содержатьAccept-Encodingполе, а его значение содержитgzipЭто тип сжатия. Обычные браузеры будутAccept-Encoding:gzip, deflate, sdchтакой заголовок. 2. Если на сервере включено сжатие gzip, заголовок ответа будет содержать Content-Encoding: gzip, и клиент может определить, действительно ли содержимое, возвращаемое сервером, сжато gzip в соответствии с этим. Сжатие Gzip очень хорошо работает для текстовых файлов (от 40% до 80%), но мало влияет на файлы изображений. В практических приложениях вы можете включить сжатие gzip для файлов в форматах js, html и css.

7. Настройка HTTPS. процесс генерации ключа nginx

1, команда создания закрытого ключа сервера позволит вам ввести пароль: openssl genrsa -des3 -out server.key 1024 2, создайте запрос на подпись сертификата (CSR): openssl req -new -key server.key -out server.csr 3, пароль должен быть удален при загрузке и поддержке Nginx SSL с использованием закрытого ключа: openssl rsa -in server.key -out server_nopass.key 4, и, наконец, с помощью закрытого ключа и сертификата с пометкой CSR: openssl x509 -req -days 365 -in server.csr -signkey server_nopass.key -out server.crt

В файле nginx.conf:

ssl_certificate /etc/nginx/conf.d/server.crt; ssl_certificate_key /etc/nginx/conf.d/server_nopass.key; 在这里插入图片描述

8. Keepalived для настройки nginx master и backup Функции поддержки активности:

Управление программным обеспечением балансировки нагрузки LVS Реализовать проверку работоспособности узлов кластера LVS. Высокая доступность в качестве системной сетевой службы (отказоустойчивость)

在这里插入图片描述Распространенные режимы работы nginx:在这里插入图片描述

Режим работы Nginx.

NginxИзвестен своей стабильностью, богатым набором функций, образцами файлов конфигурации и низким потреблением системных ресурсов. До появления nginx сервер Apache всегда занимал монопольное положение веб-сервера, поэтому мы используем сравнительный метод, чтобы объяснить, насколько силен nginx!мультиплексирование ввода-выводаОсновная причина разницы в производительности между ними заключается в том, что выбор модели сетевого ввода-вывода различен, апач используетselect, а nginx используетepollМодель!

Например, в деревне с десятитысячным населением существует два способа избрания главы деревни:

①, пусть каждый напишет свое имя в записке, а затем бывший староста собирает записку (нить, которую нужно пройти), а затем получает список кандидатов, рекомендованных старостой деревни (связь, которую необходимо обработать), которая эквивалентно выбору модели для опроса каждого соединения и обработки соединения, которое необходимо обработать! ② каждый может рекомендовать себя (каждое соединение может быть активным), а те, кто хочет запустить, стоять в ряду (событие срабатывает, ставить в очередь), а потом выбирать из этих людей (несколько отложенных задач), что равносильно обработка только небольшого количества событий!

Одно - взять на обработку несколько человек из десятков тысяч, а другое - встать и заняться этим напрямую.Разница в эффективности не такая уж и большая, правда?nginx是基于epoll模型开发Да, и epoll — это синхронная неблокирующая разработка, основанная на JAVA NIO, которая может поддерживать больше подключений при высоком уровне параллелизма! нгинкс это事件驱动Да, рабочий режим состоит из основного процесса и нескольких рабочих процессов, главный поток отвечает за циклическое распределение событий, а несколько рабочих потоков отвечают за обработку событий!在这里插入图片描述

Ссылаться на

Одна статья nginx Установить nginx под ubuntu Резюме о расположении и перезаписи под nginx Вся информация сводка

В этой статье используетсяmdniceнабор текста