Обмен технологиями

Семиуровневый обратный прокси Nginx (уровень приложений): SCGI-прокси scgi_pass

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Семиуровневый обратный прокси-сервер Nginx (уровень приложений)
SCGI-агент scgi_pass

- Информация о статье -
Автор: Ли Цзюньцай (jcLee95)
Посетите меня на CSDN: https://jclee95.blog.csdn.net
Мой веб-сайтhttp://thispage.tech/
Электронная почта: [email protected].
Шэньчжэнь, Китай
Адрес этой статьи:https://blog.csdn.net/qq_28550263/article/details/140253307
ХуаВэй:https://bbs.huaweicloud.com/blogs/XXXXXXXXXX

[Введение]: Nginx обеспечивает поддержку различных обратных прокси-серверов прикладного уровня, включая proxy_pass, uwsgi_pass, fastcgi_pass и scgi_pass и т. д. Среди них директива proxy_pass может принимать параметр URL для реализации обратного прокси-сервера для протокола HTTP/HTTPS; uwsgi_pass используется для прокси-сервера приложений uWSGI; fastcgi_pass используется для прокси-сервера FastCGI, а scgi_pass используется для прокси-сервера; к приложению SCGI (простой общий интерфейс шлюза). Эти директивы позволяют Nginx гибко обрабатывать различные типы серверных сервисов и приложений. В центре внимания этой статьи scgi_pass.


Статьи по Теме:
Семиуровневый обратный прокси-сервер Nginx: обратный прокси-сервер HTTP proxy_pass

Семиуровневый обратный прокси Nginx: прокси UWSGI uwsgi_pass
Семиуровневый обратный прокси-сервер Nginx: SCGI-прокси scgi_pass
Семиуровневый обратный прокси Nginx: прокси FastCGI fastcgi_pass

Вставьте сюда описание изображения


1 Обзор

1.1 Что такое СКГИ

SCGI(Простой интерфейс общего шлюза)Nginx Поддерживается один из важных методов обратного прокси. в,SCGIэто упрощенная версияCGI(Common Gateway Interface), разработанный для обеспечения более эффективного способа подключения.Веб Серверы и приложения.с традиционнымCGIпо сравнению с,SCGIБлагодаря использованию постоянных соединений и упрощенному формату протокола накладные расходы на каждый запрос значительно сокращаются.

SCGIПротокол определяет стандартизированный способВеб Передавайте информацию запроса и получайте ответы между сервером и приложением. Он использует простой текстовый формат для передачи информации заголовка запроса, за которым следует тело запроса (если есть).Эта конструкция делаетSCGIОн прост в реализации и обеспечивает хорошую производительность.

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

существоватьВебВ архитектуре приложенияSCGIДействовал какВебсервер (например,Nginx ) и серверные приложения.когдаNginxполучено от клиентаHTTPПо запросу он может преобразовать эти запросы вSCGIотформатировать, а затем передатьSCGIПротокол отправляется на внутренний сервер приложений.

Этот подход особенно подходит для тех, кто изначально поддерживаетSCGIЯзыки программирования протоколов и фреймворки, такие какПитоннекоторые изВебкадры (например,Флуп)илиРубинНекоторые серверы приложений (например,Единорог ).используяSCGI, эти приложения могут избежатьHTTPНакладные расходы на синтаксический анализ, непосредственная обработка изВебзапросы к серверу, тем самым улучшая общую производительность.

В практических приложенияхSCGIСценарии использования включают, помимо прочего:

  1. высокая производительностьВебПриложение. Для приложений, которым необходимо обрабатывать большое количество одновременных запросов,SCGIМожет обеспечить лучшее, чем традиционноеCGIЛучшая производительность.

  2. Длительные процессы: некоторые приложения, которым необходимо поддерживать состояние или которые работают в течение длительного времени, могутSCGIиВебСервер поддерживает постоянное соединение.

  3. Оптимизация для конкретного языка: некоторые языки программирования или платформы могут использоватьSCGIпоказать лучшую производительность или более простую реализацию.

вNginxиспользуется вscgi_passкоманда, администраторы могут легко разместитьHTTPПереслать запрос в поддержкуSCGI внутренний сервер приложений.Это не только упрощает процесс настройки, но и предоставляет возможности для оптимизации.ВебПроизводительность приложений обеспечивает гибкость.

2. Введение в протокол SCGI.

2.1 Характеристики протокола SCGI

SCGI(Простой общий интерфейс шлюза) — это упрощенный протокол.CGIпротокол, специально разработанный дляВеб Связь между сервером и приложением. Он имеет следующие существенные особенности:

Простота:SCGI Протокол использует простой текстовый формат для передачи информации заголовка запроса, что делает реализацию и отладку протокола относительно простой. Философия разработки протокола заключается в том, чтобы сохранить его простоту, но при этом обеспечить достаточную функциональность.

Постоянные связи: в сравнении с традиционнымиCGIдругой,SCGI Поддерживает постоянные соединения.это означаетSCGI Сервер может обрабатывать несколько запросов без создания нового процесса или потока для каждого запроса. Это значительно снижает нагрузку на системные ресурсы и повышает общую производительность.

Низкие накладные расходы: благодаряSCGI Конструкция протокола проста и не создает дополнительных затрат при обработке запроса.Это делаетSCGIОсобенно подходит для обработки высокого параллелизма.ВебСценарии применения.

гибкость:SCGI Протокол позволяет передавать произвольную информацию заголовка, что предоставляет разработчикам большую гибкость. Разработчики могут настраивать информацию заголовка по мере необходимости в соответствии с требованиями конкретных приложений.

Языковая независимость:SCGI Конструкция протокола не зависит от языка программирования.Это означает, что его можно реализовать на любом языке программирования, что позволяет разработчикам выбирать язык, который лучше всего соответствует потребностям их проекта.SCGIсервер.

2.2 SCGI против протокола HTTP

ХотяSCGIиHTTPиспользуются дляВебПротоколы связи, но они имеют существенные различия в целях проектирования и сценариях использования:

Целевые пользователи:HTTPПротокол в основном используется клиентами (например, браузерами) иВебсвязь между серверами, при этомSCGIСоглашение ориентировано наВебСвязь между сервером и серверными приложениями.

Сложность протокола:HTTPПротокол относительно сложен и содержит большое количество информации заголовка и методов для поддержки различныхВеб интерактивная сцена. В отличие,SCGIПротокол проще и содержит только необходимую информацию для доставки запросов и ответов.

Соображения производительности: вВебИспользуется между сервером и приложениемSCGIвместоHTTPНакладные расходы на анализ протокола могут быть уменьшены, посколькуSCGI Формат более простой и прямой. Это может привести к значительному повышению производительности в сценариях с высоким уровнем параллелизма.

Управление подключением:HTTP/1.1Была введена концепция постоянных соединений, но вВебИспользуется между сервером и приложениемHTTPМожет потребоваться дополнительное управление соединениями.SCGIВстроенная поддержка постоянных соединений упрощает этот процесс.

сцены, которые будут использоваться:HTTPЭто основной протокол Интернета, применимый к различнымВебсценарий общения.SCGIв основном используется дляВебВнутренняя связь между серверами и серверными приложениями, особенно в сценариях, где требуется высокопроизводительная обработка.

2.3 SCGI против FastCGI

SCGIиFastCGIВсеCGIУлучшенная версияВеб Производительность приложения. У них есть некоторые сходства, но есть и некоторые ключевые различия:

Сложность протокола:SCGIкоэффициент согласияFastCGIпроще.SCGIИспользует простой текстовый формат для передачи информации заголовка, в то время какFastCGI Используйте двоичный формат.Это делаетSCGIЛегче реализовать и отладить, но может немного уступатьFastCGIпроизводительность.

  1. Мультиплексирование:FastCGIПоддерживает обработку нескольких запросов по одному соединению (мультиплексирование), при этомSCGI Обычно за одно соединение обрабатывается только один запрос. Это означает, что в некоторых сценариях с высоким уровнем параллелизмаFastCGIВозможно, выступит лучше.

  2. Тип записи:FastCGIОпределено несколько типов записей (например,СТДИНСТАНДАРТНЫЙ ВЫВОДСТДЕРРи т. д.), что обеспечивает более детальный контроль.SCGIПрименяется более простой подход, ориентированный главным образом на передачу запросов и ответов.

  3. Языковая поддержка: благодаряFastCGI Чем дольше он существует, тем более широкой будет его поддержка в различных языках программирования и средах. Однако,SCGIЕго простота делает его реализацию на некоторых языках потенциально более простой.

  4. Производительность: В большинстве случаевSCGIиFastCGI Разница в производительности не существенна. Выбор используемого протокола часто зависит от конкретных потребностей приложения, поддержки языка разработки и личных предпочтений.

3. директива scgi_pass в Nginx

3.1 Основной синтаксис инструкции scgi_pass

существоватьNginxНастройка,scgi_passДиректива используется для передачи запросаSCGI Ключевые директивы для сервера.это определяетNginxкуда следует направить запросSCGIСервер или группа серверов.

scgi_passОсновной синтаксис команды следующий:

scgi_pass address;
  • 1

в,addressОно может быть в следующих формах:

  1. доменное имя илиИСАдрес плюс номер порта:

Например:scgi_pass localhost:9000;

в этом случае,NginxЗапрос будет перенаправлен на сервер, работающий на локальном хосте и прослушивающий порт 9000.SCGIсервер.

  1. UnixПуть сокета домена:

Например:scgi_pass unix:/tmp/scgi.socket;

здесь,Nginxпройдет указанноеUnixсокет домена сSCGI Связь с сервером.Этот метод обычно используетсяSCGIсервер сNginxРабота на той же машине может обеспечить более высокую производительность.

  1. Имя группы вышестоящих серверов:

Например:scgi_pass scgi_backend;

В этом использованииscgi_backendодин вNginx Предопределенная группа вышестоящих серверов в файле конфигурации. Это позволяет реализовать расширенные функции, такие как балансировка нагрузки и аварийное переключение.

scgi_passИнструкции обычно находятся вlocationиспользуется в блоках для обработки конкретныхURL путь. Например:

location /scgi/ {
    scgi_pass localhost:9000;
    include scgi_params;
}
  • 1
  • 2
  • 3
  • 4

В этом примере все/scgi/Запросы в начале будут перенаправлены на локальный порт 9000.SCGIсервер.

include scgi_params;Оператор содержит предопределенный файл конфигурации, который устанавливает рядSCGI параметр.Эти параметры определяютNginxкакHTTPИнформация запроса преобразуется вSCGIпросить.

Стоит отметить, чтоscgi_passДирективы можно комбинировать с другимиNginx Директивы используются в сочетании для достижения более сложных конфигураций.Например, вы можете использоватьifУсловные операторы для выбора разных вариантов на основе разных условийSCGIсервер:

location / {
    if ($request_method = POST) {
        scgi_pass localhost:9001;
    }
    scgi_pass localhost:9000;
    include scgi_params;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

В этом примереПОЧТАЗапросы перенаправляются на порт 9001, а все остальные запросы перенаправляются на порт 9000.

3.2 scgi_pass против proxy_pass

scgi_passиproxy_passВсе они являются широко используемыми инструкциями обратного прокси-сервера и перенаправляют запросы на внутренний сервер.

в,scgi_passПредназначен для использования при поддержкеSCGIПротокол для связи с внутренним сервером.SCGIэто упрощенный вариантCGIпротокол, предназначенный дляВеб Эффективная связь между серверами и приложениями. В отличие,proxy_pass— это более общая директива, которую можно использовать для проксирования различных протоколов, включаяHTTPHTTPSFastCGIждать.

В использованииscgi_passчас,NginxполучитHTTPЗапрос преобразуется вSCGIформатировать, а затем отправлять на серверную частьSCGI сервер. Во время этого процессаNginx Выполнит преобразование протокола, чтобы внутренний сервер мог правильно понять и обработать запрос.иproxy_passОбычно он используется для пересылки запроса на внутренний сервер без преобразования протокола.

Еще одно важное отличие заключается в том, как оно настроено.scgi_passОбычно требует сотрудничестваscgi_paramдиректива, используемая для установкиSCGI Параметры, необходимые протоколу. Например:

location /app/ {
    scgi_pass localhost:9000;
    include scgi_params;
    scgi_param SCRIPT_FILENAME /path/to/app$fastcgi_script_name;
}
  • 1
  • 2
  • 3
  • 4
  • 5

В этом примереinclude scgi_paramsвведены предопределенныеSCGIпараметры, в то время какscgi_paramДирективы используются для установки дополнительных параметров.

В отличие,proxy_passКонфигурация обычно проще и понятнее:

location /api/ {
    proxy_pass http://backend_server;
}
  • 1
  • 2
  • 3

С точки зрения производительности,scgi_passиproxy_pass У каждого есть свои преимущества.Для использования специально разработанSCGIприложение протокола,scgi_passможет обеспечить лучшую производительность, поскольку позволяет избежатьHTTP служебные данные протокола. Однако,proxy_passЕго универсальность делает его более гибким и позволяет адаптироваться к различным серверным серверам и протоколам.

Безопасность также является аспектом, который следует учитывать.потому чтоscgi_passпосвященныйSCGI протокол, который в некоторых случаях может обеспечить лучшую безопасность, поскольку ограничивает взаимодействие с внутренним сервером.иproxy_passБлагодаря своей универсальности для обеспечения безопасности может потребоваться дополнительная настройка, особенно при работе с конфиденциальными данными.

В практических приложениях выбирайте использованиеscgi_passвсе ещеproxy_pass В основном зависит от характеристик и требований серверного приложения.Если серверное приложение специально разработано для использованияSCGIсоглашение, тогдаscgi_pass Возможно, это лучший выбор.Если бэкэнд стандартныйВебСервер или приложение, не поддерживается или не требуетсяSCGI,Такproxy_passможет быть более уместным.

3.3 Как работает scgi_pass

scgi_passИнструкцияNginxиспользуется при обработкеSCGI Запрошены основные инструкции (простой общий интерфейс шлюза). Принцип его работы включает в себя несколько этапов: от получения клиентского запроса до возврата обработанного ответа клиенту.

Прежде всего, когдаNginxПолучено от клиентаHTTP Когда запрос сделан, он решает, как его обрабатывать, на основе правил в файле конфигурации.Если запрос соответствует, используйтеscgi_passблок местоположения инструкции,NginxначнетSCGIпоток обработки.

существоватьSCGIВ процессе обработки,NginxСначала мы создадимSCGI Подключение к серверу.Это соединение может бытьТКПрозетка илиUnixДоменный сокет, в зависимости отscgi_pass Адрес указан в инструкции. Если используется группа вышестоящих серверов,NginxКонкретный сервер также выбирается на основе настроенного алгоритма балансировки нагрузки.

После того, как соединение будет установлено,NginxволяHTTPЗапрос преобразуется вSCGI Формат.Этот процесс включает в себя созданиеSCGIЗаголовок и тело запроса.SCGIЗаголовок запроса содержит ряд пар ключ-значение, которые предоставляют метаданные о запросе, такие как метод запроса, путь, строка запроса, клиент.ИС Адрес и т. д.Большая часть этой информации взята из оригинала.HTTPзаголовки запроса, но могут также включатьscgi_paramДополнительные параметры, задаваемые командой.

SCGI Формат заголовка запроса специфичен: он начинается с числа, указывающего длину всего заголовка, за которым следует двоеточие, затем серия пар ключ-значение, завершающаяся нулевым символом и, наконец, заканчивающаяся запятой.Например, упрощенныйSCGIЗаголовок запроса может выглядеть так:

70:CONTENT_LENGTH27SCGI1REQUEST_METHODGETquery_string,
  • 1

В этом примере «70» представляет общую длину заголовка, за которым следуют три пары ключ-значение:CONTENT_LENGTHSCGIиREQUEST_METHOD

После отправки заголовка запросаNginx Отправляется тело запроса (если есть).дляПОЛУЧАТЬЗапросы обычно не имеют тела запроса, но дляПОЧТАилиПОМЕЩАТЬЗапрос, тело запроса может содержать данные формы или другие типы контента.

SCGI После того как сервер получает запрос, он обрабатывает его и генерирует ответ.Ответ отправляется обратно по тому же соединению.NginxSCGIФормат ответа относительно прост. Он включает заголовки и тело ответа, разделенные пустой строкой.

NginxполученныйSCGIПосле ответа сервера он преобразуется обратно вHTTP Формат ответа.Этот процесс включает в себя анализSCGIЗаголовки ответов, заданные соответствующим образомHTTPзаголовки ответа, а затем передать тело ответа клиенту без изменений.

во всем процессе,Nginx Также отвечает за управление жизненным циклом соединения.Сюда входит обработка таймаутов соединения, управление пулом соединений (если включено).keepalive ), обрабатывать сетевые ошибки и т. д. Если во время обработки произошла ошибка,NginxСоответствующий ответ об ошибке будет возвращен клиенту в соответствии с конфигурацией.

кроме того,scgi_pass Рабочий процесс неблокирующий.это означаетNginxМожет обрабатывать несколькоSCGI запросы без создания нового процесса или потока для каждого запроса.Эта конструкция делаетNginxСпособность эффективно обрабатывать большое количество одновременных подключений.

4. Настройте Nginx для использования scgi_pass.

4.1 Пример базовой конфигурации

существоватьNginxСредняя конфигурацияscgi_pass Основной пример относительно прост.Эта конфигурация позволитNginxПересылать запросы по определенному пути кSCGI сервер. Вот базовый пример конфигурации:

Сначала откройтеNginxОсновной файл конфигурации, обычно расположенный по адресу/etc/nginx/nginx.confили/usr/local/nginx/conf/nginx.conf .В этом файле нам нужноhttpДобавить или изменить внутри блокаserverкусок.

существоватьserverблок, мы добавимlocationдиректива, определяющая, какие запросы следует перенаправлятьSCGI сервер.Например, если мы хотим добавить все/scgi/Запрос вначале перенаправляется на сервер, работающий на локальном порту 9000.SCGIСервер, вы можете использовать следующую конфигурацию:

http {
    server {
        listen 80;
        server_name example.com;

        location /scgi/ {
            scgi_pass localhost:9000;
            include scgi_params;
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

В этой конфигурацииlisten 80инструкции говорятNginxСлушайте порт 80 (стандартный).HTTPпорт).server_nameДиректива определяет имя домена, на которое должен отвечать этот серверный блок.

location /scgi/блок определяет все/scgi/началоURL Все запросы должны быть обработаны.Внутри этого блока мы используемscgi_passкоманда для указанияSCGI Адрес и порт сервера. В этом примереSCGIСервер работает на той же машине (localhost) порта 9000.

include scgi_params;Оператор содержит предопределенный файл конфигурации, который устанавливает рядSCGI параметр.Эти параметры определяютNginxкакHTTPИнформация запроса преобразуется вSCGI просить.Обычно этот файл находится/etc/nginx/scgi_paramsили/usr/local/nginx/conf/scgi_params

Если вашSCGIСерверу требуются дополнительные параметры, которые можно использоватьscgi_param команда для установки.Например, если вам нужно установитьSCRIPT_FILENAMEПараметры можно настроить следующим образом:

location /scgi/ {
    scgi_pass localhost:9000;
    include scgi_params;
    scgi_param SCRIPT_FILENAME /path/to/your/scripts$fastcgi_script_name;
}
  • 1
  • 2
  • 3
  • 4
  • 5

здесь,SCRIPT_FILENAMEВ качестве параметра установлен фактический путь к скрипту.$fastcgi_script_nameЭтоNginxПеременная, представляющая имя запрошенного сценария.

Если вашSCGIИспользование сервераUnixдоменный сокет вместо этогоТКППорт можно настроить следующим образом:

location /scgi/ {
    scgi_pass unix:/tmp/scgi.socket;
    include scgi_params;
}
  • 1
  • 2
  • 3
  • 4

В этом примереNginxбудет расположен через/tmp/scgi.socketизUnixсокет домена сSCGIСвязь с сервером.

После завершения настройки необходимо перезагрузить или перезапуститьNginx чтобы изменения вступили в силу. Можно использовать следующие команды:

sudo nginx -s reload
  • 1

или

sudo systemctl restart nginx
  • 1

Эта базовая конфигурация предназначена для использованияscgi_pass Обеспечивает хорошую отправную точку. В зависимости от ваших конкретных потребностей могут потребоваться дополнительные настройки и оптимизации. Например, вам может потребоваться настроить буферизацию, тайм-ауты или группы вышестоящих серверов для балансировки нагрузки. Эти параметры конфигурации подробно обсуждаются в последующих главах.

4.2 Использование восходящего модуля

существоватьNginx восходящий модуль позволяет нам определить набор серверов, которые можно использовать для балансировки нагрузки и аварийного переключения.когда сscgi_passВосходящий модуль может быть значительно улучшен при использовании в сочетании с директивами.SCGIГибкость и надежность агента.

Основной синтаксис восходящего модуля следующий:

upstream backend_name {
    server address1;
    server address2;
    # 更多服务器...
}
  • 1
  • 2
  • 3
  • 4
  • 5

В этой конфигурацииbackend_nameэто имя, которое вы указали для этой группы серверов, которое можно использовать позже.scgi_pass указано в директиве.каждыйserverДиректива определяет адрес внутреннего сервера, который может бытьИСАдрес плюс номер порта, который также может бытьUnixПуть сокета домена.

Например, мы можем определить файл с именемscgi_serversвосходящая группа:

upstream scgi_servers {
    server 127.0.0.1:9000;
    server 127.0.0.1:9001;
    server unix:/tmp/scgi.socket;
}
  • 1
  • 2
  • 3
  • 4
  • 5

После определения восходящего потока мы можемscgi_passИспользуйте его в директиве:

location /app/ {
    scgi_pass scgi_servers;
    include scgi_params;
}
  • 1
  • 2
  • 3
  • 4

так,NginxЗапрос будет направленscgi_serversсерверы в группе.

Восходящий модуль предоставляет различные алгоритмы балансировки нагрузки, которые можно настроить, добавив параметры после директивы сервера:

  1. Циклический перебор (по умолчанию): запросы распределяются на каждый сервер последовательно.

  2. Взвешенный опрос: вы можете указать вес для каждого сервера. Серверы с более высоким весом получают больше запросов. Например:

upstream scgi_servers {
    server 127.0.0.1:9000 weight=3;
    server 127.0.0.1:9001 weight=1;
}
  • 1
  • 2
  • 3
  • 4
  1. Наименьшее количество подключений: отправьте запрос на сервер с наименьшим количеством активных в данный момент подключений.использоватьleast_connинструкция:
upstream scgi_servers {
    least_conn;
    server 127.0.0.1:9000;
    server 127.0.0.1:9001;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  1. ИСХэш: согласно клиентуИСХэш-значение адреса для выбора сервера может гарантировать, что он принадлежит тому же самому серверу.ИС Запросы всегда отправляются на один и тот же сервер (если только этот сервер недоступен).использоватьip_hashинструкция:
upstream scgi_servers {
    ip_hash;
    server 127.0.0.1:9000;
    server 127.0.0.1:9001;
}
  • 1
  • 2
  • 3
  • 4
  • 5

Восходящий модуль также обеспечивает функции проверки работоспособности сервера и аварийного переключения.Например, мы можем использоватьmax_failsиfail_timeoutПараметры для настройки обнаружения неисправностей:

upstream scgi_servers {
    server 127.0.0.1:9000 max_fails=3 fail_timeout=30s;
    server 127.0.0.1:9001 max_fails=3 fail_timeout=30s;
}
  • 1
  • 2
  • 3
  • 4

В этой конфигурации, если сервер выходит из строя три раза подряд в течение 30 секунд,NginxОн будет помечен как недоступный, и в течение следующих 30 секунд к нему больше не будут отправляться запросы.

Кроме того, мы можем использоватьbackupПараметры для указания резервного сервера, который будет использоваться только в том случае, если все основные серверы недоступны:

upstream scgi_servers {
    server 127.0.0.1:9000;
    server 127.0.0.1:9001;
    server 127.0.0.1:9002 backup;
}
  • 1
  • 2
  • 3
  • 4
  • 5

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

4.3 Сокет Unix против сокета TCP

В конфигурацииNginxизscgi_passдирективе, у нас есть два основных параметра для указанияSCGIАдрес сервера:Unixдоменный сокет иТКП разъем. Оба метода имеют свои преимущества и недостатки, и какой метод выбрать, зависит от конкретных сценариев применения и потребностей.

UnixДоменные сокеты — это тип межпроцессного взаимодействия (МПК ) механизм, который позволяет процессам на одной машине эффективно взаимодействовать.существоватьNginxНастройка,Unix Адрес сокета домена обычно представляется как путь к файлу. Например:

scgi_pass unix:/tmp/scgi.socket;
  • 1

использоватьUnix Основным преимуществом доменных сокетов является их производительность.Поскольку связь происходит на одной машине и не требует использования стека сетевых протоколов, поэтомуUnixСокеты домена обычно меньше, чемТКП Сокеты работают быстрее.они избегаютTCP/IP Накладные расходы, вызванные протоколом, такие как инкапсуляция и декапсуляция пакетов данных, контроль перегрузки сети и т. д.Это делаетUnixДоменные сокеты особенно подходят дляNginxиSCGIСервер работает на той же машине.

Другой используетUnix Преимущество доменных сокетов — безопасность. Поскольку связь ограничена локальной машиной, она, естественно, невосприимчива к атакам со всей сети. Кроме того, разрешения файловой системы можно использовать для управления доступом к файлам сокетов, обеспечивая дополнительный уровень безопасности.

Однако,Unix Доменные сокеты также имеют свои ограничения. Очевидно, что их можно использовать только для межпроцессного взаимодействия на одной машине.еслиNginxиSCGIСервер должен работать на другом компьютере, поэтому его нельзя использовать.Unixдоменный сокет.

В отличие,ТКПИспользование сокетаИС адрес и номер порта, чтобы указать адрес сервера. Например:

scgi_pass 127.0.0.1:9000;
  • 1

ТКП Главное преимущество розеток – гибкость.они разрешаютNginxиSCGI Серверы работают на разных машинах, что необходимо для распределенных систем или приложений, которым требуется горизонтальное масштабирование.использоватьТКПсокетов, мы можем легко реализовать балансировку нагрузки, распределяя запросы по несколькимSCGIсервер.

Еще одним преимуществом является то, чтоТКП Сокеты упрощают мониторинг и отладку на уровне сети. Используя стандартные сетевые инструменты, мы можем легко проверить состояние связи и диагностировать проблемы.

Однако,ТКПОсновным недостатком сокетов является то, что производительность немного ниже, чем у сокетов.Unix доменный сокет. Даже при обмене данными на одной и той же машине данные должны пройти через весь стек сетевых протоколов, что приведет к некоторым дополнительным накладным расходам.Кроме того, используйтеТКПСокеты могут потребовать дополнительных мер безопасности, таких как установка правил брандмауэра, использованиеSSL/TLSШифрование и т. д.

При выборе использованияUnixДоменные сокеты все ещеТКППри использовании розеток необходимо учитывать следующие факторы:

  1. Требования к производительности: Если вы стремитесь к максимальной производительности иNginxиSCGIСервер находится на той же машине, и его следует выбрать.Unixдоменный сокет.

  2. Архитектура развертывания: еслиNginxиSCGIЕсли серверу необходимо работать на разных машинах или необходимо обеспечить балансировку нагрузки, вы должны использоватьТКПразъем.

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

  4. Масштабируемость: если ожидается, что вам может потребоватьсяSCGIЧтобы масштабировать сервер на несколько компьютеров, используйтеТКПСокеты будет легче настраивать по схеме.

  5. Потребности в отладке и мониторинге. Если вам необходимо использовать стандартные сетевые инструменты для мониторинга и отладки,ТКПРозетки могут быть более подходящими.

Суммируя,Unixдоменный сокет иТКП Все сокеты являются допустимым выбором. Ваш выбор должен основываться на конкретных потребностях вашего приложения, требованиях к производительности и среде развертывания.Во многих случаях, особенно когда преследуется высокая производительность иNginxиSCGIКогда серверы сосуществуют на одной машине,Unix Доменные сокеты могут быть лучшим выбором. Но если требуется большая гибкость или распределенное развертывание,ТКПРозетки – незаменимая опция.

5. Расширенная настройка scgi_pass

В этой главе будет подробно рассмотреноscgi_passТри ключевых аспекта расширенной конфигурации: настройки тайм-аута, конфигурация буфера и управление пулом соединений.

5.1 Настройка тайм-аута

Настройка тайм-аута предназначена для обеспеченияNginxиSCGI Залог надежности связи между серверами. Правильная настройка тайм-аута может предотвратить бесконечное зависание запросов в случае возникновения проблемы, а также обеспечить достаточное время обработки для медленных соединений.

NginxОбеспечивает несколькоscgi_passСвязанные инструкции по тайм-ауту:

прежде всегоscgi_connect_timeout, который определяетNginxиSCGI Максимальное время ожидания установления соединения сервером. Если соединение не может быть установлено в течение указанного времени,Nginx вернет ошибку. Например:

scgi_connect_timeout 60s;
  • 1

Эта конфигурация устанавливает время ожидания соединения равным 60 секундам.

Во-вторых,scgi_read_timeoutназначенныйNginxотSCGI Таймаут сервера на чтение ответов.еслиSCGI За это время сервер не передал никаких данных и соединение будет закрыто. Например:

scgi_read_timeout 60s;
  • 1

наконец,scgi_send_timeoutуже настроенNginxКSCGI Период ожидания, в течение которого сервер отправляет запросы.Если в течение указанного времениSCGI Сервер не получил никаких данных, и соединение будет закрыто. Например:

scgi_send_timeout 60s;
  • 1

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

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

Конфигурация буфера для оптимизацииNginxиSCGI Передача данных между серверами имеет решающее значение. Разумные настройки буфера могут повысить скорость ответа и снизить потребление ресурсов.

scgi_buffer_sizeИнструкция по настройке для чтенияSCGI Размер буфера для первой части ответа сервера. Обычно он содержит небольшой заголовок ответа. Например:

scgi_buffer_size 4k;
  • 1

scgi_buffersИнструкции определены для чтенияSCGI Количество и размер буферов для ответов сервера. Например:

scgi_buffers 8 4k;
  • 1

Эта конфигурация создает 8 буферов размером 4 КБ.

Если ответ не полностью умещается в памяти, вы можете использоватьscgi_max_temp_file_sizeДиректива для ограничения максимального размера временных файлов:

scgi_max_temp_file_size 1024m;
  • 1

Это ограничивает максимальный размер временных файлов до 1024 МБ.

Для больших ответов вы можете использоватьscgi_busy_buffers_sizeДиректива для ограничения размера буфера, доступного в состоянии занятости:

scgi_busy_buffers_size 8k;
  • 1

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

5.3 Управление пулом соединений

Оптимизировано управление пулом соединенийNginxиSCGI Еще один важный аспект связи между серверами. Повторное использование соединений позволяет значительно сократить затраты на установление новых соединений и повысить общую производительность.

scgi_keepaliveДиректива по настройке восходящего потокаSCGI Максимальное количество простаивающих соединений, которые сервер может поддерживать. Например:

scgi_keepalive 10;
  • 1

Эта конфигурация позволяет каждому рабочему процессу поддерживать до 10 простаивающих соединений для поддержания активности.

можешь использоватьscgi_http_versionкоманда для указанияNginxиспользуется сSCGIсвязь с серверомHTTPВерсия протокола:

scgi_http_version 1.1;
  • 1

использоватьHTTP/1.1Можно включить долгоживущие соединения, что имеет решающее значение для поддержания эффективности пула соединений.

Кроме того, можно использоватьscgi_next_upstreamДирективы, определяющие, при каких обстоятельствах запросы должны передаваться на следующий сервер:

scgi_next_upstream error timeout invalid_header http_500;
  • 1

Эта конфигурация определяет, что делать, если возникает ошибка, истекает время ожидания, получен недопустимый заголовок илиHTTP При ошибке 500 запрос должен быть передан на следующий сервер.

6. Случай веб-развертывания Python flup

Быть написанным

6.1 Краткое описание шагов

6.2 Контейнерное развертывание

7. Резюме

В этой статье подробно рассматриваетсяNginxсерединаscgi_passприменение инструкций, уделяя особое вниманиеПитон Настройка и развертывание приложения.Мы впервые представилиSCGIЗатем были подробно объяснены характеристики и преимущества протокола.scgi_pass Базовый синтаксис и расширенные параметры настройки директив.На практических примерах покажите, какПитон FlupКонфигурация рамыscgi_pass, включая базовые настройки, балансировку нагрузки, объединение пулов соединений и управление буферами.