моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
[Введение]: 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.
SCGI(Простой интерфейс общего шлюза)Nginx Поддерживается один из важных методов обратного прокси. в,SCGIэто упрощенная версияCGI(Common Gateway Interface), разработанный для обеспечения более эффективного способа подключения.Веб Серверы и приложения.с традиционнымCGIпо сравнению с,SCGIБлагодаря использованию постоянных соединений и упрощенному формату протокола накладные расходы на каждый запрос значительно сокращаются.
SCGIПротокол определяет стандартизированный способВеб Передавайте информацию запроса и получайте ответы между сервером и приложением. Он использует простой текстовый формат для передачи информации заголовка запроса, за которым следует тело запроса (если есть).Эта конструкция делаетSCGIОн прост в реализации и обеспечивает хорошую производительность.
существоватьВебВ архитектуре приложенияSCGIДействовал какВебсервер (например,Nginx ) и серверные приложения.когдаNginxполучено от клиентаHTTPПо запросу он может преобразовать эти запросы вSCGIотформатировать, а затем передатьSCGIПротокол отправляется на внутренний сервер приложений.
Этот подход особенно подходит для тех, кто изначально поддерживаетSCGIЯзыки программирования протоколов и фреймворки, такие какПитоннекоторые изВебкадры (например,Флуп)илиРубинНекоторые серверы приложений (например,Единорог ).используяSCGI, эти приложения могут избежатьHTTPНакладные расходы на синтаксический анализ, непосредственная обработка изВебзапросы к серверу, тем самым улучшая общую производительность.
В практических приложенияхSCGIСценарии использования включают, помимо прочего:
высокая производительностьВебПриложение. Для приложений, которым необходимо обрабатывать большое количество одновременных запросов,SCGIМожет обеспечить лучшее, чем традиционноеCGIЛучшая производительность.
Длительные процессы: некоторые приложения, которым необходимо поддерживать состояние или которые работают в течение длительного времени, могутSCGIиВебСервер поддерживает постоянное соединение.
Оптимизация для конкретного языка: некоторые языки программирования или платформы могут использоватьSCGIпоказать лучшую производительность или более простую реализацию.
вNginxиспользуется вscgi_pass
команда, администраторы могут легко разместитьHTTPПереслать запрос в поддержкуSCGI внутренний сервер приложений.Это не только упрощает процесс настройки, но и предоставляет возможности для оптимизации.ВебПроизводительность приложений обеспечивает гибкость.
SCGI(Простой общий интерфейс шлюза) — это упрощенный протокол.CGIпротокол, специально разработанный дляВеб Связь между сервером и приложением. Он имеет следующие существенные особенности:
Простота:SCGI Протокол использует простой текстовый формат для передачи информации заголовка запроса, что делает реализацию и отладку протокола относительно простой. Философия разработки протокола заключается в том, чтобы сохранить его простоту, но при этом обеспечить достаточную функциональность.
Постоянные связи: в сравнении с традиционнымиCGIдругой,SCGI Поддерживает постоянные соединения.это означаетSCGI Сервер может обрабатывать несколько запросов без создания нового процесса или потока для каждого запроса. Это значительно снижает нагрузку на системные ресурсы и повышает общую производительность.
Низкие накладные расходы: благодаряSCGI Конструкция протокола проста и не создает дополнительных затрат при обработке запроса.Это делаетSCGIОсобенно подходит для обработки высокого параллелизма.ВебСценарии применения.
гибкость:SCGI Протокол позволяет передавать произвольную информацию заголовка, что предоставляет разработчикам большую гибкость. Разработчики могут настраивать информацию заголовка по мере необходимости в соответствии с требованиями конкретных приложений.
Языковая независимость:SCGI Конструкция протокола не зависит от языка программирования.Это означает, что его можно реализовать на любом языке программирования, что позволяет разработчикам выбирать язык, который лучше всего соответствует потребностям их проекта.SCGIсервер.
ХотяSCGIиHTTPиспользуются дляВебПротоколы связи, но они имеют существенные различия в целях проектирования и сценариях использования:
Целевые пользователи:HTTPПротокол в основном используется клиентами (например, браузерами) иВебсвязь между серверами, при этомSCGIСоглашение ориентировано наВебСвязь между сервером и серверными приложениями.
Сложность протокола:HTTPПротокол относительно сложен и содержит большое количество информации заголовка и методов для поддержки различныхВеб интерактивная сцена. В отличие,SCGIПротокол проще и содержит только необходимую информацию для доставки запросов и ответов.
Соображения производительности: вВебИспользуется между сервером и приложениемSCGIвместоHTTPНакладные расходы на анализ протокола могут быть уменьшены, посколькуSCGI Формат более простой и прямой. Это может привести к значительному повышению производительности в сценариях с высоким уровнем параллелизма.
Управление подключением:HTTP/1.1Была введена концепция постоянных соединений, но вВебИспользуется между сервером и приложениемHTTPМожет потребоваться дополнительное управление соединениями.SCGIВстроенная поддержка постоянных соединений упрощает этот процесс.
сцены, которые будут использоваться:HTTPЭто основной протокол Интернета, применимый к различнымВебсценарий общения.SCGIв основном используется дляВебВнутренняя связь между серверами и серверными приложениями, особенно в сценариях, где требуется высокопроизводительная обработка.
SCGIиFastCGIВсеCGIУлучшенная версияВеб Производительность приложения. У них есть некоторые сходства, но есть и некоторые ключевые различия:
Сложность протокола:SCGIкоэффициент согласияFastCGIпроще.SCGIИспользует простой текстовый формат для передачи информации заголовка, в то время какFastCGI Используйте двоичный формат.Это делаетSCGIЛегче реализовать и отладить, но может немного уступатьFastCGIпроизводительность.
Мультиплексирование:FastCGIПоддерживает обработку нескольких запросов по одному соединению (мультиплексирование), при этомSCGI Обычно за одно соединение обрабатывается только один запрос. Это означает, что в некоторых сценариях с высоким уровнем параллелизмаFastCGIВозможно, выступит лучше.
Тип записи:FastCGIОпределено несколько типов записей (например,СТДИН、СТАНДАРТНЫЙ ВЫВОД、СТДЕРРи т. д.), что обеспечивает более детальный контроль.SCGIПрименяется более простой подход, ориентированный главным образом на передачу запросов и ответов.
Языковая поддержка: благодаряFastCGI Чем дольше он существует, тем более широкой будет его поддержка в различных языках программирования и средах. Однако,SCGIЕго простота делает его реализацию на некоторых языках потенциально более простой.
Производительность: В большинстве случаевSCGIиFastCGI Разница в производительности не существенна. Выбор используемого протокола часто зависит от конкретных потребностей приложения, поддержки языка разработки и личных предпочтений.
существоватьNginxНастройка,scgi_pass
Директива используется для передачи запросаSCGI Ключевые директивы для сервера.это определяетNginxкуда следует направить запросSCGIСервер или группа серверов.
scgi_pass
Основной синтаксис команды следующий:
scgi_pass address;
в,address
Оно может быть в следующих формах:
Например:scgi_pass localhost:9000;
в этом случае,NginxЗапрос будет перенаправлен на сервер, работающий на локальном хосте и прослушивающий порт 9000.SCGIсервер.
Например:scgi_pass unix:/tmp/scgi.socket;
здесь,Nginxпройдет указанноеUnixсокет домена сSCGI Связь с сервером.Этот метод обычно используетсяSCGIсервер сNginxРабота на той же машине может обеспечить более высокую производительность.
Например:scgi_pass scgi_backend;
В этом использованииscgi_backend
один вNginx Предопределенная группа вышестоящих серверов в файле конфигурации. Это позволяет реализовать расширенные функции, такие как балансировка нагрузки и аварийное переключение.
scgi_pass
Инструкции обычно находятся вlocation
используется в блоках для обработки конкретныхURL путь. Например:
location /scgi/ {
scgi_pass localhost:9000;
include scgi_params;
}
В этом примере все/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;
}
В этом примереПОЧТАЗапросы перенаправляются на порт 9001, а все остальные запросы перенаправляются на порт 9000.
scgi_pass
иproxy_pass
Все они являются широко используемыми инструкциями обратного прокси-сервера и перенаправляют запросы на внутренний сервер.
в,scgi_pass
Предназначен для использования при поддержкеSCGIПротокол для связи с внутренним сервером.SCGIэто упрощенный вариантCGIпротокол, предназначенный дляВеб Эффективная связь между серверами и приложениями. В отличие,proxy_pass
— это более общая директива, которую можно использовать для проксирования различных протоколов, включаяHTTP、HTTPS、FastCGIждать.
В использовании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;
}
В этом примереinclude scgi_params
введены предопределенныеSCGIпараметры, в то время какscgi_param
Директивы используются для установки дополнительных параметров.
В отличие,proxy_pass
Конфигурация обычно проще и понятнее:
location /api/ {
proxy_pass http://backend_server;
}
С точки зрения производительности,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
может быть более уместным.
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,
В этом примере «70» представляет общую длину заголовка, за которым следуют три пары ключ-значение:CONTENT_LENGTH
、SCGI
иREQUEST_METHOD
。
После отправки заголовка запросаNginx Отправляется тело запроса (если есть).дляПОЛУЧАТЬЗапросы обычно не имеют тела запроса, но дляПОЧТАилиПОМЕЩАТЬЗапрос, тело запроса может содержать данные формы или другие типы контента.
SCGI После того как сервер получает запрос, он обрабатывает его и генерирует ответ.Ответ отправляется обратно по тому же соединению.Nginx。SCGIФормат ответа относительно прост. Он включает заголовки и тело ответа, разделенные пустой строкой.
NginxполученныйSCGIПосле ответа сервера он преобразуется обратно вHTTP Формат ответа.Этот процесс включает в себя анализSCGIЗаголовки ответов, заданные соответствующим образомHTTPзаголовки ответа, а затем передать тело ответа клиенту без изменений.
во всем процессе,Nginx Также отвечает за управление жизненным циклом соединения.Сюда входит обработка таймаутов соединения, управление пулом соединений (если включено).keepalive
), обрабатывать сетевые ошибки и т. д. Если во время обработки произошла ошибка,NginxСоответствующий ответ об ошибке будет возвращен клиенту в соответствии с конфигурацией.
кроме того,scgi_pass
Рабочий процесс неблокирующий.это означаетNginxМожет обрабатывать несколькоSCGI запросы без создания нового процесса или потока для каждого запроса.Эта конструкция делаетNginxСпособность эффективно обрабатывать большое количество одновременных подключений.
существовать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;
}
}
}
В этой конфигурации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;
}
здесь,SCRIPT_FILENAME
В качестве параметра установлен фактический путь к скрипту.$fastcgi_script_name
ЭтоNginxПеременная, представляющая имя запрошенного сценария.
Если вашSCGIИспользование сервераUnixдоменный сокет вместо этогоТКППорт можно настроить следующим образом:
location /scgi/ {
scgi_pass unix:/tmp/scgi.socket;
include scgi_params;
}
В этом примереNginxбудет расположен через/tmp/scgi.socket
изUnixсокет домена сSCGIСвязь с сервером.
После завершения настройки необходимо перезагрузить или перезапуститьNginx чтобы изменения вступили в силу. Можно использовать следующие команды:
sudo nginx -s reload
или
sudo systemctl restart nginx
Эта базовая конфигурация предназначена для использованияscgi_pass
Обеспечивает хорошую отправную точку. В зависимости от ваших конкретных потребностей могут потребоваться дополнительные настройки и оптимизации. Например, вам может потребоваться настроить буферизацию, тайм-ауты или группы вышестоящих серверов для балансировки нагрузки. Эти параметры конфигурации подробно обсуждаются в последующих главах.
существоватьNginx восходящий модуль позволяет нам определить набор серверов, которые можно использовать для балансировки нагрузки и аварийного переключения.когда сscgi_pass
Восходящий модуль может быть значительно улучшен при использовании в сочетании с директивами.SCGIГибкость и надежность агента.
Основной синтаксис восходящего модуля следующий:
upstream backend_name {
server address1;
server address2;
# 更多服务器...
}
В этой конфигурации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;
}
После определения восходящего потока мы можемscgi_pass
Используйте его в директиве:
location /app/ {
scgi_pass scgi_servers;
include scgi_params;
}
так,NginxЗапрос будет направленscgi_servers
серверы в группе.
Восходящий модуль предоставляет различные алгоритмы балансировки нагрузки, которые можно настроить, добавив параметры после директивы сервера:
Циклический перебор (по умолчанию): запросы распределяются на каждый сервер последовательно.
Взвешенный опрос: вы можете указать вес для каждого сервера. Серверы с более высоким весом получают больше запросов. Например:
upstream scgi_servers {
server 127.0.0.1:9000 weight=3;
server 127.0.0.1:9001 weight=1;
}
least_conn
инструкция:upstream scgi_servers {
least_conn;
server 127.0.0.1:9000;
server 127.0.0.1:9001;
}
ip_hash
инструкция:upstream scgi_servers {
ip_hash;
server 127.0.0.1:9000;
server 127.0.0.1:9001;
}
Восходящий модуль также обеспечивает функции проверки работоспособности сервера и аварийного переключения.Например, мы можем использовать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;
}
В этой конфигурации, если сервер выходит из строя три раза подряд в течение 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;
}
Правильно используя восходящий модуль, мы можем создать высокодоступную и высокопроизводительную систему.SCGI Кластер агентов. Это не только улучшает общую производительность приложения, но также повышает надежность и отказоустойчивость системы. В практических приложениях нам следует выбирать подходящие стратегии балансировки нагрузки и механизмы аварийного переключения, основанные на конкретных потребностях и сценариях, чтобы получить наилучшую производительность системы.
В конфигурацииNginxизscgi_pass
директиве, у нас есть два основных параметра для указанияSCGIАдрес сервера:Unixдоменный сокет иТКП разъем. Оба метода имеют свои преимущества и недостатки, и какой метод выбрать, зависит от конкретных сценариев применения и потребностей.
UnixДоменные сокеты — это тип межпроцессного взаимодействия (МПК ) механизм, который позволяет процессам на одной машине эффективно взаимодействовать.существоватьNginxНастройка,Unix Адрес сокета домена обычно представляется как путь к файлу. Например:
scgi_pass unix:/tmp/scgi.socket;
использоватьUnix Основным преимуществом доменных сокетов является их производительность.Поскольку связь происходит на одной машине и не требует использования стека сетевых протоколов, поэтомуUnixСокеты домена обычно меньше, чемТКП Сокеты работают быстрее.они избегаютTCP/IP Накладные расходы, вызванные протоколом, такие как инкапсуляция и декапсуляция пакетов данных, контроль перегрузки сети и т. д.Это делаетUnixДоменные сокеты особенно подходят дляNginxиSCGIСервер работает на той же машине.
Другой используетUnix Преимущество доменных сокетов — безопасность. Поскольку связь ограничена локальной машиной, она, естественно, невосприимчива к атакам со всей сети. Кроме того, разрешения файловой системы можно использовать для управления доступом к файлам сокетов, обеспечивая дополнительный уровень безопасности.
Однако,Unix Доменные сокеты также имеют свои ограничения. Очевидно, что их можно использовать только для межпроцессного взаимодействия на одной машине.еслиNginxиSCGIСервер должен работать на другом компьютере, поэтому его нельзя использовать.Unixдоменный сокет.
В отличие,ТКПИспользование сокетаИС адрес и номер порта, чтобы указать адрес сервера. Например:
scgi_pass 127.0.0.1:9000;
ТКП Главное преимущество розеток – гибкость.они разрешаютNginxиSCGI Серверы работают на разных машинах, что необходимо для распределенных систем или приложений, которым требуется горизонтальное масштабирование.использоватьТКПсокетов, мы можем легко реализовать балансировку нагрузки, распределяя запросы по несколькимSCGIсервер.
Еще одним преимуществом является то, чтоТКП Сокеты упрощают мониторинг и отладку на уровне сети. Используя стандартные сетевые инструменты, мы можем легко проверить состояние связи и диагностировать проблемы.
Однако,ТКПОсновным недостатком сокетов является то, что производительность немного ниже, чем у сокетов.Unix доменный сокет. Даже при обмене данными на одной и той же машине данные должны пройти через весь стек сетевых протоколов, что приведет к некоторым дополнительным накладным расходам.Кроме того, используйтеТКПСокеты могут потребовать дополнительных мер безопасности, таких как установка правил брандмауэра, использованиеSSL/TLSШифрование и т. д.
При выборе использованияUnixДоменные сокеты все ещеТКППри использовании розеток необходимо учитывать следующие факторы:
Требования к производительности: Если вы стремитесь к максимальной производительности иNginxиSCGIСервер находится на той же машине, и его следует выбрать.Unixдоменный сокет.
Архитектура развертывания: еслиNginxиSCGIЕсли серверу необходимо работать на разных машинах или необходимо обеспечить балансировку нагрузки, вы должны использоватьТКПразъем.
Требования безопасности. Если безопасность является основной задачей и межмашинное взаимодействие не требуется,UnixДоменные сокеты могут быть лучшим выбором.
Масштабируемость: если ожидается, что вам может потребоватьсяSCGIЧтобы масштабировать сервер на несколько компьютеров, используйтеТКПСокеты будет легче настраивать по схеме.
Потребности в отладке и мониторинге. Если вам необходимо использовать стандартные сетевые инструменты для мониторинга и отладки,ТКПРозетки могут быть более подходящими.
Суммируя,Unixдоменный сокет иТКП Все сокеты являются допустимым выбором. Ваш выбор должен основываться на конкретных потребностях вашего приложения, требованиях к производительности и среде развертывания.Во многих случаях, особенно когда преследуется высокая производительность иNginxиSCGIКогда серверы сосуществуют на одной машине,Unix Доменные сокеты могут быть лучшим выбором. Но если требуется большая гибкость или распределенное развертывание,ТКПРозетки – незаменимая опция.
В этой главе будет подробно рассмотреноscgi_pass
Три ключевых аспекта расширенной конфигурации: настройки тайм-аута, конфигурация буфера и управление пулом соединений.
Настройка тайм-аута предназначена для обеспеченияNginxиSCGI Залог надежности связи между серверами. Правильная настройка тайм-аута может предотвратить бесконечное зависание запросов в случае возникновения проблемы, а также обеспечить достаточное время обработки для медленных соединений.
NginxОбеспечивает несколькоscgi_pass
Связанные инструкции по тайм-ауту:
прежде всегоscgi_connect_timeout
, который определяетNginxиSCGI Максимальное время ожидания установления соединения сервером. Если соединение не может быть установлено в течение указанного времени,Nginx вернет ошибку. Например:
scgi_connect_timeout 60s;
Эта конфигурация устанавливает время ожидания соединения равным 60 секундам.
Во-вторых,scgi_read_timeout
назначенныйNginxотSCGI Таймаут сервера на чтение ответов.еслиSCGI За это время сервер не передал никаких данных и соединение будет закрыто. Например:
scgi_read_timeout 60s;
наконец,scgi_send_timeout
уже настроенNginxКSCGI Период ожидания, в течение которого сервер отправляет запросы.Если в течение указанного времениSCGI Сервер не получил никаких данных, и соединение будет закрыто. Например:
scgi_send_timeout 60s;
Эти настройки тайм-аута должны быть скорректированы в соответствии с потребностями реального приложения. Для большинства приложений достаточно значений по умолчанию. Но для некоторых длительных запросов может потребоваться увеличить значения таймаута.
Конфигурация буфера для оптимизацииNginxиSCGI Передача данных между серверами имеет решающее значение. Разумные настройки буфера могут повысить скорость ответа и снизить потребление ресурсов.
scgi_buffer_size
Инструкция по настройке для чтенияSCGI Размер буфера для первой части ответа сервера. Обычно он содержит небольшой заголовок ответа. Например:
scgi_buffer_size 4k;
scgi_buffers
Инструкции определены для чтенияSCGI Количество и размер буферов для ответов сервера. Например:
scgi_buffers 8 4k;
Эта конфигурация создает 8 буферов размером 4 КБ.
Если ответ не полностью умещается в памяти, вы можете использоватьscgi_max_temp_file_size
Директива для ограничения максимального размера временных файлов:
scgi_max_temp_file_size 1024m;
Это ограничивает максимальный размер временных файлов до 1024 МБ.
Для больших ответов вы можете использоватьscgi_busy_buffers_size
Директива для ограничения размера буфера, доступного в состоянии занятости:
scgi_busy_buffers_size 8k;
Эти параметры буфера следует настроить с учетом характеристик вашего приложения и ресурсов сервера для достижения оптимальной производительности.
Оптимизировано управление пулом соединенийNginxиSCGI Еще один важный аспект связи между серверами. Повторное использование соединений позволяет значительно сократить затраты на установление новых соединений и повысить общую производительность.
scgi_keepalive
Директива по настройке восходящего потокаSCGI Максимальное количество простаивающих соединений, которые сервер может поддерживать. Например:
scgi_keepalive 10;
Эта конфигурация позволяет каждому рабочему процессу поддерживать до 10 простаивающих соединений для поддержания активности.
можешь использоватьscgi_http_version
команда для указанияNginxиспользуется сSCGIсвязь с серверомHTTPВерсия протокола:
scgi_http_version 1.1;
использоватьHTTP/1.1Можно включить долгоживущие соединения, что имеет решающее значение для поддержания эффективности пула соединений.
Кроме того, можно использоватьscgi_next_upstream
Директивы, определяющие, при каких обстоятельствах запросы должны передаваться на следующий сервер:
scgi_next_upstream error timeout invalid_header http_500;
Эта конфигурация определяет, что делать, если возникает ошибка, истекает время ожидания, получен недопустимый заголовок илиHTTP При ошибке 500 запрос должен быть передан на следующий сервер.
Быть написанным
В этой статье подробно рассматриваетсяNginxсерединаscgi_pass
применение инструкций, уделяя особое вниманиеПитон Настройка и развертывание приложения.Мы впервые представилиSCGIЗатем были подробно объяснены характеристики и преимущества протокола.scgi_pass
Базовый синтаксис и расширенные параметры настройки директив.На практических примерах покажите, какПитон FlupКонфигурация рамыscgi_pass
, включая базовые настройки, балансировку нагрузки, объединение пулов соединений и управление буферами.