nginx от входа к практике

Оригинальный текст можно найти в моем техническом блоге.Станция томатной технологии

Потребовалась неделя, чтобы понять знания, связанные с nginx, основное содержание:Базовые знания:Быстрое развертывание и установка Nginx, модули, базовый синтаксис конфигурации, вывод журнала Nginx, модуль конфигурации Nginx по умолчанию, Nginx в качестве http-прокси-сервиса, введение в тип прокси-сервиса, настройка прямого и обратного прокси-сервера, nginx в качестве службы балансировки нагрузки на прикладном уровне Различные приложения , стратегия балансировки хеш-нагрузки, кеш Nginx,Продвинутые знания:Часто используемые модули конфигурации Nginx, синтаксис конфигурации и правила перезаписи, настройка правил доступа на основе указанных регионов, принцип реализации модуля geoip и https, настройка службы https nginx, реализация анти-личной ссылки secure_link_module, объясните, объясните разработка синтаксиса Lua, сотрудничество с Nginx, внедрение эффективных систем аутентификации и другие сценарии.

Базовые знания

окрестности

начальная среда

запуск докера

docker run -d -p 8088:80 --name nginx_8088 nginx_80:latest /sbin/init

Четыре подтверждения

  • Подтвердить системную сеть (ping)
  • Убедитесь, что yum доступен (список yum | grep gcc
  • Обязательно закройте iptables (iptables -F)
  • Подтвердите отключение selinux

Две инсталляции

yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake
yum -y install wget httpd-tools vim

одна инициализация

cd /opt/ mkdir app download logs work backup

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

Определение источника nginx

cd /etc/yum.repos.d
vim nginx.repo 

添加:

name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

Установить

yum list | grep nginx
yum install nginx 

Посмотреть версию

nginx -v

Просмотр параметров, скомпилированных nginx

nginx -V

запуск nginx

nginx -c /etc/nginx/nginx.conf 

Перезапустите службу nginx.

systemctl restart nginx.service

мягкий перезапуск

nginx -s reload -c /etc/nginx/nginx.conf

Проверьте файл конфигурации

nginx -t -c /etc/nginx/nginx.conf

Архитектура промежуточного программного обеспечения

paste image

Краткое описание nginx

Nginx — это высокопроизводительное, надежное ПО промежуточного слоя и прокси-сервис с открытым исходным кодом. Nginx (произносится как двигатель x) — это веб-сервер, который также можно использовать в качестве обратного прокси-сервера, балансировщика нагрузки и кэша HTTP. Программное обеспечение было создано Игорем Сысоевым и впервые опубликовано в 2004 году. Одноименная компания была создана в 2011 году для оказания поддержки.

Почему выбирают nginx

io-мультиплексный epoll

Операции ввода-вывода нескольких дескрипторов могут выполняться одновременно и поочередно в потоке в последовательности, которая учит мультиплексированию ввода-вывода, где «мультиплексирование» относится к мультиплексированию одного и того же потока. Реализация мультиплексирования ввода/вывода: select, poll, epoll

paste image

что выбрать

paste image

модель epoll

  • Когда FD будет готов, поместите fd между функциями обратного вызова системы, что более эффективно.
  • Неограниченное максимальное количество подключений

легкий

  • мало функциональных модулей
  • модульность кода

привязка к процессору (привязка)

Это метод привязки между ядром ЦП и рабочим процессом nginx.Каждый рабочий процесс фиксируется на одном ЦП для выполнения, что уменьшает промах кеша при переключении ЦП и обеспечивает лучшую производительность.

paste image

Проще говоря, это должно уменьшить потери производительности при переключении процессоров.

sendfile

paste image

версия nginx

  • Основная версия Версия для разработки
  • Стабильная версия
  • Устаревшая версия Историческая версия

Использование основных параметров

rpm

Команда rpm — это инструмент управления пакетами RPM. Изначально rpm был программой, используемой дистрибутивом Red Hat Linux для управления различными пакетами Linux.Она очень популярна, поскольку следует правилам GPL, является мощной и удобной. Постепенно принимается другими дистрибутивами. Появление метода управления пакетами RPM упрощает установку и обновление Linux, что косвенно повышает применимость Linux.

инструкция по установке

Укажите каталог установки службы

rpm -ql nginx

Перечислите следующие каталоги

/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf
/etc/nginx/fastcgi_params
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/modules
/etc/nginx/nginx.conf
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
/etc/nginx/win-utf
/etc/sysconfig/nginx
/etc/sysconfig/nginx-debug
/usr/lib/systemd/system/nginx-debug.service
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx
/usr/lib64/nginx/modules
/usr/libexec/initscripts/legacy-actions/nginx
/usr/libexec/initscripts/legacy-actions/nginx/check-reload
/usr/libexec/initscripts/legacy-actions/nginx/upgrade
/usr/sbin/nginx
/usr/sbin/nginx-debug
/usr/share/doc/nginx-1.12.2
/usr/share/doc/nginx-1.12.2/COPYRIGHT
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx
/usr/share/nginx/html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/var/cache/nginx
/var/log/nginx 

Объяснение каталога

дорожка тип эффект
/etc/logrotate.d/nginx конфигурационный файл ротация логов nginx, вырезка логов для сервиса logrotate
/etc/nginx
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf
/etc/nginx/nginx.conf
каталог, файл конфигурации основной файл конфигурации nginx
/etc/nginx/fastcgi_params
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
конфигурационный файл конфигурация cgi, конфигурация fastcgi
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/win-utf
конфигурационный файл файл преобразования кодовой карты
/etc/nginx/mime.types конфигурационный файл Установите соответствие между Content-Type протокола http и расширением
/etc/sysconfig/nginx
/etc/sysconfig/nginx-debug
/usr/lib/systemd/system/nginx-debug.service
/usr/lib/systemd/system/nginx.service
конфигурационный файл Используется для настройки режима управления менеджером системных демонов.
/etc/nginx/modules
/usr/lib64/nginx/modules
содержание каталог модуля nginx
/usr/sbin/nginx
/usr/sbin/nginx-debug
Заказ Команда терминала для управления запуском службы nginx
/usr/share/doc/nginx-1.12.2
/usr/share/doc/nginx-1.12.2/COPYRIGHT
/usr/share/man/man8/nginx.8.gz
Каталог файлов Руководство и файлы справки для nginx
/var/cache/nginx содержание директория кеша nginx
/var/log/nginx содержание каталог журналов nginx

параметры компиляции

команда для отображения параметров компиляции

nginx -V

результат

nginx version: nginx/1.12.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'

** Параметр Пояснение **

дорожка тип
--prefix=/etc/nginx
--sbin-path=/usr/sbin/nginx
--modules-path=/usr/lib64/nginx/modules
--conf-path=/etc/nginx/nginx.conf
--error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log
--pid-path=/var/run/nginx.pid
--lock-path=/var/run/nginx.lock
Каталог назначения установки или путь
--http-client-body-temp-path=/var/cache/nginx/client_temp
--http-proxy-temp-path=/var/cache/nginx/proxy_temp
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp
--http-scgi-temp-path=/var/cache/nginx/scgi_temp
Временные файлы, сохраняемые nginx при выполнении соответствующего модуля
--user=nginx --group=nginx Установите пользователя и группу пользователей для запуска процесса nginx.
--with-cc-opt=parameters Установка дополнительных параметров будет добавлена ​​в переменную CFLAGS
--with-ld-opt=parameters Задайте дополнительные параметры, подключите системные библиотеки

Синтаксис базовой конфигурации nginx

http связанные

Показывать заголовки запросов для каждого запроса

curl -v http://www.baidu.com

результат

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* About to connect() to www.baidu.com port 80 (#0)
*   Trying 61.135.169.121...
* Connected to www.baidu.com (61.135.169.121) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: www.baidu.com
> Accept: */*
> 
< HTTP/1.1 200 OK
< Server: bfe/1.0.8.18
< Date: Thu, 30 Nov 2017 02:14:02 GMT
< Content-Type: text/html
< Content-Length: 2381
< Last-Modified: Mon, 23 Jan 2017 13:27:32 GMT
< Connection: Keep-Alive
< ETag: "588604c4-94d"
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Pragma: no-cache
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
< Accept-Ranges: bytes
< 
{ [data not shown]
100  2381  100  2381    0     0  88266      0 --:--:-- --:--:-- --:--:-- 91576
* Connection #0 to host www.baidu.com left intact

тип журнала nginx

  • ошибка.лог, доступ.лог
  • log_format

Формат*

syntax: log_format name [escape=default | json] string...;
default: log_format combined "...";
context:http

переменная nginx

Содержимое конфигурации nginx

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    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;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

тип переменной

  • Переменные HTTP-запроса: arg_PARAMETER, http_header, sent_http_header
  • Встроенные переменные: встроенный nginx
  • Пользовательские переменные: определите свои собственные

модуль nginx

  • официальный модуль nginx
  • сторонние модули

default.conf

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/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   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

модули с поддержкой nginx

 --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module

Установите модуль компиляции

параметры компиляции эффект
--with-http_stub_status_module состояние клиента nginx
--with-http_random_index_module Выберите случайную домашнюю страницу из каталога
--with-http_sub_module замена содержимого http
--limit_conn_module Ограничение частоты подключения
--limit_req_module Ограничение частоты запросов
http_access_module Контроль доступа на основе IP
http_auth_basic_module Доверительный вход на основе пользователя

конфигурация http_stub_status_module

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

syntax: stub_status;
default:-
context:server, location

В default.conf добавить:

# my config
location /mystatus {
	stub_status;
}

Проверьте и перезапустите конфигурацию

nginx -tc /etc/nginx/nginx.conf 

перезапустить службу

nginx -s reload -c /etc/nginx/nginx.conf 

Проверьте эффектВведите: http://127.0.0.1:8088/mystatus

paste image

Указывает количество активных подключений nginx; общее количество рукопожатий, количество обработанных подключений; количество операций чтения, записи и ожидания

http_random_index_module

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

syntax: random_index on | off;
default:random_index off;
context:location

Поместите следующую конфигурацию в default.conf:

location / {
root   /usr/share/nginx/html;
index  index.html index.htm;
}

Измените его на:

location / {
root   /usr/share/nginx/html;
random_index on;
#index  index.html index.htm;
}

После перезагрузки проведите несколько раз по веб-странице:

paste image

Дом кажется другим.

paste image

http_sub_module (заменить)

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

syntax: sub_filter string replacement;
default:-
context:http,server,location
syntax: sub_filter_last_modified on | off (重要用户缓存)
default:sub_filter_last_modified off;
context:http,server,location
syntax: sub_filter_once on | off 
default:sub_filter_once on;
context:http,server,location

заменять ли только один раз

ограничение на количество подключений

испытание давлением

ab -n 50 -c 20 http://127.0.0.1/index.html

-n указывает количество запросов -c указывает количество одновременных

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

ограничение на количество подключений

syntax: limit_conn_zone key zone=name:size;
default:-
context:http
syntax:limit_conn zone number;
default:-
context:http, server, location 

лимит запроса

syntax: limit_req_zone key zone=name:size rate=rate;
default:-
context:http
syntax: limit_req_zone name [burst=number] [nodelay];
default:-
context:http,server,location

Поместите следующую конфигурацию в default.conf:

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    # my config
    location /mystatus {
        stub_status;
    }
    #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   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

Измените его на:

limit_conn_zone $binary_remote_addr zone=conn_zone:1m;
limit_req_zone $binary_remote_addr zone=req_zone:1m rate=1r/s;
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        #limit_conn conn_zone 1;
        limit_req zone=req_zone;
        # limit_req zone=req_zone burst nodelay;
        # limit_req zone=req_zone burst nodelay;
        index  index.html index.htm;
    }

    # my config
    location /mystatus {
        stub_status;
    }
    #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   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}


Результаты испытаний под давлением

До ограничения

paste image

после ограничения

paste image

http_access_module

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

syntax: allow address | CIDR | unix: | all
default:-
context:http,server,location,limit_except
syntax:deny address | CIDR | unix: | all
default:-
context:http, server, location ,limit_except

контрольная работаКонфигурация выглядит следующим образом

location ~ ^/admin.html {
  root /opt/app/code;
  deny all;
  index index.html index.htm;
}

результат

paste image

ограничение

paste image

http_x_forwarded_for

paste image

http_x_forwarded_for = client ip, proxy(1)ip,proxy(2)ip,...

Решение

  • Используйте другую информацию заголовка http для управления доступом, например http_x_forward_for
  • В сочетании с работой геомодуля
  • Пройти через пользовательскую переменную http

http_auth_basic_module

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

syntax: auth_basic string | off;
default:-
context:http,server,location,limit_except
syntax:auth_basic_user_file file;
default:-
context:http, server, location ,limit_except

Создать файл паролей

htpasswd -c ./auth_conf wujunqi

Измените файл конфигурации

location ~ ^/admin.html {
  root /opt/app/code;
  auth_basic "please input you user name and passwd";
  auth_basic_user_file /etc/nginx/auth_conf;
  index index.html index.htm;
}

контрольная работа

paste image

ограничение
  • Информация о пользователе зависит от метода файла
  • Механизмы эксплуатации и управления, неэффективность
решение
  • nginx объединяет LUA для эффективной проверки
  • Nginx и LDAP подключаются с помощью модуля nginx-auth-ldap

практика сцены

Веб-служба статических ресурсов

статические ресурсы

определение

Несерверные динамически генерируемые файлы

paste image

paste image

Сценарий службы статических ресурсов — CDN

paste image

конфигурация чтения файла

sendfile

syntax: sendfile on | off;
default:sendfile off
context:http,server,location,if in location

Примечание

--with-file-aio асинхронное чтение файлов

tcp_nopush

Функция: при включении sendfile повысить эффективность передачи сетевых пакетов (ожидание, одна передача)

syntax:tcp_nopush on | off
default:tcp_nopush off
context:http, server, location 

Противоположно

syntax:tcp_nodelay on | off
default:tcp_nodelay on
context:http, server, location 

эффектПри постоянном соединении улучшите производительность передачи сетевых пакетов в реальном времени.

компрессия

эффект

Сжатая передача

syntax:gzip on | off
default:gzip off
context:http, server, if in location 
syntax:gzip_comp_level level;
default:gzip_comp_level 1;
context:http, server, location 

Расширенный модуль сжатия nginx

  • http_gzip_static_module: функция упреждающего чтения gzip
  • http_gunzip_module: Приложение поддерживает сжатие gunzip.

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

paste image

кеш браузера

Механизм кэширования, определенный протоколом http (например, истечение срока действия, управление кэшем и т. д.)

  • Браузер без кеша

paste image

  • В браузере есть кеш

paste image

Обнаружение механизма истечения

эффект заголовок запроса
Проверить срок действия expires, cache-control (max-age)
Проверка информации заголовка Etag в протоколе etag
проверка последнего измененного заголовка last-modified

** Процесс сервера запросов браузера (кешированная версия)**

paste image

Связанная конфигурация

expires

Добавить контроль кеша, заголовок expires

syntax: expires [modified] time;
		expires epoch | max | off;
default: expires off;
context:http, server, location 

Пример конфигурации

paste image

междоменный доступ

paste image

Почему браузеры блокируют междоменный доступ

Небезопасно и подвержено атакам CSRF

paste image

конфигурация nginx

syntax: add_header name value [always]
default: -
context:http, server, location, if in location 

Добавить заголовок запроса: Access-Control-Allow-Origin

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

paste image

противоугонная цепь

Цель

Предотвращение кражи ресурсов

** Идеи настройки защиты от пиявок **

Первый способ: различать, какие запросы являются ненормальными запросами пользователей

На основе модуля настройки защиты от пиявок http_refer

syntax: valid_referers none | blocked | server_names | string...;
default: -
context:server, location

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

paste image

none: означает, что нет ссылки заблокирован: означает, что он не написан стандартным http

команда

curl -e "http://www.baidu.com" -I http://116.62.103.228/wei.png

-e: означает ссылку -i: указывает, что отображаются только заголовки запросов.

Прокси-сервис

Агентские операции от вашего имени (агентское финансовое управление, агентская расписка и т. д.)

paste image

Прокси-сервис

paste image

прокси разница

Отличие в том, что объекты прокси разные

  • Объектом прямого прокси является клиент
  • Обратный прокси-сервер — это сервер

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

paste image

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

paste image

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

syntax: proxy_pass URL;
default: -
context:location, if in location, limit_except

URL-адрес обычно:

  • http://localhost:8000/uri/
  • https://192.168.1.1:8000/uri/
  • http://unix:/tmp/backend.socket:/uri/;

Скриншот конфигурации обратного прокси

paste image

Если вы хотите получить доступ к 8080, вы можете получить доступ только к 80. Вы можете получить доступ к 8080 через 80, а затем через обратный прокси-сервер.

Скриншот конфигурации прямого прокси

paste image

Конфигурация 116.62.103.228 выглядит следующим образом (на самом деле она не сильно связана с конфигурацией обратного прокси)

paste image

Конфигурация клиента

paste image

Конфигурация буфера

syntax: proxy_buffering on | off
default: proxy_buffering on
context:location,http,server

расширять

  • proxy_buffer_size
  • proxy_buffers
  • proxy_busy_buffers size

Конфигурация перенаправления перехода

syntax: proxy_redirect default;proxy_redirect off;proxy_redirect redirect replacement;
default: proxy_redirect default;
context:location,http,server

конфигурация заголовка

syntax: proxy_set_header field value;
default: proxy_set_header host $proxy_host
		 proxy_set_header connection close;
context:location,http,server

Конфигурация тайм-аута

syntax: proxy_connect_timeout time;
default: proxy_connect_timeout 60s;
context:location,http,server

расширять

  • proxy_read_timeout
  • proxy_send_timeout

общая конфигурация

paste image

Планировщик балансировки нагрузки SLB

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

paste image

GSLB

GSLB — это аббревиатура от Global Server Load Balance на английском языке, что означает глобальную балансировку нагрузки. Функция: реализовать распределение трафика между серверами в разных регионах глобальной сети (включая Интернет) и обеспечить использование лучшего сервера для обслуживания ближайших к себе клиентов, тем самым обеспечив качество доступа.

paste image

SLB

Server Load Balancer (SLB) – это служба балансировки сетевой нагрузки, разработанная для эластичной вычислительной платформы Alibaba Cloud. Облачная платформа эластичной вычислительной платформы полностью учитывается при проектировании системной архитектуры, безопасности, производительности, расширения и совместимости. Характеристики использования сервера и особенности бизнеса сценарии.

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

paste image

Транспортный уровень (пересылка пакетов) в модели iso

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

paste image

Реализовано на прикладном уровне

Балансировка нагрузки реализована nginx (уровень 7)

paste image

настроить

syntax: upstream name{...}
default: -
context:http

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

paste image

восходящий пример

upstream backend {
	server backend1.example.com weight=5;
    server backend2.example.com:8080;
    server unix:/tmp/backend3;
    
    server backup1.exmple.com:8080 backup;
    server backup2.example.com:8080 backup;
}

Статус внутреннего сервера при планировании балансировки нагрузки

поле эффект
down Текущий сервер временно не участвует в балансировке нагрузки
backup Зарезервированный резервный сервер
max_fails Количество раз, когда запрос может быть неудачным
fail_timeout Время, в течение которого служба приостанавливается после сбоев max_fails.
max_conns Ограничьте максимальное количество полученных подключений

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

paste image

Алгоритм планирования

поле эффект
голосование Распространяется на разные внутренние серверы один за другим в хронологическом порядке.
взвешенная круговая система Чем больше значение веса, тем выше присваиваемая вероятность доступа.
ip_hash Каждый запрос распределяется в соответствии с результатом хеширования IP-адреса доступа, поэтому фиксированный доступ с одного и того же IP-адреса к внутреннему серверу
least_conn Минимальное количество ссылок, будет раздаваться машина с меньшим количеством подключений
url_hash Запрос распределяется в соответствии с результатом хеширования URL-адреса, к которому осуществляется доступ, и каждый URL-адрес направляется на один и тот же внутренний сервер.
значение ключа хеширования пользовательский ключ хэша

iphash

paste image

URL - хэш

paste image

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

url_hash

syntax: hash key [consistent];
default:-
context:upstream
this directive appeared in version 1.7.2

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

paste image

динамический кеш

тип кэша

paste image

кеш прокси

paste image

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

Syntax: proxy_cache_path path [levels=levels]
Default:-
context:http

выключатель

syntax: proxy_cache zone | off;
default:proxy_cache off;
context:http, sercer, location

Срок годности

syntax: proxy_cache_valid[code] time;
default:-
context:http, sercer, location

Кэшированные размеры

syntax: proxy_cache_key string;
default: proxy_cache_key $scheme$proxy_host$request_uri;
context:http,server,location

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

paste image

уровень: уровень каталога inactive: очистить, когда неактивен

Как очистить указанный кеш

  • Содержимое каталога кеша rm-rf
  • Сторонний модуль расширения ngx_cache_purge

Как сделать так, чтобы некоторые страницы не кешировались

syntax : proxy_no_cache string ...;
default: -;
context:http,server,location

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

paste image

Запрос фрагментации большого файла

syntax : slice size
default: slice o
context:http,server,location

http_slice_module

paste image

Преимущество

  • Данные, полученные каждым подзапросом, будут формироваться в отдельный файл, при нарушении одного запроса другие запросы не пострадают.

недостаток

  • Когда файл большой или срез маленький, это может привести к исчерпанию файлового дескриптора и т.д.

глубокое обучение

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

Разделение динамических и статических запросов с помощью промежуточного ПО

Почему

  • Разделите ресурсы, уменьшите потребление ненужных запросов и уменьшите задержку запросов

paste image

Сцены

paste image

переписать правила

Сценарии применения

  • Переход к URL-адресу, поддержка разработки и дизайна
    • Переход на страницу, поддержка совместимости, эффект отображения и т. д.
  • сео-оптимизация
  • поддерживать
    • Фоновое обслуживание, переадресация трафика
  • Безопасность

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

syntax: rewrite regex replacement [flag];
default:-
context:server, location,if

Экземпляр страницы обслуживания

rewrite ^(.*)$ /pages/maintain.html break;

flag

поле эффект
last Остановить обнаружение перезаписи
break Остановить обнаружение перезаписи
redirect Вернитесь к временной переадресации 302, в адресной строке отобразится адрес перенаправления.
permanent Вернитесь к постоянному перенаправлению 301, в адресной строке будет отображаться адрес перенаправления (браузер будет напрямую обращаться к перенаправленному адресу в следующий раз).

paste image

paste image

Некоторые примеры

paste image

переписать приоритет правила

  • Выполнить инструкцию перезаписи блока сервера
  • выполнить сопоставление местоположения
  • Выполнить перезапись в указанном месте

расширенный модуль nginx

модуль secure_link_module

  • Сформулировать и разрешить проверку подлинности запрашиваемых ссылок и защиту ресурсов от несанкционированного доступа.
  • Ограничить срок действия ссылки
syntax: secure_link expression
default:-
context:server, location,server
syntax: secure_link_md5 expression
default:-
context:server, location,http

значок

paste image

paste image

Пример конфигурации

paste image

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

Сопоставьте двоичный файл MaxMind GeoIp на основе IP-адреса и прочитайте информацию о регионе IP-адреса.

yum install nginx-module-geoip
  • Различие между внутренними и иностранными правилами доступа к http
  • Сделать правила доступа http отличными от внутренних городских районов

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

paste image

https-сервис

Шифровать и аутентифицировать содержимое передачи.

Зачем нужен https

  • Данные передачи украдены посредником, и информация просочилась
  • Перехват содержимого данных, фальсификация

Симметричное и асимметричное шифрование

paste image

paste image

Принцип протокола шифрования HTTPS

paste image

Подделка клиента и сервера «человек посередине»

paste image

Как решить

paste image

Создание ключей и сертификатов ЦС

Установите модули openssl и http_ssl_module.

#openssl version
openSSL 1.0.1e-fips 11 feb 2013

#nginx -V
--with-http_ssl_module

шаг

  • сгенерировать ключ
openssl genrsa -idea -out jesonc.key 1024

результат

paste image

  • Создать файл запроса подписи сертификата (файл csr)
openssl req -new -key jesonc.key -out jesonc.csr

результат

paste image

  • Создать файл подписи сертификата (файл CA)
openssl x509 -req -days 3650 -in jesonc.csr -signkey jesonc.key -out jesonc.crt

результат

paste image

Связанные эксперименты

настроить докер(443)

docker run -d -p 443:443 --name nginx_443 nginx_443:latest /sbin/init
nginx -c /etc/nginx/nginx.conf

конфигурация файла conf

server {
    listen       443;
    server_name  localhost;
    ssl on;
    ssl_certificate /etc/nginx/ssl_key/jesonc.crt;
    ssl_certificate_key /etc/nginx/ssl_key/jesonc.key;

    location / {
        root   /usr/share/nginx/html;
        #limit_conn conn_zone 1;
        #limit_req zone=req_zone;
        # limit_req zone=req_zone burst nodelay;
        # limit_req zone=req_zone burst nodelay;
        index  index.html index.htm;
    }

    # my config
    location /mystatus {
        stub_status;
    }
    #error_page  404              /404.html;

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

Результаты теста

paste image

paste image

Оптимизация HTTPS-сервиса

  • Активировать продолжительное соединение keepalive
  • установить кеш сеанса ssl

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

paste image

Архитектура Nginx

помириться позже

Исходный текст можно найти на странице: http://fanqieto.top/2017/11/29/nginx%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E5% АЕ%9Е%Е8%В7%В5/


------------------------- Великолепная разделительная линия --------------------

Друзья, которые прочитали это, могут нажать «Нравится» / «Подписаться», ваша поддержка — самая большая поддержка для меня.

Также добро пожаловать в мой личный блогСтек томатной технологииа такжеДомашняя страница Наггетс

Если вы хотите узнать больше, обратите внимание на мой публичный аккаунт WeChat:Стек томатной технологии, все статьи будут синхронизированы с публичной учетной записью WeChat в первый раз!

番茄技术小栈