proxy_pass и fastcgi_pass — одна машина

#Соединение #Только #Другой #NULL #Разбираем
proxy_pass и fastcgi_pass — одна машина

У директив proxy_* и fastcgi_* совпадает 46 опций из 53 — буферизация, таймауты, кеш, next_upstream, с точностью до префикса и вплоть до значений по умолчанию. Два независимо написанных модуля так не сходятся. Они и не независимы. Всё, чем proxy_pass отличается от fastcgi_pass, — девять указателей на функции в ngx_http_upstream_t. Соединение, таймауты, повторы, буферизация и отдача клиенту лежат в общих 7352 строках ngx_http_upstream.c, и восемь модулей — от proxy до свежего tunnel — дёргают один и тот же код. Только контракт из этих девяти указателей врёт в обе стороны. Один из них, abort_request, ставят все восемь модулей — а машинерия не вызывает его ни разу: ноль вызовов во всём дереве и ни одного коммита с вызовом за всю публичную историю, с импорта 0.1.14 в январе 2005-го. Другой, pipe->input_filter, в контракте не объявлен вовсе — но обязателен, как только включена буферизация, и вызывается без проверки на NULL. Разбираем по тегу release-1.31.3 со ссылками файл:строка: все места

Два location, каждый писали десятки раз:

location /api/ { proxy_pass http://backend; proxy_buffering off; proxy_next_upstream error timeout; proxy_connect_timeout 2s; } location /php/ { fastcgi_pass unix:/run/php-fpm.sock; fastcgi_buffering off; fastcgi_next_upstream error timeout; fastcgi_connect_timeout 2s; }

Разные протоколы, разные модули, разные страницы документации — и одинаковый набор опций с точностью до префикса. Не совпадение: 46 директив fastcgi_* из 53 имеют точный аналог у proxy_*, и 39 общих полей конфигурации сливаются с одинаковыми значениями по умолчанию. Расходится ровно одно — путь для временных файлов.

Два независимо написанных модуля так не сходятся. Они и не независимы: всё, чем proxy_pass отличается от fastcgi_pass, — девять указателей на функции. Остальное — общий код в ngx_http_upstream.c, который не принадлежит ни одному из модулей.

Похожие статьи

Российская газета
Российская газета

Как швейная фабрика в Мстиславле стала одним из индустриальных флагманов

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

Российская газета
РИА
РИА

В Грузии в ДТП с автобусом погибли четверо граждан Белоруссии

Четверо граждан Белоруссии погибли в результате ДТП на грузинском курорте Гомисмта, еще около 20 пострадали, передает Sputnik Грузия со ссылкой на местные СМИ. РИА Новости, 13.08.2026

РИА
РИА
РИА

В США раскрыли, что стало с Зеленским из-за ситуации в Одессе

Из-за отрезания Одессы от моря Владимиру Зеленскому остается только кричать о прекращении огня, заявил полковник Сухопутных войск США в отставке Лоуренс... РИА Новости, 13.08.2026

РИА
Сейвы Сафонова, гол Дуэ, рекорд Маджо и судейство опального Артана: ПСЖ выиграл Суперкубок УЕФА в день рождения клуба RT на русском
RT на русском

Сейвы Сафонова, гол Дуэ, рекорд Маджо и судейство опального Артана: ПСЖ выиграл Суперкубок УЕФА в день рождения клуба

«Пари Сен-Жермен» обыграл «Астон Виллу» и во второй раз стал обладателем Суперкубка УЕФА. В первом тайме парижане владели мячом гораздо больше соперника и открыли счёт благодаря мощному удару Хвичи Кв...

RT на русском
RT на русском
RT на русском

Аэропорты Пензы и Саратова приостановили полёты

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

RT на русском
[Перевод] Джоэл Хэмкинс: бесконечность, математическая реальность и теоремы Гёделя Хабр
Хабр

[Перевод] Джоэл Хэмкинс: бесконечность, математическая реальность и теоремы Гёделя

Философия математики была бы гораздо проще, если бы не бесконечность. Само это понятие кажется вполне естественным, но стоит отнестись к нему всерьез, как мы сталкиваемся с парадоксальными результатам...

Хабр