The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Выпуск ngx_php 0.0.13, модуля с интерпретатором PHP для nginx

21.11.2018 10:52

Подготовлен новый выпуск модуля ngx_php с реализацией встраиваемого в nginx интерпретатора языка программирования PHP. Модуль позволяет создавать обработчики запросов на PHP, модифицировать запрос/ответ, фильтровать тело ответа и заголовки, создавать заглушки для блокирования уязвимостей в web-приложениях, организовывать проверку доступа. По сравнению с запуском PHP при помощи fpm модуль ngx_php обеспечивает доступ к внутренним API nginx и демонстрирует существенный прирост производительности (от 2 до 10 раз).


    location = /nginx_request {
            set $a 123;
            content_by_php '
                echo ngx_request::document_uri();
                echo "ngx::query_args()\n";
                var_dump(ngx::query_args()); 
                $a = ngx_var::get("a");
                var_dump($a);
            ';
        }

Дополнительно можно отметить вышедшую на днях статью о применении модуля njs (NGINX JavaScript module) для создания виртуальных патчей для блокирования уязвимостей и проблем в web-приложениях (использование как своеобразного аналога ModSecurity).

  1. Главная ссылка к новости (https://github.com/rryqszq4/ng...)
  2. OpenNews: Релиз njs 0.2.5, интерпретатора JavaScript от NGINX
  3. OpenNews: Выпуск сервера приложений NGINX Unit 1.6
  4. OpenNews: Обновление nginx 1.14.1 и 1.15.6 с устранением трёх уязвимостей
  5. OpenNews: В nginx добавлена поддержка технологии HTTP/2 Server Push
  6. OpenNews: Yandex опубликовал статический анализатор файлов конфигурации nginx
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/49643-nginx
Ключевые слова: nginx, php
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (48) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 11:05, 21/11/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +11 +/
    Теперь phar-архивы можно загружать и выполнять на удаленных серверах еще быстрее.
     
     
  • 2.3, нах (?), 11:37, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    круче - судя по образцу применения - их можно выполнять на боевых серверах прямо в конфиге сервера, без необходимости что-то там снаружи подсовывать.

    P.S.но на самом деле это достижение - запилили таки mod_php в nginx. Давайте теперь еще и пихон туда же впихнем, я в вас верю!

     
     
  • 3.6, Аноним (6), 12:17, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Этот же дев и питон запилил. Походу хобби такое
     
     
  • 4.10, нах (?), 13:16, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    о, там еще и js!

    ща понаскриптуем, век будете npm leftpad помнить!

     

  • 1.4, Аноним (4), 11:45, 21/11/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > демонстрирует существенный прирост производительности (от 2 до 10 раз).

    В каких ситуациях? Множественные одновременные запросы?

     
     
  • 2.5, Аноним (5), 12:10, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    При выполнении специально подготовленного теста.
     

  • 1.7, Аноним (7), 12:21, 21/11/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    > демонстрирует существенный прирост производительности (от 2 до 10 раз)

    Ткнуть бы щас носом в эту фразу моего начальника отдела, который доказывал мне, что интерпретатор, крутящийся в контексте сервера - это не модно, и что нжинксовый php_fpm эффективнее и быстрее отдаёт серверу сгенерированный контент, чем апачевский mod_php.

     
     
  • 2.8, nondo (?), 12:39, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >нжинксовый php_fpm

    чё сказал?

     
  • 2.9, Аноним (9), 12:48, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Речь про накладные расходы на взаимодействие nginx и php-fpm. В том же модуле всё происходит внутри nginx, потому этих расходов просто нет. Вопрос в итоговой разнице с учётом выполнения самого php-кода (который, разумеется, в обоих случаях выполняется одинаково по скорости). Думаю, разница в пределах погрешности на реальных кейсах. Ждём независимых бенчей
     
     
  • 3.11, нах (?), 13:21, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • –5 +/
    запросто может оказаться, что mod_php хуже fpm+nginx, и не в пределах погрешностей, а существенно - за счет разной структуры nginx и самого апача.

    а выигрыш от замены fpm на это чудо в перьях скорее всего, действительно, окажется в пределах ошибки измерений, если код будет посложнее echo "hello"; или что там у них еще в тестах.

    смысл чуда немножко не в этом (оно и не заточено в общем-то на замену fpm), а в скриптовании на пехепе  непосредственно внутри конфига nginx с использованием его внутренних переменных.
    Ну то есть умеешь ты только пехепе, и то плохо, а lua никак, а надо что-то там поделать в конфиге - редирект там динамически сгенерить, или еще что - вот тебе прекрасное.

    главное чтобы нам потом никогда не встретиться с сиим творением.

     
     
  • 4.16, Алеша (?), 20:42, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Вась, этот самый fpm по скорости сравним с голым апач префорк+mod_php
    Там в пределах погрешности разбежность
    Ибо fastCGI точно так же нужно спавнить (форкать) как и - сюрпрайз! - древнючий как кака мамонта апач префорк. И прибивать время от времени, ибо течет...

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

    А тут пошли ещё дальше - все в одном процессе, вообще без процессов/нитей. Плюсы - скорость в разы. Мынусы - подтекло или упало что-то одно - глюкануло все.

    А сам по себе php-fpm никогда не был быстрее апача. Это тебе любой хостер скажет. Хватит уже распространять ламеро-заблуждения.. И единственная его килоер-фича - встроенный менеджер процессов fastCGI.

     
     
  • 5.18, Sw00p aka Jerom (?), 21:10, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    а прикол весь в том, что этот пхп не хранит стейта от запроса к запросу, и собственно вопрос, зачем в стейтлесс архитектуре на каждый запрос порождать процесс?
     
     
  • 6.24, blblblblbl (?), 00:33, 22/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    а где написано, что на каждый запрос порождается процесс, ы?
     
     
  • 7.25, Sw00p aka Jerom (?), 02:58, 22/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > а где написано, что на каждый запрос порождается процесс, ы?

    php-fpm.conf открой, там есть параметры контроля количества чайлдов.

    пс: в #top-ку

     
     
  • 8.26, cutlass (?), 04:20, 22/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Выполни top и сможешь лицезреть то, что эти процессы висят постоянно , а не созд... текст свёрнут, показать
     
     
  • 9.35, Sw00p akaJerom (?), 16:50, 22/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    idle timeout - не не слышал, то что висят не значить, что 10к реквестов вы... текст свёрнут, показать
     
     
  • 10.40, cutlass (?), 03:34, 23/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    У меня число минимальных, максимальных, и начальных процессов одинаково Они , к... текст свёрнут, показать
     
     
  • 11.48, blblblblbl (?), 17:38, 23/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    магия настройки пула такая магия _ ... текст свёрнут, показать
     
  • 10.47, blblblblbl (?), 17:36, 23/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    у меня всего 5 штук, внезапно вот веришь, нет, в статик режиме, в динамике или ... текст свёрнут, показать
     
     
  • 11.49, Sw00p akaJerom (?), 18:37, 23/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    5 процессов пхп одновременно выполнят 5 запросов в секунду если время выполнения... текст свёрнут, показать
     
  • 11.50, Sw00p akaJerom (?), 18:55, 23/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    ну собственно и картинка https imh01-inmotionhosting1 netdna-ssl com support i... текст свёрнут, показать
     
  • 5.23, blblblblbl (?), 00:32, 22/11/2018 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Я тебе так скажу. Самый лучший вариант для говнокодерства это апач + php-fpm, ресурсов жрёт почти как nginx + php-fpm, но при этом имеешь полноценный хтаксесс, что для легаси хорошо.
     
     
  • 6.31, Аноним (31), 11:15, 22/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    apache + mod_php ( а впереди можно и nginx воткнуть ), это из опыта...
    у apache есть большой плюс он умеет плодить php-потоки под узерами конкретных сайтов, т.е. сразу решается проблема с кросс доступом, из коробки.
     
     
  • 7.33, тигарэтоя (?), 16:39, 22/11/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    а что мешает искользовать разные пулы, запуская под отдельными юзерами в случае php-pfm ?
     
  • 7.38, Sw00p aka Jerom (?), 23:22, 22/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    апач работает под одним юзером, всякие mod_suphp подключать нужно, в случае с fpm - все из коробки пашет
     
  • 7.39, Анонес (?), 00:52, 23/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    для схемы апач + php-fpm не нужен nginx, вообще никак
     
  • 4.17, Sw00p aka Jerom (?), 21:06, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    а как же блокировка процесса при выполнении пхп?
     
     
  • 5.22, Аноним (22), 23:39, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Не пугай страусов, пол бетонный. Пушяй полетають..
     
  • 5.27, cutlass (?), 04:20, 22/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Добавляешь больше воркеров в нгникс
     
     
  • 6.32, Аноним (31), 11:16, 22/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    100500???
     
  • 6.36, Sw00p akaJerom (?), 16:52, 22/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    )))))))) чем вам воркер нджинкса поможет если пхп блокирующий и выполняется один запрос одним процессом, при 100rps с временем выполнения скрипта в 1s (секунду) у вас порадится 100 процессов.
     
     
  • 7.41, cutlass (?), 03:43, 23/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Насколько я понял новость, nginx_php будет выполнятся в нити воркера. Значит, чтобы избежать блокирования, вместо чилос воркеров=числу ЦПУ нужно увеличить число воркеров. Количество порождаемых процессов ограничивается настройками, во всяком случае в php-fpm (как там будет в nginx_php не совсем ясно).
      Видимо ты устанавливал php-fpm исключительно "из каропки" не утруждая себя настройкам
    pm.start_servers, pm.min_spare_servers, pm.max_spare_servers. Отсюда радостно кукарекаешь про "у вас порадится 100 процессов.".
      В общем учи матчасть.
     
     
  • 8.43, Sw00p aka Jerom (?), 04:21, 23/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    всё ясно... текст свёрнут, показать
     
  • 2.52, Аноним (52), 04:26, 25/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    они меряют производительность hello world.
     

  • 1.12, ыы (?), 15:12, 21/11/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    оно как и перл в нжинксе - блокирует все пока не отработает?
     
     
  • 2.19, нах (?), 21:36, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    судя по примерам - да, yeld надо дергать явно, если хочешь отдохнуть.

     
     
  • 3.28, cutlass (?), 04:21, 22/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    или добавить воркеров
     
     
  • 4.37, Sw00p akaJerom (?), 16:53, 22/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    ересь не несите
     
     
  • 5.42, cutlass (?), 03:43, 23/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Обоснуй
     
     
  • 6.44, Sw00p aka Jerom (?), 04:24, 23/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    выполни тест который я указал выше, отправь 100 одновременных запросов в секунду на один пхп скрипт который будет исполняться всего лишь одну секунду, и посчитай в ps или top сколько процессов форкнулось.
     

  • 1.13, Ilya Indigo (ok), 16:31, 21/11/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    А .user.ini файлы, как в Apache/FastCGI, он будет читать и понимать?
    Переопределять для разных хостов разные версии PHP, как в Apache/FastCGI можно?
     
  • 1.14, unknown (??), 19:53, 21/11/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Это же не замена php-fpm,я на этом cms запустить не смогу.
     
     
  • 2.30, Анончик (?), 08:42, 22/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Вот тоже интересно, насколько это возможно.
     

  • 1.15, Аноним (15), 20:07, 21/11/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А что сказали бы на это программисты из авито и баду?
     
     
  • 2.20, View (?), 21:59, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Они бы сказали: "Вопрос передан разработчикам"
    :-D
     

  • 1.34, xm (ok), 16:45, 22/11/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Грубо говоря (поправьте меня) что цели те же, что и у встроенного в тот же nginx Luа или mRuby в H2O.
     
     
  • 2.45, тигар (ok), 14:39, 23/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    думаю, что да. ngx_пегл в ту же степь.
     
  • 2.46, тигар (ok), 14:41, 23/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    кстати, в ngx нет встроенного lua, это все благодаря продуктивному на модули китайцу, автору openresty. Если не ошибаюсь, работает во славу алиэкспресс, либо работал
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру