-
Обзор
-
Установить и использовать
-
Практическая сцена
-
веб хостинг
-
статический сайт
-
обратный прокси
-
балансировки нагрузки
-
Зашифрованная передача HTTPS
-
файловый сервер
-
Ограничение скорости
-
Ограничение
-
Черный и белый список
-
запрос на перехват
-
-
Подробная информация о конфигурации и переменных
-
Коды состояния HTTP
Обзор
What is Nginx?
Nginx (произносится как «engine x») — это высокопроизводительный обратный прокси-сервер и программное обеспечение веб-сервера. Благодаря низкому потреблению системных ресурсов, стабильной работе и высокопроизводительным возможностям параллельной обработки Nginx широко используется в интернет-компаниях.
Возможности Nginx
-
Высокая производительность и высокий параллелизм
-
Хорошая масштабируемость
-
Асинхронная неблокирующая модель, управляемая событиями
Nginx Apache Один процесс обрабатывает несколько запросов Процесс обрабатывает запрос неблокирующий блокировка
Установить и использовать
Установить
установка окон
- Загрузите официальную стабильную версию:
https://nginx.org/download/nginx-1.20.0.zip
- Разархивируйте его локально и запустите напрямую
nginx.exe
Просто
установка линукс
- установка пакета rpm
Страница загрузки пакета rpm:
$ rpm -ivh nginx-*.rpm
- отключить брандмауэр
$ firewall-cmd --zone=public --add-port=80/tcp --permanent
$ firewall-cmd --reload
Пакет rpm уже содержит большое количество распространенных модулей, для его установки рекомендуется использовать пакет rpm, это просто и быстро.
использовать
Параметры команды | значение |
---|---|
nginx | запускать |
nginx -V | Просмотрите текущую версию и скомпилированную информацию о конфигурации |
nginx -t | Проверьте правильность синтаксиса файла конфигурации. |
nginx -s stop | Закрыть рабочий дочерний процесс напрямую |
nginx -s quit | Подождите, пока рабочий дочерний процесс правильно обработает запрос, а затем закройте |
nginx -s reload | Перечитайте файл конфигурации |
Практическая сцена
веб хостинг
server {
# 1: 基于多ip的虚拟主机:listen监听不同网卡的ip,端口可相同
listen 8000;
server_name 172.17.1.1;
listen 8000;
server_name 172.17.1.2;
# 2: 基于多端口的虚拟主机:listen监听不同端口
listen 8001;
server_name localhost;
listen 8002;
server_name localhost;
#3: 基于域名的虚拟主机:端口可相同,server_name为不同域名
listen 8003;
server_name www.test1.com;
listen 8003;
server_name www.test2.com;
}
статический сайт
Для ускорения парсинга веб-сайта динамические ресурсы могут быть переданы на back-end сервер, а чисто front-end статические страницы помещены в системную директорию и переданы Nginx для парсинга.
server {
listen 80;
server_name localhost;
location / {
root /opt/nginx/html;
index index.html index.htm;
}
}
обратный прокси
Обратный прокси — это режим прокси, в котором обратный прокси-сервер получает ресурсы ответа от одного или нескольких прокси-серверов в соответствии с определенными правилами и возвращает их клиенту после того, как пользовательский клиент обращается к прокси-серверу.Клиент знает только IP-адрес прокси-сервера. , IP внутреннего сервера не известен, потому что прокси-сервер скрывает информацию о прокси-сервере.
Обратный прокси-сервер уровня 7
В разделе http файла конфигурации nginx.conf напишите конфигурацию в следующем формате для проксирования локального порта 8088 в Baidu:
server {
listen 8088;
server_name localhost;
location / {
proxy_pass https://www.baidu.com;
}
}
Обратный прокси-сервер уровня 4
Помимо проксирования трафика HTTP уровня 7, Nginx также может проксировать трафик TCP/UDP уровня 4. Поток основного модуля необходимо скомпилировать, добавив параметр «--with-stream» при компиляции и настройке (включен в пакет rpm) .
Конфигурационный файл выглядит следующим образом (его нужно прописать в основной раздел):
stream {
server {
listen 3306;
# 访问本机的3306,就被转发到了远程的3306
proxy_pass 172.17.0.1:3306;
}
}
балансировки нагрузки
Когда возникает бизнес-сценарий с высокой степенью параллелизма и большим трафиком, один внутренний сервер больше не может поддерживать нормальную работу бизнеса, и трафик запросов необходимо распределять по нескольким узлам обслуживания в соответствии с определенными правилами. узел не работает, система по-прежнему может нормально функционировать извне. Предоставление услуг для повышения производительности и стабильности системы.
Диаграмма соглашения о поддержке
восходящий модуль
- Определить вышестоящий сервер
инструкция | значение |
---|---|
upstream | Имя сегмента, которое определяет URL-адрес вышестоящей службы в середине. |
server | Определить адрес вышестоящей службы |
zone | Определите общую память для совместного использования данных между рабочими подпроцессами. |
keepalive | Включите постоянные подключения к вышестоящим службам, каждый рабочий подпроцесс подключен к вышестоящему серверу.простоя долгое соединениеМаксимальное количество (keepalive 16; при одновременном поступлении 5000 запросов, после обработки будет зарезервировано 16 подключений, а все остальные будут закрыты) |
keepalive_requests | Максимальное количество запросов, которые может обработать постоянное соединение |
keepalive_timeout | В состоянии простоя период тайм-аута длинного соединения, после которого длинное соединение будет уничтожено. |
hash | Алгоритм балансировки нагрузки: Хэш |
ip_hash | Алгоритм балансировки нагрузки: расчет хэша на основе ip |
least_conn | Алгоритм балансировки нагрузки: наименьшее количество подключений |
least_time | Алгоритм балансировки нагрузки: минимальное время отклика |
random | Алгоритм балансировки нагрузки: случайный |
необязательный параметр сервера
параметр | значение |
---|---|
weight=number | Значение веса, по умолчанию 1 |
max_conns=number | Максимальное количество одновременных подключений к вышестоящему серверу |
fail_timeout=time | Время, когда сервер недоступен |
max_fails=number | Количество проверок, что сервер недоступен |
backup | Резервный сервер, только если другие серверы недоступны |
down | Марк сервер недоступен в течение длительного времени, автономное техническое обслуживание |
алгоритм балансировки нагрузки
-
опрос (по умолчанию)
- Каждый запрос распределяется по разным внутренним серверам один за другим в хронологическом порядке.
upstream backend {
# 默认所有服务器权重为 1
server 192.168.1.1:8080;
server 192.168.1.2:8080;
server 192.168.1.3:8080;
}
-
вес - опрос веса
- Указывает вероятность опроса, которая используется, когда производительность внутреннего сервера неравномерна.
upstream backend {
server 192.168.1.1:8080 weight=3;
server 192.168.1.2:8080 weight=2;
# default weight=1
server 192.168.1.3:8080;
}
-
хэш - хэш
- Алгоритм хэширования заключается в преобразовании двоичного значения любой длины в более короткое двоичное значение фиксированной длины.Это маленькое двоичное значение называется хеш-значением, и это преобразование является необратимым.
- hash $request_uri: загрузить в соответствии с хеш-значением этой переменной
upstream backend {
hash $request_uri;
server 192.168.1.1:8080;
server 192.168.1.2:8080;
server 192.168.1.3:8080;
}
-
ip_hash
- Каждый запрос распределяется в соответствии с результатом хеширования IP-адреса доступа, чтобы каждый посетитель мог получить доступ к внутреннему серверу, что является одним из решений проблемы совместного использования сеансов.
upstream backend {
ip_hash;
server 192.168.1.1:8080;
server 192.168.1.2:8080;
server 192.168.1.3:8080;
}
-
Алгоритм наименьших соединений
- Выберите запрос на выделение от вышестоящего сервера с наименьшим количеством установленных соединений.
- В крайних случаях он выродится в алгоритм опроса.
- наименьшее_соединение:
- Когда несколько рабочих подпроцессов обрабатывают запросы одновременно, состояние подключения внутреннего сервера не может быть общим.В этом случае необходимо открыть пространство общей памяти для обмена информацией между несколькими рабочими подпроцессами.
- zone zone_name 1M, открыть разделяемую память
upstream backend {
least_conn;
server 192.168.1.1:8080;
server 192.168.1.2:8080;
server 192.168.1.3:8080;
}
Обработка, когда исключение возвращается на вышестоящий сервер
Не удается переслать в этих случаях
грамматика:proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent| off
По умолчанию: время ожидания ошибки proxy_next_upstream
Контекст: http, сервер, местоположение
Период тайм-аута, по истечении которого больше не будет предприниматься неудачных попыток переадресации.
грамматика:proxy_next_upstream_timeout time
По умолчанию: proxy_next_upstream_timeout 0 (не ждать)
Контекст: http, сервер, местоположение
Время пересылки
грамматика:proxy_next_upstream_tries number
По умолчанию: proxy_next_upstream_tries 0 (всегда вперед)
Контекст: http, сервер, местоположение
необязательный параметр | значение |
---|---|
error | Передайте запрос на внутренний сервер или прочитайте заголовки ответа.ошибкавремя (время простоя сервера будет перенесено на следующий) |
timeout | Передайте запрос на внутренний сервер или прочитайте заголовки ответа.тайм-аут(Если тело ответа не получено в течение времени, установленного proxy_read_timeout, оно будет перенаправлено на следующий сервер; но если сервер не работает, будет возвращено 502, и следующий сервер не будет перенаправлен) |
invalid_header | Когда бэкенд возвращает неверный ответ |
http_500, 502, 503, 504, 403, 404, 429 | Когда статус ответа http xxx |
non_idempotent | В случае сбоя неидемпотентного запроса следует ли пересылать следующий внутренний сервер (если не задано, он не будет переадресовываться. Например, при попадании запроса на публикацию, если получено 404, 404 будет возвращено напрямую. Лучше всего не устанавливать его легко для операций записи) |
off | Отключить переадресацию отказа запроса |
Пример конфигурации
upstream backend {
zone upstream_backend 64k;
server 127.0.0.1:8080 weight=2 max_conns=1000 fail_timeout=10s max_fails=5;
server test.nginx.com weight=1;
keepalive 16;
keepalive_requests 100;
keepalive_timeout 30s;
}
server {
location /test {
proxy_pass http://backend/test;
# 如果不配置proxy_next_upstream,当遇到上游返回http错误状态码时,nginx会直接返回给客户端
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_403 http_404 http_429;
}
}
Зашифрованная передача HTTPS
HTTPS защищает передачу данных между клиентом и сервером по зашифрованному каналу и стал обязательной конфигурацией для текущего развертывания веб-сайта. На HTTPS-сайте, развернутом с прокси-кластером Nginx, SSL-сертификат обычно развертывается на сервере Nginx, а затем запрос передается через прокси на вышестоящий сервер в бэкэнде. В этом методе развертывания сервер Nginx отвечает за работу запроса SSL, что относительно снижает нагрузку на ЦП внутреннего восходящего сервера.
- Создать самозаверяющий сертификат HTTPS
# 配置https签名证书
# 1、创建https证书存放目录:
cd /usr/local/nginx/conf/
mkdir ssl
# 2、创建私钥:
openssl genrsa -des3 -out https.key 1024
# 3、创建签名请求证书:
openssl req -new -key https.key -out https.csr
# 4、在加载SSL支持的Nginx并使用上述私钥时除去必须的口令:
cp https.key https.key.org
openssl rsa -in https.key.org -out https.key
# 5、最后标记证书使用上述私钥和CSR和有效期:
openssl x509 -req -days 365 -in https.csr -signkey https.key -out https.crt
- конфигурация сервера
server {
listen 443 ssl;
server_name localhost;
# 证书部分
ssl_certificate /usr/local/nginx/conf/ssl/https.crt; #RSA证书
ssl_certificate_key /usr/local/nginx/conf/ssl/https.key; #RSA密钥
# TLS 握手优化
# 会话缓存的存储大小为1MB
ssl_session_cache shared:SSL:1m;
# 会话缓存的超时时间为5分钟
ssl_session_timeout 5m;
keepalive_timeout 75s;
keepalive_requests 100;
location / {
root html;
index index.html index.htm;
}
}
файловый сервер
Для архивирования некоторых данных или материалов необходим файловый сервер. Используя Nginx, можно очень быстро и удобно создать простую файловую службу.
- Эффект
- настроить
server {
listen 8004;
server_name localhost;
# 正常显示中文,windows服务器下中文目录无法下钻,目前无解
charset gbk,utf-8;
# 打开autoindex功能,以/结尾的请求
autoindex on;
# 显示文件的大小,
# on:以字节显示
# off:人性化显示,文件过大会显示为mb或gb
autoindex_exact_size off;
# 以哪种格式返回:html | xml | json | jsonp
# 默认值: autoindex_format html
autoindex_format html;
# 显示时间格式
# on: 12-Jul-2019 10:11(当前时区)
# off: 12-Jul-2019 02:11(0时区,GMT)
autoindex_localtime on;
location / {
root /data/files/;
# 如果a.html文件存在,则会返回a.html内容,否则才会返回目录内容
index a.html;
}
}
Ограничение скорости
location /rate {
# 定义响应数据的传输速度,默认bytes/s
limit_rate 20;
# 这些是Nginx处理请求时相关变量,加大返回数据量更好地看到限速效果
return 200 'request_time $request_time
request_id $request_id
server_name $server_name
request_filename $request_filename
document_root $document_root
realpath_root $realpath_root
request_completion $request_completion
';
}
Ограничение
limit_conn
- Используется для ограничения количества одновременных клиентских подключений.
- Использовать общую память, эффективную для всех рабочих дочерних процессов (необходимо сохранить количество клиентских подключений)
limit_req
- Используется для ограничения клиентской обработки запросовСредняя оценка
- Использовать общую память, эффективную для всех рабочих дочерних процессов
- Алгоритм ограничения тока:leaky_bucket(дырявое ведро)
- Временно заблокируйте нисходящий поток воды наверху и подождите, пока часть воды из ведра вытечет, прежде чем выпустить воду наверху.
- Вода выше перелива выбрасывается напрямую.
http {
include mime.types;
default_type application/json;
# limit_conn_zone key zone=name:size
# key:用于定义客户端的唯一标识来限速,如remote_addr
# name:任意名称
# size:共享内存大小空间,m为单位
# binary_remote_addr 使用4个字节空间,高效;remote_addr 使用7-15个字节空间
limit_conn_zone $binary_remote_addr zone=limit_addr:10m;
# limit_req_zone key zone=name:size rate=rate;
# 上下文:http
# rate:表示允许相同标识的客户端的访问频次,12r/m的,即限制每5秒访问一次,每5秒才处理一个请求。
limit_req_zone $binary_remote_addr zone=limit_req:15m rate=12r/m;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
# 触发限速后,返回状态码,默认503
# 上下文:http, server, location
limit_conn_status 503;
# 当触发限速后,错误日志出记录一条日志, 这里用于定义日志等级
# info|notice|warn|error
# 上下文:http, server, location
# 默认值:error
limit_conn_log_level warn;
# limit_conn zone number;
# zone:用limit_conn_zone中定义的zone名称
# number:以zone为标识的客户端被允许的同时最大连接数
limit_conn limit_addr 2;
# 定义响应数据的传输速度,bytes/s
# 本指令属于ngx_http_core_module,不属于ngx_http_limit_conn_module
limit_rate 50;
# limit_req_status code(http的状态码)
# 默认值:503
# 上下文:http, server, location
limit_req_status 504;
# 触发限速后,日志记录的等级
# info|notice|warn|error
# 默认值:error
# 上下文:http, server, location
limit_req_log_level notice;
# limit_req zone=name [burst=number] [nodelay | delay=number];
# burst:桶大小,设置一个大小为x的缓冲区,当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内等待,但是这个等待区里的位置只有5个,超过的请求会直接报503的错误然后返回。
# nodelay:如果设置,会在瞬时提供处理(burst + rate)个请求的能力,请求超过(burst + rate)的时候就会直接返回503,永远不存在请求需要等待的情况。
# 上下文:http, server, location
# limit_req zone=limit_req burst=7 nodelay;
limit_req zone=limit_req;
}
}
}
Черный и белый список
access
-
Ограничить доступ к определенному IP или сегменту сети
-
allow
-
deny
server {
listen 80;
server_name localhost;
location / {
# allow address | CIDR | UNIX | all
# 默认值
# 上下文:http, server, location, limit_except
allow 192.168.0.1/24;
# deny address | CIDR | UNIX | all
# 默认值
# 上下文:http, server, location, limit_except
deny all;
}
}
пример правила
location / {
# 规则从上到下
# 拒绝
deny 192.168.1.1;
# 放行192.168.1.0网段,子网掩码24位(255.255.255.0),但是除了192.168.1.1
allow 192.168.1.0/24;
# 放行10.1.1.0网段,子网掩码16位(255.255.0.0)
allow 10.1.1.0/16;
# 放行ipv6
allow 2001:0db8::/32;
# 除了上面放行的,其他全部拒绝
deny all;
}
запрос на перехват
auth_request
- Контроль доступа на основе кода ответа HTTP, полученного подзапросом
- Например: перехватить все запросы, сначала сделать запрос аутентификации, а затем отпустить его после прохождения
location /private {
# 默认值:off
# 上下文:http, server, location;
# 鉴权成功对会返回后面实际内容,鉴权失败会返回鉴权服务的返回内容
auth_request /auth;
...
}
location /auth {
proxy_pass http://localhost:8080/auth;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}
Подробная информация о конфигурации и переменных
Основной раздел глобальной конфигурации
核心参数(其他参数大部分情况下用不到)
# user USERNAME [GROUP]
# 解释:指定运行nginx的worker子进程的属主和属组,其中属组可以不指定
user nginx;
# worker_processes NUMBER | auto
# 解释:指定nginx启动的worker子进程数量
# 【*auto:自动设置为物理CPU核心数】
worker_processes auto;
# pid DIR
# 解释:指定运行nginx的master主进程的pid文件存放路径
pid /opt/nginx/logs/nginx.pid;
# worker_rlimit_nofile NUMBER
# 解释:指定worker子进程可以打开的最大文件句柄数
# 【系统最大打开65535,每个子进程打开数乘子进程数,实际也不会超过65535】
# 这个值需要调大
worker_rlimit_nofile 20480;
# worker_rlimit_core SIZE
# 指定worker子进程异常终止后的core文件,用于记录分析问题
worker_rlimit_core 50M;
working_directory /opt/nginx/tmp;#【必须对子进程用户赋写权限】
# 解释:将每个worker子进程与CPU物理核心绑定
# 【master负责调度,worker负责处理请求】
# 【假设CPU有4个核心,某一时刻worker1获取到了CPU1的工作调度时间片,时间片过后worker1从CPU1上面撤下来,CPU1去处理其他事件,下一时刻可能是CPU2、CPU3的时间片调度到了worker1上面,那么worker1就会在其他CPU上面工作,进程与CPU的调度切换是有损耗的,worker1如果绑定了CPU1,worker1将永远等待CPU1的调度,充分利用CPU缓存】
# 【【主要作用:将每个worker子进程与特定CPU物理核心绑定,优势在于:避免同一个worker子进程在不同的CPU核心上切换,缓存失效,降低性能;其并不能真正避免进程切换(进程切换是CPU工作特性)】】
# -- worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;# 8核心,8个worker
# -- worker_cpu_affinity 01 10 01 10;# 2核心,4个worker
worker_cpu_affinity 0001 0010 0100 1000;# 4核心,4个worker
# 解释:指定worker子进程的nice值,以调整运行nginx的优先级,通常设定为“负值”,以优先调用nginx
# 【Linux默认进程的优先级值是120,值越小越优先;nice设定范围为-20到+19】
# 【对Linux来说,优先级值则是100到139】
worker_priority -20;
# 指定worker子进程优雅退出时的超时时间,不管5秒内是否处理完,都强制退出
worker_shutdown_timeout 5s;
# worker子进程内部使用的计时器精度,调整时间间隔越大,系统调用越少,有利于性能提升;反之,系统调用越多,性能下降
# 比如某些计时的操作,worker需要去获取内核时间,频繁跟内核打交道会降低性能
timer_resolution 100ms;
# daemon on | off
# 设定nginx的运行方式,前台还是后台,前台用户调试,后台用于生产
daemon on;
# 负载均衡互斥锁文件存放路径
lock_file logs/nginx.lock;
сегмент событий
events {
# Nginx使用何种事件驱动模型,一般不指定这个参数
# use epoll;
# worker子进程能够处理的最大并发连接数,多核情况最大其实达不到65535,
worker_connections 65535;
# 是否打开负载均衡互斥锁,默认off(当master接收到请求时,会给每个worker发送消息去唤醒,状态为on时,则会有一个负载均衡锁,master会轮流发给每一个)
accept_mutex on;
# 新连接分配给worker子进程的超时时间,默认500ms,超时后会转给下一个worker处理请求
accept_mutex_delay 100ms;
# worker子进程可以接收的新连接个数(这个参数对性能影响不太大)
multi_accept on;
}
http-сегмент
- серверный сегмент
server {
listen 80;
server_name www.test.com;
location /picture {
root /opt/nginx/html/picture;
# 客户端请求 www.test.com/picture/1.jpg;
# 对应磁盘映射路径为:/opt/nginx/html/picture/picture/1.jpg
}
location /picture {
alias /opt/nginx/html/picture/;
# 客户端请求 www.test.com/picture/1.jpg;
# 对应磁盘映射路径为:/opt/nginx/html/picture/1.jpg
# 【末尾一定要加/】
}
}
- правила сопоставления для server_name
# 精确匹配,优先级最高,1
server_name www.test.com;
# 左通配,优先级2
server_name *.test.com;
# 右通配,优先级3
server_name www.test.*;
# 正则通配,优先级最低,4
server_name ~^w\.test\..*$;
# 多个
server_name www.test.com *.test.com www.test.* ~^w\.test\..*$;
- сегмент местоположения
правила сопоставления | значение | Пример | приоритет (1 наивысший) |
---|---|---|---|
= | точное совпадение | location = /pic/ | 1 |
^~ | Остановить поиск, когда он совпадет | location ^~ /pic/ | 2 |
~ | Регулярное сопоставление с учетом регистра | location ~ \.(Jpg|gif)# | 3 |
~* | Обычное сопоставление, без учета регистра | location ~ \.(Jpg|gif)$ | 4 |
неподписанный | location / | 5 | |
@ | внутренний прыжок | location @errorpage |
# 测试样例
location ~ /test/8005/t/$ {
return 200 'first regular expressions match!';
}
location ~* /test/8005/t/(\w+)$ {
return 200 'longest regular expressions match!';
}
location ^~ /test/8005/t/ {
return 200 'stop regular expressions match!';
}
location /test/8005/t/Test2 {
return 200 'longest prefix string match!';
}
location /test/8005/t {
return 200 'prefix string match!';
}
location = /test/8005/t {
return 200 'exact match!';
}
Разница между корнем и псевдонимом | root | alias |
---|---|---|
грамматика | root path | alias path |
контекст | http, server, location, if | location |
разница | Путь определения наложения с URI | Возьмите только путь определения, обязательно добавьте / в конце |
Разница между расположением с/без/в конце | ||
---|---|---|
Без/ | location /test | Попробуйте использовать тест в качестве каталога, и если вы не можете его найти, найдите тестовый файл. |
пояс/ | location /test/ | Используйте тест как каталог и возвращайте 404 напрямую, если он не существует. |
location /status {
# 监控模块
stub_status;
}
# ------页面结果------
Active connections: 2
server accepts handled requests
16 16 26
Reading: 0 Writing: 1 Waiting: 1
Пункт статуса | значение |
---|---|
Active connections | Текущее количество TCP-соединений между клиентом и Nginx равно сумме следующих операций чтения, записи и ожидания. |
accepts | Общее количество подключений к клиентам с момента запуска Nginx. |
handled | Общее количество клиентских подключений, обработанных с момента запуска Nginx. Если конфигурация worker_connections не превышена, значение такое же, как и accepts |
requests | Общее количество клиентских запросов, обработанных с момента запуска Nginx. Поскольку существует запрос HTTP Keep-Alive, значение запросов будет больше, чем обработанное значение. |
Reading | Общее количество подключений, которые читают заголовки HTTP-запросов. |
Writing | Общее количество подключений, которые отправляют ответные данные клиенту. |
Waiting | Общее количество простаивающих в настоящее время соединений HTTP Keep-Alive |
Встроенные переменные | |
---|---|
имя переменной | значение |
$connections_active | То же, что и значение активных подключений |
$connections_reading | То же, что и значение чтения |
$connections_writing | То же, что и запись значения |
$connections_waiting | То же, что и значение ожидания |
- команда перезаписи и команда возврата
- return
- Остановить обработку запроса, вернуть код ответа напрямую или перенаправить на другой URL-адрес.
- После выполнения инструкции возврата последующие инструкции в локации выполняться не будут.
- rewrite
- Переписать URL-адреса в соответствии с указанными правилами сопоставления регулярных выражений.
- return
location / {
# 上下文:server, location, if
# return code [text];
# text:响应体内容(如果code是200)
# return 200 "return 200 HTTP Code";
# return code URL;
# URL:重定向
# return 302 /test;
# return URL;
# URL:直接跟URL的话必须是http/https开头的完整路径
# text:响应体内容
return http://localhost:8000/test;
}
location /test {
index test.html;
}
location /search {
# rewrite regex replacement [flag]
# 上下文:server, location, if
# flag:
# last: 重写后的url发起新请求,再次进入server段,重试location中的匹配
# break: 直接使用重写后的url,不再匹配其他location中的语句
# redirect: 返回302临时重定向
# permanent: 返回301永久重定向
rewrite /(.*) https://www.baidu.com permanent;
}
location /test1 {
# 继续匹配location,
rewrite /images/(.*) /test2/$1 last;
return 200 "return 200 in /test1";
}
location /test2 {
# 不会再匹配,直接找test3下面的文件
rewrite /pics/(.*) /test3/$1 break;
return 200 "return 200 in /test2";
}
location /test3 {
# 请求:/test3/index.html,
# 结果:直接返回"return 200 in /test3",不会再去找index.html文件
return 200 "return 200 in /test3";
}
location /test4/ {
if ( $remote_addr = "192.168.1.1" ) {
return 200 "test if OK in URL /test4/";
}
}
location /test5 {
if ( $uri = "/images/" ) {
rewrite (.*) /test2/ break;
}
# 执行了上面rewrite后,这里的return还会执行,通常不会联合一起写
return 200 "test5 if failed\n";
}
Классификация переменных Nginx
1、TCP连接相关变量
#客户端地址,例如192.168.1.1
remote_addr
#客户端端口,例如58473
remote_port
#客户端地址的整型格式
binary_remote_addr
#已处理连接,是一个递增的序号
connection
#当前连接上执行的请求数,对于keepalive连接有意义
connection_request
#如果使用proxy_protocol协议,则返回原始用户的地址,否则为空
proxy_protocol_addr
#如果使用proxy_protocol协议,则返回原始用户的端口,否则为空
proxy_protocol_port
#服务器地址,例如192.168.184.240
server_addr
#服务器端口,例如80
server_port
#服务端协议,例如HTTP/1.1
server_protocol
2、HTTP请求相关变量
#请求包体头部长度
conten_length
#请求包体类型
content_type
#URL中某个参数
arg_参数名
#所有URL参数
args
#URL中有参数,则返回?;否则返回空
is_args
#与args完全相同
query_string
#请求的URL,不包含参数
uri
#请求的URL,包含参数
request_uri
#协议名,http或者https
scheme
#请求的方法,GET、HEAD、POST等
request_method
#所有请求内容的大小,包含请求行,头部,请求体
request_length
#由HTTP Basic Authentication协议传入的用户名
remote_user
#客户端请求主体信息的临时文件名
request_body_file
#包含请求的主要信息,在使用proxy_pass或fastcgi_pass指令的location中比较有意义
request_body
#先看请求行,再看请求头,最后找server_name
host
#用户浏览器标识
http_user_agent
#从哪些链接过来的请求
http_referer
#经过一层代表服务器,添加对应代理服务器的信息
http_via
#获取用户真实IP
http_x_forwarded_for
#用户cookie
http_cookie
3、Nginx处理请求时相关变量
#请求处理到现在所耗费的时间,单位为秒,例如0.03代表30毫秒
request_time
#请求处理完成,则返回OK,否则为空
request_completion
#16进制显示的请求id,随机生成的
request_id
#匹配上请求的server_name值
server_name
#若开启https,则值为on,否则为空
https
#待访问文件的完整路径
request_filename
#由URI和root/alias规则生成的文件夹路径
document_root
#将document_root中的软链接换成真实路径
realpath_root
#返回响应时的速度上限值
limit_rate
4、Nginx返回响应时相关变量
#响应体中真实内容的大小
body_bytes_sent
#全部响应体大小
body_sent
#HTTP返回状态码
status
5、系统变量
#nginx系统版本
nginx_version
#服务器时间
time_local
пространственно-временная единица
единица времени
- мс: миллисекунды
- с: секунды
- м: минуты
- ч: часы
- д: дни
- ж: неделя
- М: месяц
- г: год
космическая единица
- к/к: КБ
- м/м: МБ
- г/г: ГБ
Коды состояния HTTP
Классификация | описывать |
---|---|
1** | Информация, сервер получил запрос и запрашивающей стороне необходимо продолжить операцию |
2** | Success, операция успешно получена и обработана |
3** | Перенаправление, дальнейшие действия, необходимые для выполнения запроса |
4** | Ошибка клиента, запрос содержит синтаксическую ошибку или запрос не может быть выполнен |
5** | Ошибка сервера, сервер обнаружил ошибку при обработке запроса |
код состояния | описывать |
---|---|
100 | Продолжать. Клиент должен продолжить свой запрос |
101 | Переключение протоколов. Сервер переключает протоколы по запросу клиента. Переключитесь только на протокол более высокого уровня, например, на более новую версию HTTP. |
200 | Запрос выполнен успешно. Обычно используется для запросов GET и POST. |
201 | созданный. Успешно запрошен и создан новый ресурс |
202 | принятый. Заявка принята, но не выполнена |
203 | Несанкционированная информация. Запрос выполнен успешно. Но возвращенная метаинформация находится не на исходном сервере, а на копии |
204 | Без содержания. Сервер успешно обработал, но не вернул содержимого. Гарантирует, что браузер продолжает отображать текущий документ без обновления веб-страницы. |
205 | Сбросить содержимое. Серверный процесс выполнен успешно, и пользовательский терминал (например, браузер) должен сбросить представление документа. Поля формы браузера можно очистить с помощью этого кода возврата. |
206 | Часть. Сервер успешно обработал часть запроса GET |
300 | множественный выбор. Запрошенный ресурс может включать несколько местоположений, и, соответственно, список характеристик и адресов ресурса может быть возвращен для выбора пользовательского терминала (например, браузера). |
301 | Переехать навсегда. Запрошенный ресурс был окончательно перемещен на новый URI, возвращаемая информация будет включать новый URI, и браузер будет автоматически перенаправлен на новый URI. Любые новые запросы в будущем должны использовать вместо этого новый URI. |
302 | Временный переезд. Похоже на 301. Но ресурс перемещается только временно. Клиенты должны продолжать использовать исходный URI. |
303 | Посмотрите другие адреса. Похоже на 301. Просмотр с использованием запросов GET и POST |
304 | Без изменений. Запрошенный ресурс не был изменен, и ресурс не будет возвращен, когда сервер вернет этот код состояния. Клиенты обычно кэшируют посещенные ресурсы, предоставляя заголовок, указывающий, что клиент хочет вернуть только ресурсы, измененные после указанной даты. |
305 | Используйте прокси. Запрошенный ресурс должен быть доступен через прокси |
306 | Устаревшие коды состояния HTTP |
307 | Временная переадресация. Похоже на 302. Перенаправление с помощью GET-запроса |
400 | В клиентском запросе есть синтаксическая ошибка, которую сервер не может понять. |
401 | Запрос требует аутентификации пользователя |
402 | зарезервировано для использования в будущем |
403 | Сервер понимает запрос запрашивающего клиента, но отказывается выполнять запрос |
404 | Сервер не смог найти ресурс (веб-страницу) по запросу клиента. С помощью этого кода веб-дизайнеры могут настроить персонализированную страницу с надписью «запрошенный вами ресурс не найден». |
405 | метод в клиентском запросе запрещен |
406 | Сервер не может выполнить запрос на основе характеристик содержимого запроса клиента. |
407 | Запрос требует проверки подлинности прокси-сервера, аналогичной 401, но запрашивающая сторона должна использовать прокси-сервер для авторизации. |
408 | Сервер слишком долго ждет запроса, отправленного клиентом, и истекает время ожидания. |
409 | Сервер может вернуть этот код, когда он завершает запрос клиента PUT, и у сервера возникает конфликт при обработке запроса. |
410 | Ресурс, запрошенный клиентом, больше не существует. 410 отличается от 404. Если ресурс ранее был удален безвозвратно, можно использовать код 410, а дизайнер сайта может указать новое местоположение ресурса через код 301. |
411 | Сервер не может обработать информацию запроса, отправленную клиентом без Content-Length |
412 | Ошибка в предварительных требованиях к информации запроса клиента |
413 | Запрос был отклонен, так как запрошенный объект был слишком большим для обработки сервером. Чтобы предотвратить непрерывные запросы от клиентов, сервер может закрыть соединение. Если сервер не может временно его обработать, он будет содержать ответное сообщение Retry-After. |
414 | Запрошенный URI (обычно URL) слишком длинный для обработки сервером. |
415 | Сервер не может обработать формат мультимедиа, прикрепленный к запросу. |
416 | Недопустимая область действия, запрошенная клиентом |
417 | Сервер не может удовлетворить информацию заголовка запроса Expect |
500 | Внутренняя ошибка сервера, невозможно выполнить запрос |
501 | Сервер не поддерживает запрошенную функцию и не может выполнить запрос |
502 | Сервер, работающий в качестве шлюза или прокси, получил неверный ответ от удаленного сервера при попытке выполнить запрос |
503 | Из-за перегрузки или обслуживания системы сервер временно не может обработать запрос клиента. Продолжительность задержки может быть включена в заголовок сервера Retry-After. |
504 | Сервер, выступающий в роли шлюза или прокси, не получил вовремя запрос от удаленного сервера. |
505 | Сервер не поддерживает запрошенную версию протокола HTTP и не может завершить обработку |
Вышесказанное является моим личным мнением, приглашаю всех к обсуждению и совместному обучению!