Яванская великая обезьяна, красивое руководство по росту,GitHub JavaEgg, N-линия Интернет-разработка основных навыков спектра оружия
1. Введение в Nginx
1.1 Обзор Nginx
-
NGINX — это бесплатный, с открытым исходным кодом, высокопроизводительный, легкий HTTP и обратный прокси-сервер, а также прокси-сервер электронной почты (IMAP/POP3), который характеризуется небольшим объемом памяти и мощными возможностями параллелизма. Nginx известен своей стабильностью, богатой библиотекой модулей, гибкой конфигурацией и низким потреблением ресурсов. В настоящее время это должно быть необходимо практически для всех проектов строительства.
-
Nginx состоит из ядра и ряда модулей.Ядро обеспечивает основные функции веб-сервисов, такие как включение сетевых протоколов, создание рабочей среды, получение и распределение клиентских запросов и обработка взаимодействий между модулями. Различные функции и операции Nginx реализуются модулями. Модули Nginx структурно делятся на основные модули, базовые модули и сторонние модули.
Основные модули: модуль HTTP, модуль EVENT и модуль MAIL.
Базовые модули: модуль HTTP-доступа, модуль HTTP FastCGI, модуль HTTP-прокси и модуль HTTP Rewrite.
Сторонние модули: модуль HTTP Upstream Request Hash, модуль Notification, модуль HTTP Access Key и модули, разработанные самими пользователями.
Этот дизайн упрощает разработку и расширение Nginx, что делает Nginx таким мощным. Модули Nginx компилируются в nginx по умолчанию, если вам нужно добавить или удалить модули, вам нужно перекомпилировать Nginx, что не так удобно, как модули динамической загрузки Apache. Если вам нужно динамически загружать модули, вы можете использовать веб-сервер Tengine, запущенный Taobao.com, который добавляет множество расширенных функций на основе nginx, полностью совместим с Nginx и принят многими отечественными веб-сайтами.
-
Nginx имеет множество расширенных версий
- Версия с открытым исходным кодомnginx.org
- коммерческая версияNGINX Plus
- Веб-сервер, инициированный Taobao.comTengine
- Веб-платформа на базе Nginx и LuaOpenResty
1.2 Nginx как веб-сервер
Веб-сервер также называется сервером WWW (WORLD WIDE WEB), его основная функция заключается в предоставлении онлайн-сервиса просмотра информации, часто в режиме B/S (браузер/сервер).
- Прикладной уровень использует протокол HTTP.
- HTML-формат документа.
- Единый указатель ресурсов браузера (URL).
Nginx может использоваться как веб-сервер для статических страниц, а также поддерживает динамические языки протокола CGI, такие как perl, php и т. д., но не поддерживает java. Java-программы обычно выполняются в сотрудничестве с Tomcat.
Как красавец Java-обезьяна, вы должны понимать разницу между Nginx и Tomcat:
Nginx, Apache и Tomcat
-
Nginx — легкий HTTP-сервер с высокой степенью параллелизма, разработанный российским программистом Игорем Сысоевым;
-
Apache HTTP Server Project, проект службы HTTP в рамках Apache Foundation, аналогичный по функциям Nginx;
-
Apache Tomcat, это еще один проект в рамках Apache Foundation, которыйApplication Server, точнее а
контейнер приложения сервлета, по сравнению с HTTP-сервером Apache и Nginx, Tomcat можетдинамичныйСгенерированные ресурсы возвращаются клиенту;
HTTP-сервер Apache и Nginx изначально не поддерживают генерацию динамических страниц, но могут поддерживаться другими модулями (например, через скрипты Shell, PHP, Python для динамической генерации контента);
HTTP-сервер занимается передачей и контролем доступа на уровне протокола HTTP, поэтому вы можете увидеть прокси, балансировку нагрузки и другие функции в Apache/Nginx. Клиенты получают доступ к ресурсам (HTML-файлам, файлам изображений и т. д.), хранящимся на сервере, через HTTP-сервер. С помощью технологии CGI обработанный контент также может распространяться через HTTP-сервер, но HTTP-сервер всегда просто передает файлы с сервера клиенту по протоколу HTTP.
Сервер приложений — это контейнер для выполнения приложений. Сначала необходимо поддерживать работу языка разработки (для Tomcat это Java), чтобы приложение могло нормально работать на сервере приложений. Во-вторых, он должен поддерживать спецификации приложений, такие как библиотеки классов и функции безопасности. Для Tomcat необходимо предоставить стандартную библиотеку классов, интерфейс и т. д., необходимые для работы JSP/Sevlet. Для удобства серверы приложений часто интегрируют функции HTTP-сервера, но они не так эффективны, как профессиональные HTTP-серверы, поэтому серверы приложений часто работают за HTTP-сервером, выполняют приложения и преобразуют динамический контент в статический. .
1.3 Прямой прокси
Прямой прокси: если Интернет за пределами локальной сети представить как огромную библиотеку ресурсов, клиентам в локальной сети необходимо получить доступ к Интернету через прокси-сервер.Эта прокси-служба называется прямым прокси.
Прямой прокси "прокси" является клиентом.
Например, если вы хотите зайти в гугл, чтобы посмотреть "боевик", а в Китае это запрещено, вам нужно найти прокси, это так называемый "форвард прокси".
1.4 Обратный прокси и балансировка нагрузки
Обратный прокси-сервер является противоположностью прямого прокси-сервера.Обратный прокси-сервер относится к прокси-серверу для получения запроса на подключение в Интернете, а затем пересылает запрос на сервер во внутренней сети и возвращает результат, полученный на сервере. к клиенту.Когда прокси-сервер внешне представлен как сервер, клиент не знает о прокси.
Обратный прокси «прокси» — это сервер.
Другой пример: если вы хотите посмотреть «любовный фильм» на «Youku», youku.com передаст ваш запрос на машину, на которой хранится фильм — так называемый «обратный прокси».
Зачем использовать обратный прокси
- Защита и скрытие исходных серверов ресурсов
- Шифрование и ускорение SSL
- Ускорьте веб-запросы за счет кэширования статических ресурсов
- добиться балансировки нагрузки
балансировки нагрузки
TODO: оставьте балансировщик нагрузки, чтобы подробно представить портал
перенаправление адреса
Основная функция Nginx Rewrite — реализовать перезапись URL.
Например, при вводе 360.com происходит переход на 360.cn, а при вводе baidu.cn — на baidu.com.
1.5 Динамическое и статическое разделение
Чтобы ускорить анализ веб-сайта, динамические страницы и статические страницы могут анализироваться разными серверами, чтобы увеличить скорость анализа и снизить нагрузку на исходный отдельный сервер. Это относится к разрешению динамическим программам (Java, PHP) доступа к серверу приложений, а также к кэшам, изображениям, JS, CSS и т. д. к Nginx.
2. Установка Nginx
-
wget http://nginx.org/download/nginx-1.16.1.tar.gz
-
Установите плагины, которые необходимо скомпилировать
-
GCC для компиляции кода C, C++;
-
Библиотека функций регулярных выражений Pcre, написанная на языке C (с использованием модуля перезаписи);
-
Zlib — библиотека для сжатия данных;
-
Библиотека шифрования уровня защищенных сокетов OpenSSL (включить поддержку SSL)
yum install gcc c++ yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum install -y openssl openssl-devel
-
-
Разархивируйте, настройте (Nginx поддерживает различные варианты конфигурации, перечисленные по порядку в конце статьиВарианты конфигурации Nginx), компилируем, устанавливаем nginx
tar -zxvf nginx-1.15.tar.gz cd nginx-1.16.1 cd nginx-1.16.1 ./configure make && sudo make install
-
запуск, перезагрузка, выключение
cd /usr/local/nginx/ cd sbin ./nginx #关闭命令 ./nginx -s stop #重启,热部署 ./nginx -s reload #修改配置文件后也别嘚瑟,反正我会动不动就写错,检查修改的nginx.conf配置是否正确 ./nginx -t
- Аутентификация (IP-адрес ввода браузера)
3. Файл конфигурации
Файл конфигурации nginx.conf в основном разделен на три части: глобальный блок, блок событий, блок https.
Синтаксис конфигурации Nginx:
- Файл конфигурации состоит из директив и блоков директив.
- Каждая команда заканчивается точкой с запятой (;), а команда и параметры разделяются пробелом
- Блоки инструкций сгруппированы фигурными скобками {}
- операторы include позволяют комбинировать несколько файлов конфигурации для улучшения ремонтопригодности.
- Используйте # для добавления комментариев
- Используйте $ для определения переменных
- Параметры некоторых команд поддерживают регулярные выражения
3.1 Глобальные блоки
Раздел глобальной конфигурации используется для настройки параметров, действительных для всего сервера. В основном он устанавливает некоторые инструкции по настройке, которые влияют на общую работу сервера nginx, в основном включая настройку пользователя (группы), на котором запущен сервер Nginx, количество рабочих процессов, которые разрешено создавать, путь хранения PID процесса, хранилище журнала путь и тип, а также введение файлов конфигурации. Пример:
user nobody;
worker_processes 4;
error_log /data/nginx/logs/error.log notice;
3.2 блок событий
Инструкции, участвующие в блоке событий, в основном влияют на сетевое соединение между сервером Nginx и пользователем.Обычно используемые настройки включают в себя, разрешить ли сериализацию сетевых подключений в рамках нескольких рабочих процессов, разрешить ли получение нескольких сетевых подключений одновременно, какую событийную модель выбрать для обработки, запросы на подключение, максимальное количество одновременных подключений, которое может поддерживать каждый словесный процесс и т. д.
events {
#每个 work process 支持的最大连接数为 1024.
worker_connections 1024;
}
3.3 http-блоки
Это наиболее частая часть конфигурации сервера Nginx, где настраивается большинство функций, таких как определения прокси, кэша и журнала, а также сторонние модули. Следует отметить, что блоки http также могут включать глобальные блоки http и серверные блоки.
3.3.1 глобальный блок http
Директивы конфигурации глобального блока http включают импорт файлов, определение MIME-TYPE, настройку журнала, время ожидания соединения, верхний предел одноканальных запросов и т. д.
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
3.3.2 серверный блок
Это тесно связано с виртуальным хостом. С точки зрения пользователя виртуальный хост точно такой же, как и независимый аппаратный хост. Эта технология разработана для снижения стоимости оборудования интернет-сервера.
Каждый блок http может содержать несколько серверных блоков, и каждый серверный блок эквивалентен виртуальному хосту.
Каждый серверный блок также разделен на глобальный серверный блок и может содержать несколько блоков местоположения одновременно.
-
глобальный серверный блок
Также известный как раздел «виртуальный сервер», он описывает набор ресурсов, логически разделенных в соответствии с различными директивами имя_сервера.Эти виртуальные серверы отвечают на HTTP-запросы и поэтому включены в раздел http. Наиболее распространенными конфигурациями являются конфигурация прослушивания этого хоста виртуальной машины и имя или IP-конфигурация этого виртуального хоста.
server { listen 80; #server_name也支持通配符,*.example.com、www.example.*、.example.com server_name localhost; #charset koi8-r; #access_log logs/host.access.log main;
-
локационный блок
Блок сервера может быть сконфигурирован с несколькими блоками местоположения.
Основная функция этого блока основана на строке запроса (например, server_name/uri-string), полученной сервером Nginx, на строку (например, предыдущую /uri-string), отличную от имени виртуального хоста (или псевдонима IP). ) Соответствует обработке определенного запроса. Здесь также выполняются такие функции, как адресная ориентация, кэширование данных и контроль ответов, а также настройка многих сторонних модулей.
описание директивы местоположения
Эта директива используется для сопоставления URL-адресов.
Синтаксис следующий:
location [ = | ~ | ~* | ^~] uri{}
- = : этот модификатор использует точное совпадение и завершает поиск.
- ~: Этот модификатор использует сопоставление регулярных выражений с учетом регистра.
- ~*: Этот модификатор использует сопоставление регулярных выражений без учета регистра.
- ^~: перед использованием uri без регулярных выражений сервер Nginx должен найти местоположение с наивысшей степенью соответствия между идентификатором uri и строкой запроса, а затем использовать это местоположение для немедленной обработки запроса вместо использования обычного uri. и запрос в блоке местоположения.Строка для сопоставления.
?> TipПримечание. Если uri содержит регулярные выражения, он должен быть помечен знаком ~ или ~*.
Когда приходит запрос, URI проверяется на соответствие оптимальному местоположению.
- Местоположения без регулярных выражений используются как наилучшее соответствие, независимо от порядка местоположений с регулярными выражениями;
- Сопоставление регулярных выражений в файле конфигурации в порядке поиска. Завершает поиск после того, как будет найдено первое совпадение с регулярным выражением. Обработка запросов обеспечивается этим оптимальным расположением.
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; } location / { #try_files指令将会按照给定的参数顺序进行匹配尝试 try_files $uri $uri/ /index.html; }
подробная конфигурация nginx.conf
#定义Nginx运行的用户和用户组
user www www;
#nginx进程数,通常设置成和cpu的数量相等
worker_processes 4;
#全局错误日志定义类型,[debug | info | notice | warn | error | crit]
#error_log /data/nginx/logs/error.log;
#error_log /data/nginx/logs/error.log notice;
#日志文件存放路径 access_log path [format [buffer=size | off]]
access_log /data/nginx/logs/lazyegg.com/web/access.log combinedio;
#进程pid文件
#pid logs/nginx.pid;
#指定进程可以打开的最大描述符:数目
#工作模式与连接数上限
##这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。
#这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误。
worker_rlimit_nofile 65535;
################################# events ###############################
events {
#参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型
use epoll
#单个进程最大连接数(最大连接数=连接数+进程数)
worker_connections 1024;
#keepalive 超时时间
keepalive_timeout 60;
#客户端请求头部的缓冲区大小。
client_header_buffer_size 4k;
#这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。
open_file_cache max=65535 inactive=60s;
#这个是指多长时间检查一次缓存的有效信息。
open_file_cache_valid 80s;
#open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。
open_file_cache_min_uses 1;
#语法:open_file_cache_errors on | off 默认值:open_file_cache_errors off 使用字段:http, server, location 这个指令指定是否在搜索一个文件是记录cache错误.
open_file_cache_errors on;
}
############################## http ##################################
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http{
#文件扩展名与文件类型映射表
include mime.types;
#默认文件类型
default_type application/octet-stream;
#默认编码
charset utf-8;
#服务器名字的hash表大小
server_names_hash_bucket_size 128;
#客户端请求头部的缓冲区大小。
client_header_buffer_size 32k;
#客户请求头缓冲大小。
large_client_header_buffers 4 64k;
#允许客户端请求的最大单个文件字节数
client_max_body_size 8m;
#开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
sendfile on;
#开启目录列表访问,适合下载服务器,默认关闭。
autoindex on;
#此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用
tcp_nopush on;
tcp_nodelay on;
#长连接超时时间,单位是秒
keepalive_timeout 120;
#FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
#gzip模块设置
gzip on; #开启gzip压缩输出
gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 16k; #压缩缓冲区
gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 2; #压缩等级
gzip_types text/plain application/x-javascript text/css application/xml; #压缩类型,默认就已经包含textml,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
gzip_vary on;
#开启限制IP连接数的时候需要使用
#limit_zone crawler $binary_remote_addr 10m;
#负载均衡配置
upstream lazyegg.net {
#upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。
server 192.168.80.121:80 weight=3;
server 192.168.80.122:80 weight=2;
server 192.168.80.123:80 weight=3;
#nginx的upstream目前支持4种方式的分配
#1、轮询(默认)
#每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
#2、weight
#指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
#例如:
#upstream bakend {
# server 192.168.0.14 weight=10;
# server 192.168.0.15 weight=10;
#}
#2、ip_hash
#每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
#例如:
#upstream bakend {
# ip_hash;
# server 192.168.0.14:88;
# server 192.168.0.15:80;
#}
#3、fair(第三方)
#按后端服务器的响应时间来分配请求,响应时间短的优先分配。
#upstream backend {
# server server1;
# server server2;
# fair;
#}
#4、url_hash(第三方)
#按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
#例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
#upstream backend {
# server squid1:3128;
# server squid2:3128;
# hash $request_uri;
# hash_method crc32;
#}
#tips:
#upstream bakend{#定义负载均衡设备的Ip及设备状态}{
# ip_hash;
# server 127.0.0.1:9090 down;
# server 127.0.0.1:8080 weight=2;
# server 127.0.0.1:6060;
# server 127.0.0.1:7070 backup;
#}
#在需要使用负载均衡的server中增加 proxy_pass http://bakend/;
#每个设备的状态设置为:
#1.down表示单前的server暂时不参与负载
#2.weight为weight越大,负载的权重就越大。
#3.max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
#4.fail_timeout:max_fails次失败后,暂停的时间。
#5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
#nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
#client_body_in_file_only设置为On 可以讲client post过来的数据记录到文件中用来做debug
#client_body_temp_path设置记录文件的目录 可以设置最多3层目录
#location对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡
}
#虚拟主机的配置
server {
#监听端口
listen 80;
#域名可以有多个,用空格隔开
server_name lazyegg.net;
#默认入口文件名称
index index.html index.htm index.php;
root /data/www/lazyegg;
#对******进行负载均衡
location ~ .*.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
#图片缓存时间设置
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 10d;
}
#JS和CSS缓存时间设置
location ~ .*.(js|css)?$
{
expires 1h;
}
#日志格式设定
#$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
#$remote_user:用来记录客户端用户名称;
#$time_local: 用来记录访问时间与时区;
#$request: 用来记录请求的url与http协议;
#$status: 用来记录请求状态;成功是200,
#$body_bytes_sent :记录发送给客户端文件主体内容大小;
#$http_referer:用来记录从那个页面链接访问过来的;
#$http_user_agent:记录客户浏览器的相关信息;
#通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
#定义本虚拟主机的访问日志
access_log /usr/local/nginx/logs/host.access.log main;
access_log /usr/local/nginx/logs/host.access.404.log log404;
#对 "/connect-controller" 启用反向代理
location /connect-controller {
proxy_pass http://127.0.0.1:88; #请注意此处端口号不能与虚拟主机监听的端口号一样(也就是server监听的端口)
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#以下是一些反向代理的配置,可选。
proxy_set_header Host $host;
#允许客户端请求的最大单文件字节数
client_max_body_size 10m;
#缓冲区代理缓冲用户端请求的最大字节数,
#如果把它设置为比较大的数值,例如256k,那么,无论使用firefox还是IE浏览器,来提交任意小于256k的图片,都很正常。如果注释该指令,使用默认的client_body_buffer_size设置,也就是操作系统页面大小的两倍,8k或者16k,问题就出现了。
#无论使用firefox4.0还是IE8.0,提交一个比较大,200k左右的图片,都返回500 Internal Server Error错误
client_body_buffer_size 128k;
#表示使nginx阻止HTTP应答代码为400或者更高的应答。
proxy_intercept_errors on;
#后端服务器连接的超时时间_发起握手等候响应超时时间
#nginx跟后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 90;
#后端服务器数据回传时间(代理发送超时)
#后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
proxy_send_timeout 90;
#连接成功后,后端服务器响应时间(代理接收超时)
#连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间)
proxy_read_timeout 90;
#设置代理服务器(nginx)保存用户头信息的缓冲区大小
#设置从被代理服务器读取的第一部分应答的缓冲区大小,通常情况下这部分应答中包含一个小的应答头,默认情况下这个值的大小为指令proxy_buffers中指定的一个缓冲区的大小,不过可以将其设置为更小
proxy_buffer_size 4k;
#proxy_buffers缓冲区,网页平均在32k以下的设置
#设置用于读取应答(来自被代理服务器)的缓冲区数目和大小,默认情况也为分页大小,根据操作系统的不同可能是4k或者8k
proxy_buffers 4 32k;
#高负荷下缓冲大小(proxy_buffers*2)
proxy_busy_buffers_size 64k;
#设置在写入proxy_temp_path时数据的大小,预防一个工作进程在传递文件时阻塞太长
#设定缓存文件夹大小,大于这个值,将从upstream服务器传
proxy_temp_file_write_size 64k;
}
#本地动静分离反向代理配置
#所有jsp的页面均交由tomcat或resin处理
location ~ .(jsp|jspx|do)?$ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080;
}
}
}
4. Пример конфигурации Nginx
4.1 Демонстрация обратного прокси1
Эффект достижения: используйте обратный прокси-сервер nginx, посетите test.com и перейдите прямо на свою машину 127.0.0.1:8080.
- Запустите tomcat, введите 127.0.0.1:8080 в адресную строку браузера, и появится следующий интерфейс.
-
Изменив локальный хост-файл (C:\Windows\System32\drivers\etc), добавьте
127.0.0.1 www.12345.com
Сопоставьте www.12345.com с IP-адресом вашей машины -
После завершения настройки мы можем получить доступ к начальному интерфейсу Tomcat, который появляется на первом этапе, через www.test.com:8080. Так как же просто ввести www.12345.com, чтобы перейти к начальному интерфейсу Tomcat? Используйте обратный прокси nginx.
-
Измените файл конфигурации nginx.conf и добавьте следующую конфигурацию.
proxy_pass
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://127.0.0.1:8080;
}
- Как указано выше, мы прослушиваем порт 80, а доменное имя доступа — www.12345.com.Если номер порта не добавлен, по умолчанию используется порт 80, поэтому при доступе к этому доменному имени он перейдет на 127.0.0.1. :8080 путь. Введите www.12345.com в браузере, и результат будет следующим:
4.2 Демонстрация обратного прокси2
Для достижения эффекта: используйте обратный прокси nginx, перейдите на другой сервисный порт в пути доступа
доступhttp://127.0.0.1/java/Перейти прямо к 127.0.0.1:8080
доступhttp://127.0.0.1/egg/Перейти прямо к 127.0.0.1:8081
-
Запустите два tomcats на сервере, измените один из номеров портов на 8081, добавьте в каждый по две папки в каталог tomcat/webapps/ и напишите html-страницу по желанию), я построил java/index.html и egg/index. HTML
-
Измените nginx.conf, добавьте serve{} в блок http
server { listen 80; server_name localhost; location ~ /java/ { proxy_pass http://127.0.0.1:8080; } location /egg/ { proxy_pass http://127.0.0.1:8081; } }
-
Перезапустите nginx, чтобы проверить эффект
4.3 Конфигурация Nginx — балансировка нагрузки
С взрывным ростом информации в Интернете балансировка нагрузки перестала быть очень незнакомой темой.Как следует из названия, балансировка нагрузки заключается в распределении нагрузки между различными сервисными единицами, что не только обеспечивает доступность услуг, но также гарантирует, что ответ достаточно быстро. , давая пользователям хороший опыт. Быстрый рост трафика и трафика данных породил множество продуктов для балансировки нагрузки.Многие профессиональные аппаратные средства балансировки нагрузки обеспечивают хорошие функции, но они дороги, что делает программное обеспечение для балансировки нагрузки очень популярным, и nginx является одним из них.Один, под Linux , есть Nginx, LVS, Haproxy и другие сервисы, которые могут предоставлять услуги балансировки нагрузки.
Балансировка нагрузки Nginx реализуется комбинацией прокси-модуля и восходящего модуля. Модуль восходящего потока активирует новый раздел конфигурации, определяющий набор серверов восходящего потока.
Эффект внедрения: настроить балансировку нагрузки
- Запустите два Tomcats одновременно (для удобства проверки эффекта, при изменении номера порта tomcat, кстати, измените index.jsp в каталоге apache-tomcat-9.0.29/webapps/ROOR каталога Tomcat по умолчанию страницу приветствия и см. страницу приветствия 8081. "Яйцо" нет)
-
Изменить nginx.conf
http { upstream myserver { server localhost:8080; server localhost:8081; } server { listen 80; location / { proxy_pass http://myserver; } } }
-
Перезапустите nginx и проверьте эффект (метод опроса по умолчанию, каждый раз при открытии нового окна попеременно будут появляться 8080 и 8081, а кеш браузера нужно закрывать для одного и того же окна)
Стратегия распределения Nginx:
-
Опрос (по умолчанию) Каждый запрос распределяется по разным внутренним серверам один за другим в хронологическом порядке.Если внутренний сервер выходит из строя, он может быть автоматически устранен
-
вес представляет собой вес, вес по умолчанию равен 1, чем выше вес, тем больше клиентов будет назначено.Укажите вероятность опроса, и вес пропорционален коэффициенту доступа.Он используется в случае неравномерной производительности внутренний сервер. Например:
upstream server_pool{ server 192.168.5.21 weight=10; server 192.168.5.22 weight=10; }
-
ip_hash Каждый запрос распределяется в соответствии с результатом хеширования IP-адреса доступа, чтобы каждый посетитель мог получить фиксированный доступ к внутреннему серверу, что может решить проблему сеанса. Например:
upstream server_pool{ ip_hash; server 192.168.5.21:80; server 192.168.5.22:80; }
-
Fair (третья сторона) распределяет запросы в соответствии со временем отклика внутреннего сервера и отдает приоритет запросам с коротким временем отклика.
upstream server_pool{ server 192.168.5.21:80; server 192.168.5.22:80; fair; }
4.4 Конфигурация Nginx — динамическое и статическое разделение
Динамическое и статическое разделение Nginx — это просто разделение динамических и статических запросов, это нельзя понимать как простое физическое разделение динамических и статических страниц. Строго говоря, динамические запросы следует отделять от статических запросов, под которыми можно понимать использование Nginx для обработки статических страниц и Tomcat для обработки динамических страниц. С точки зрения текущей реализации разделение динамических и статических файлов можно условно разделить на два типа: один заключается в том, чтобы просто разделить статические файлы на отдельные доменные имена и разместить их на независимых серверах, что также является основным текущим решением; заключается в разделении динамических и статических файлов.Публикуйте смешанные вместе, разделенные nginx. Различная переадресация запросов может быть достигнута путем указания разных имен суффиксов через местоположение. Установив параметр expires, вы можете сделать время истечения срока действия кеша браузера и уменьшить запрос и трафик перед сервером. Конкретное определение Expires: это установка времени истечения срока действия ресурса, то есть ему не нужно отправляться на сервер для проверки, и он может напрямую подтвердить, истекает ли срок его действия через сам браузер, поэтому нет дополнительного трафика. будет сгенерировано. Этот подход идеален для ресурсов, которые изменяются нечасто. (Если файл часто обновляется, не рекомендуется использовать Expires для кэширования), здесь я ставлю 3d, что означает обращение к URL в течение этих 3-х дней, отправку запроса и время последнего обновления файла на сервер не изменился Сервер извлекает и возвращает код состояния 304. Если есть какие-либо изменения, они загружаются напрямую с сервера и возвращается код состояния 200.
- Сервер находит каталог для хранения своих статических файлов
-
Изменить nginx.conf
server { listen 80; server_name localhost; location /static/ { root /usr/data/www; } location /image/ { root /usr/data/; autoindex on; }
-
./nginx -s reload
, проверить эффект
Ключевым моментом добавления порта прослушивания и имени доступа является добавление местоположения и, наконец, проверка правильности конфигурации Nginx, а затем проверка успешного динамического и статического разделения, вам необходимо удалить статический файл на внутреннем сервере tomcat, проверьте, доступен ли к нему доступ, если он доступен, объясните Статический ресурс nginx возвращается напрямую, без перехода на внутренний сервер tomcat
4.5 Переписать Nginx
Перезапись — это важная функция, предоставляемая сервером Nginx, который может реализовывать функции перезаписи и перенаправления URL-адресов.
Сцены:
- Переход к URL-адресу, поддержка разработки и дизайна. Переход на страницу, поддержка совместимости (переход между старой и новой версиями), эффект отображения (упрощенный URL-адрес) и т. д.
- SEO-оптимизация (псевдостатическая поддержка Nginx)
- Фоновое обслуживание, переадресация трафика и т. д.
- Безопасность (Динамический интерфейс для камуфляжа)
Эта директива предназначена для изменения URI с помощью регулярных выражений. Одновременно может существовать одна или несколько директив. URL-адреса должны сопоставляться и обрабатываться по порядку.
Эта директива может быть настроена в блоке сервера или блоке местоположения, и ее основная синтаксическая структура выглядит следующим образом:
rewrite regex replacement [flag];
-
Используя пример обратного прокси demo2, измените nginx.conf (добавлена только одна переписанная строка)
server { listen 80; server_name localhost; location /java/ { proxy_pass http://127.0.0.1:8080; rewrite ^/java /egg/ redirect; } location /egg/ { proxy_pass http://127.0.0.1:8081; } }
-
./nginx -s reload
, проверьте эффект (вход ip/java/ перенаправляется на яйцо)
Директиву rewrite можно настроить в блоке сервера или блоке местоположения, и ее основная синтаксическая структура выглядит следующим образом:
rewrite regex replacement [flag];
- rewriteЗначение: эта директива реализует перезапись URL.
- regexЗначение: регулярное выражение, используемое для сопоставления с URI.
- replacement: заменить содержимое, соответствующее регулярному выражению, заменой.
-
flag: flagФлаг, флаг имеет следующие значения:
- last:После того, как это правило будет сопоставлено, продолжайте сопоставлять новое правило URI местоположения в нисходящем порядке. (используется редко)
- break:Это правило прекращает свое действие при совпадении, и оно больше не будет соответствовать никаким последующим правилам (не часто используемым).
- redirect:Возвратите временное перенаправление 302, и адрес браузера отобразит новый URL-адрес для перехода.
- permanent:Возвращает постоянную переадресацию 301. Адрес браузера отобразит переход к новому URL-адресу.
rewrite ^/(.*) http://www.360.cn/$1 permanent;
4.6 Высокая доступность Nginx
Если кластер веб-серверов рассматривается как город, то сервер балансировки нагрузки эквивалентен городским воротам. Если «городские ворота» закрыты, то проход во внешний мир отрезан. Если есть только один загрузочный сервер Nginx, при отказе будет доступен весь веб-сайт. Поэтому нам нужно более двух Nginx для обеспечения отказоустойчивости и высокой доступности.
Настройка высокой доступности
Решение для горячего резервного копирования с двумя машинами
Это решение является наиболее распространенным решением высокой доступности на отечественных предприятиях.Горячее резервирование с двумя системами фактически относится к состоянию ожидания одного сервера, предоставляющего услуги, и другого, обслуживающего услугу.Когда один сервер недоступен, другой заменяет его.
Что такое поддержка активности?
Keepalived
Программное обеспечение изначально было разработано дляLVS
Программное обеспечение для балансировки нагрузки предназначено для управления и мониторинга состояния каждого сервисного узла в кластерной системе LVS, позже оно было добавлено для достижения высокой доступности.VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)
Функции. следовательно,Keepalived
Помимо возможности управлять программным обеспечением LVS, он также может служить в качестве других сервисов.(例如:Nginx、Haproxy、MySQL等)
ПО для решения высокой доступности
механизм аварийного переключения
Keepalived
Переключение при сбое между высокодоступными сервисами осуществляется черезVRRP
быть реализованным.
существуетKeepalived
Когда сервис работает нормально, основнойMaster
Узел будет непрерывно отправлять (многоадресные) сообщения пульса на резервный узел, чтобы сообщить резервному узлуBackup
Сам узел еще жив, когда мастерMaster
Когда узел выходит из строя, сообщение пульса не может быть отправлено, а резервный узел не может продолжать обнаруживать входящее ведущее устройство.Master
Достигнут пульс узла, поэтому он вызывает собственную программу захвата, чтобы взять на себя IP-ресурсы и услуги основного главного узла. Когда главный узел восстановится, резервный узел освободит IP-ресурсы и службы, которые он взял на себя, когда главный узел выйдет из строя, и вернется к исходной роли резервного копирования.
выполнить
-
Подготовьте две установки Nginx и keepaliver (
yum install keepalived -y
) сервер -
Измените /etc/keepalived/keepalived.conf на обоих серверах.
#主机 #检测脚本 vrrp_script chk_http_port { script "/usr/local/src/check_nginx.sh" #心跳执行的脚本,检测nginx是否启动 interval 2 #(检测脚本执行的间隔,单位是秒) weight 2 #权重 } #vrrp 实例定义部分 vrrp_instance VI_1 { state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备 interface ens33 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡 virtual_router_id 66 # 虚拟路由编号,主从要一直 priority 100 # 优先级,数值越大,获取处理请求的优先级越高 advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数) #授权访问 authentication { auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信 auth_pass 1111 } track_script { chk_http_port #(调用检测脚本) } virtual_ipaddress { 192.168.16.150 # 定义虚拟ip(VIP),可多设,每行一个 } }
# 备机 #检测脚本 vrrp_script chk_http_port { script "/usr/local/src/check_nginx.sh" #心跳执行的脚本,检测nginx是否启动 interval 2 #(检测脚本执行的间隔) weight 2 #权重 } #vrrp 实例定义部分 vrrp_instance VI_1 { state BACKUP # 指定keepalived的角色,MASTER为主,BACKUP为备 interface ens33 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡 virtual_router_id 66 # 虚拟路由编号,主从要一直 priority 99 # 优先级,数值越大,获取处理请求的优先级越高 advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数) #授权访问 authentication { auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信 auth_pass 1111 } track_script { chk_http_port #(调用检测脚本) } virtual_ipaddress { 192.168.16.150 # 定义虚拟ip(VIP),可多设,每行一个 } }
-
Новый скрипт обнаружения (
chmod 775 check_nginx.sh
)#!/bin/bash #检测nginx是否启动了 A=`ps -C nginx --no-header |wc -l` if [ $A -eq 0 ];then #如果nginx没有启动就启动nginx systemctl start nginx #重启nginx if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重启失败,则停掉keepalived服务,进行VIP转移 killall keepalived fi fi
-
Запустить Nginx и сохранить активность (
systemctl start keepalived.service
) -
Смоделируйте сбой Nginx (закройте основной сервер Nginx), убедитесь, что к нему все еще можно получить доступ через настроенный виртуальный IP-адрес, хорошо
5. Принцип Nginx и оптимизированная конфигурация параметров
По умолчанию Nginx использует многопроцессный режим работы.После запуска Nginx запускает главный процесс и несколько рабочих процессов. Среди них мастер действует как интерфейс взаимодействия между всей группой процессов и пользователем и в то же время отслеживает процесс и управляет рабочим процессом для выполнения таких функций, как перезапуск служб, плавное обновление, изменение файлов журнала и реальное выполнение операций. файлы конфигурации времени. Рабочие процессы используются для обработки основных сетевых событий. Рабочие процессы равны и конкурируют друг с другом за обработку запросов от клиентов.
Преимущества механизма мастеров-рабочих
- Может быть развернут в горячем режиме с перезагрузкой nginx-s
- Каждый рабочий процесс является независимым процессом, и его не нужно блокировать, что снижает накладные расходы, вызванные блокировками. Использование независимых процессов может предотвратить влияние друг друга.После завершения одного процесса другие процессы продолжают работать, и служба не будет прервана.Главный процесс быстро запустит новый рабочий процесс.
Сколько рабочих нужно установить
Подобно Redis, Nginx использует механизм мультиплексирования ввода-вывода.Каждый рабочий процесс является независимым процессом, но в каждом процессе есть только один основной поток, который обрабатывает запросы асинхронно и неблокируя, даже если их тысячи. не проблема. Каждый рабочий поток может максимизировать производительность процессора. такНаиболее целесообразно, чтобы количество рабочих и количество ЦП сервера были равныиз. Установка слишком малого значения приведет к трате ЦП, а слишком большое значение приведет к потере ЦП при частом переключении контекстов.
#设置 worker 数量。
worker_processes 4
#work 绑定 cpu(4 work 绑定 4cpu)。
worker_cpu_affinity 0001 0010 0100 1000
#work 绑定 cpu (4 work 绑定 8cpu 中的 4 个) 。
worker_cpu_affinity 0000001 00000010 00000100 00001000
Количество соединений worker_connection
Это значение указывает максимальное количество соединений, которое может установить каждый рабочий процесс, поэтому максимальное количество соединений, которое может установить nginx, должно быть worker_connections * worker_processes. Разумеется, здесь речь идет о максимальном количестве подключений.Для HTTP-запросов к локальным ресурсам максимальное количество одновременных запросов, которое может поддерживаться, равно worker_connections * worker_processes.Если это браузер с поддержкой http1.1, то он будет занимать два подключения за посещение, так что обычно Максимальное количество одновременных статических подключений: worker_connections * worker_processes/2, а если HTTP используется в качестве обратного прокси, максимальное количество одновременных подключений должно быть worker_connections * worker_processes/4. Поскольку в качестве обратного прокси-сервера каждый параллелизм будет устанавливать соединение с клиентом и соединение с серверной службой, которая будет занимать два соединения.
Процесс обработки запросов Nginx
6. Разработка модуля Nginx
Благодаря модульности Nginx, он может поддерживать конфигурацию модулей или настраивать модули.Для разработки модулей Nginx в настоящее время программистам не нужно слишком углубляться.
Классификация модулей Nginx
Варианты конфигурации Nginx
Пример работы конфигурации после распаковки nginx
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-pcre --with-http_ssl_module
опции | объяснять |
---|---|
--prefix=<path> | Корневой каталог установки Nginx, все остальные пути установки зависят от этого параметра. |
--sbin- path=<path> | Указываем путь к бинарнику Nginx |
--conf-path=<path> | Укажите путь к конфигурационному файлу nginx.conf |
--error-log- path=<path> | Укажите путь к файлу ошибки |
--user=name | Пользователь, от имени которого работает рабочий процесс |
--group=<group> | Группа, в которой выполняется рабочий процесс |
--with-http_ssl_module | Используйте модуль протокола https. По умолчанию этот модуль не создается. Предполагается, что openssl и openssl-devel установлены |
--with-http_image_filter_module | Этот модуль используется в качестве фильтра изображений для фильтрации изображений перед их доставкой клиентам (требуется библиотека libgd) |
--with-http_stub_status_module | Включение этого модуля будет собирать собственную информацию о состоянии Nginx, которая часто используется для мониторинга. |
--with-mail | Включить почтовый модуль, который не активирован по умолчанию |
--without-http_autoindex_module | Отключено: если в каталоге нет индексного файла, модуль может собирать файлы и перечислять их. |
--add-module=<path> | Добавляйте сторонние внешние модули и перекомпилируйте каждый раз, когда добавляется новый модуль. |
7. Вопросы для интервью с Nginx
Поздравляем, вы успешно прошли этап собеседования Великой Обезьяны Шуай, приветствия нет.
-
Функция Nginx, Nginx используется в вашем проекте?
обратный прокси-сервер
добиться балансировки нагрузки
Сделать сервер статических ресурсов
как http-сервер
-
Где написаны общие команды Nginx?
запустить nginx ./sbin/nginx остановить nginx ./sbin/nginx -s остановить ./sbin/nginx -s выйти Перезагрузить конфигурацию ./sbin/nginx -s reload (плавный перезапуск) service nginx reload Перезагрузить указанный файл конфигурации ./sbin/nginx -c /usr/local/nginx/conf/nginx.conf Проверить версию nginx ./sbin/nginx -v Проверить правильность файла конфигурации ./sbin/nginx -t Показать справочную информацию ./sbin/nginx -h
-
Общая конфигурация Nginx?
worker_processes 4; #工作进程数 work_connections 65535; #每个进程的并发能力 error_log /data/nginx/logs/error.log; #错误日志
-
Как Nginx обеспечивает высокий параллелизм?
Nginx использует многопроцессорную (один поток) и мультиплексную модель мультиплексирования ввода-вывода, асинхронную и неблокирующую.
Один главный процесс, несколько рабочих процессов, каждый рабочий процесс может обрабатывать несколько запросов
Главный процесс в основном отвечает за сбор и распределение запросов. Всякий раз, когда приходит запрос, мастер запускает рабочий процесс для обработки запроса. В то же время главный процесс также отвечает за мониторинг состояния пробуждающего устройства для обеспечения высокой надежности.
В процессе работы в nginx для работы с сценариями высокой параллелизма принята модель Reactor (т.е. мультиплексирование ввода/вывода, NIO):
- Каждый рабочий процесс обрабатывает несколько запросов на подключение посредством мультиплексирования ввода-вывода;
- Чтобы уменьшить потерю производительности при переключении процессов (требующем системных вызовов), количество рабочих процессов обычно устанавливается равным количеству ЦП.
**Модель мультиплексирования ввода/вывода:** В модели мультиплексирования ввода/вывода наиболее важной функцией системного вызова является функция select (другие включают epoll и т. д.), которая может одновременно отслеживать несколько файлов. Дескрипторы доступны для чтения и записи ( каждое сетевое соединение фактически соответствует файловому дескриптору), когда некоторые из файловых дескрипторов доступны для чтения или записи, метод select вернет доступное для чтения и записи количество символов в описаниях файлов.
рабочий процесс нгинксИспользуйте модуль мультиплексирования ввода/вывода для одновременного мониторинга нескольких FD (файловых дескрипторов).Когда генерируются события принятия, чтения, записи и закрытия, операционная система вызывает обработчик событий, связанный с FD.В это время , рабочий процесс перезапустится, чтобы обработать соответствующее событие, а не блокировать ожидание соединения по запросу. Это позволяет процессу обрабатывать несколько соединений одновременно.
-
Разница между nginx и apache?
Легкий, такой же, как веб-сервис, занимает меньше памяти и ресурсов, чем apache. Анти-параллелизм, nginx обрабатывает запросы асинхронно и неблокируя, в то время как apache блокирует.При высоком параллелизме nginx может поддерживать низкое потребление ресурсов и высокую производительность Высокомодульный дизайн, написание модулей относительно просто Основное отличие заключается в том, что apache — это синхронная многопроцессная модель, одно соединение соответствует одному процессу, а nginx — асинхронный, и одному процессу может соответствовать несколько соединений (десять тысяч уровней).
-
Какой метод балансировки нагрузки поддерживается восходящим потоком nginx?
-
опрос (по умолчанию)
-
вес: указать вес
-
ip_hash : каждый запрос распределяется в соответствии с результатом хеширования IP-адреса доступа, так что каждый посетитель имеет фиксированный доступ к внутреннему серверу.
-
Третье лицо: честный, url_hash
-
Каковы общие конфигурации оптимизации Nginx?
- Отрегулируйте worker_processes: относится к количеству рабочих процессов, которые будут сгенерированы Nginx, рекомендуется запускать 1 рабочий процесс на каждый процессор.
- Максимизируйте worker_connections :
- Сжатие Gzip включено: сжимает размер файла, уменьшает пропускную способность HTTP-передачи клиента, тем самым повышая скорость загрузки страницы.
- Включить кеширование статических файлов
- отключить access_logs : ведение журнала доступа, он записывает каждый запрос nginx и, таким образом, потребляет много ресурсов ЦП, что снижает производительность nginx
Ссылаться на:
«100 лекций по базовым знаниям Nginx»
«Освоение Nginx»
Подробный файл конфигурации nginx.conf
«Шан Силиконовая долина Nginx»