Что такое nginx эквивалент рабочих и prefork MPM в Apache? - PullRequest
2 голосов
/ 17 ноября 2011

Я серьезно подумываю о переходе с Apache на nginx, и я хотел бы лучше понять nginx - я тоже не гуру Apache, поэтому я думаю, что узнаю больше об Apache в ответах на эти вопросы.Думаю, из моих вопросов станет ясно, что мне действительно есть чему поучиться в этой области и, вероятно, многое неправильно понял.Но вот почему я спрашиваю:

  1. Итак, у nginx нет эквивалента prefork MPM в Apache?Если так, то чем nginx отличается от рабочего MPM?И если это похоже на рабочий MPM, то почему же нет проблем с безопасностью потоков, из-за которых люди не используют Apache mod_php с рабочим MPM?

  2. Если процесс является ОСпроцесс, и процесс может иметь несколько потоков (аналогично Java, где исполняемый файл Java является единственным процессом и может запускать несколько потоков), как «запросы» вписываются в эту модель?Я понимаю, что клиентский запрос не приводит к новому процессу ОС с nginx, но приводит ли он к новому потоку или поток может обрабатывать несколько одновременных запросов?Или, если нет, то несколько последовательных соединений, когда, когда поток завершил один запрос, он может обработать другой?

  3. Каковы отношения между «запросами» и «соединениями»?Если клиент делает 10 запросов, это 10 подключений или 1 подключение?Как долго длится соединение?Я понимаю, что если клиент делает 10 запросов в течение месяца, они могут быть частью одного сеанса (если файл cookie сеанса сохраняется), но, безусловно, это не будет то же соединение.Так где же нарисована линия для того, что представляет собой соединение?

  4. Каковы различные способы использования PHP из nginx?Если я не ошибаюсь, у Apache есть 3 (mod_php, mod_fastcgi и mod_fcgid).Для nginx я слышал о PHP-FPM и FastCGI.Есть ли другие варианты или это только 2 способа, и если да, то чем они отличаются друг от друга?Я продолжаю читать, что PHP-FPM - это другой способ создания FastCGI, поэтому я не совсем уверен, в чем разница.

  5. Если к 10 клиентам подключеносервер, обращающийся к страницам PHP, сколько процессов я увижу при запуске команды top при использовании nginx, и как они будут называться?(Я полагаю, что ответ зависит от ответа на вопрос в предыдущем абзаце.) Если бы это было с Apache prefork MPM и mod_php, если я правильно понял, то я думаю, что я бы увидел 10 процессов httpd при запуске top.

  6. Сколько портов на моем сервере теперь будет занято?До этого был только порт 80 от Apache.Теперь я представляю, что nginx будет иметь порт 80, плюс какой-то другой порт для nginx для связи с тем, что фактически обрабатывает PHP.И что это за штука, которая запускает PHP, это исполняемый файл 'PHP', или 'FastCGI', или что-то еще?

  7. Так что, если nginx настроен на использование нескольких «бэкэндов»'PHP процессоры (это возможно?) Сколько будет экземпляров APC?И как им будут передаваться запросы от nginx (например, будет ли он использовать файл cookie сеанса для отправки того же пользователя обратно на тот же процессор PHP?)

Так много вопросов, я знаю,но, надеюсь, некоторые из них, которые действительно понимают все это, могут помочь мне понять также.Я очень хочу к!Спасибо.

1 Ответ

3 голосов
/ 17 ноября 2011

Эта статья должна ответить практически на все: http://arstechnica.com/business/news/2011/11/a-faster-web-server-ripping-out-apache-for-nginx.ars об Apache v.s. Nginx

Что касается других вопросов:

3) Запрос - это запрос ресурса на сервере. GET /index.html это один запрос. POST /formhandler.php это еще один запрос. Соединение - это буквально настройка сокета TCP, которая связывает клиентский браузер с сервером. Через соединение проходит запрос. Одно соединение может обрабатывать несколько запросов или только один запрос. Это зависит от того, разрешены ли / запрошены ли HTTP Keep-Alives, и какое настроение у клиента и сервера в этот день. В лучшем случае 1 соединение обрабатывает 10 запросов, для чего требуется только одна последовательность квитирования TCP. В худшем случае каждый запрос передается через отдельное соединение, требующее 10 рукопожатий tcp.

6) На сервере будет открыт один или два порта прослушивания (порт 80 для обычного, 443 для ssl, возможно). Любое количество запросов может быть мультиплексировано на один порт. Никогда не будет МЕНЬШЕ, чем один порт, открытый веб-сервером, но никогда не должно быть больше, чем 1 или 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...